From 13781a95f0f28eab45c06b284f591bb42140d4cd Mon Sep 17 00:00:00 2001 From: codinsonn Date: Thu, 4 Apr 2024 23:55:01 +0200 Subject: [PATCH 001/126] feat: Add nativewind --- apps/expo/babel.config.js | 9 +- apps/expo/tailwind.config.js | 14 + apps/next/babel.config.js | 9 +- apps/next/global.css | 5 + apps/next/next.config.js | 1 + apps/next/package.json | 5 +- apps/next/postcss.config.js | 6 + apps/next/tailwind.config.js | 15 + features/app-core/components/Typography.tsx | 7 + features/app-core/package.json | 5 +- features/app-core/screens/HomeScreen.tsx | 5 +- features/app-core/tailwind.config.js | 12 + features/app-core/tailwind.theme.js | 24 + package-lock.json | 3037 ++++++++++++------- 14 files changed, 2105 insertions(+), 1049 deletions(-) create mode 100644 apps/expo/tailwind.config.js create mode 100644 apps/next/postcss.config.js create mode 100644 apps/next/tailwind.config.js create mode 100644 features/app-core/components/Typography.tsx create mode 100644 features/app-core/tailwind.config.js create mode 100644 features/app-core/tailwind.theme.js diff --git a/apps/expo/babel.config.js b/apps/expo/babel.config.js index 5670d98..6fb6b9c 100644 --- a/apps/expo/babel.config.js +++ b/apps/expo/babel.config.js @@ -1,7 +1,8 @@ // babel.config.js module.exports = function (api) { - api.cache(true); + api.cache(true) return { - presets: ["babel-preset-expo"], - }; -}; + presets: ['babel-preset-expo'], + plugins: ['nativewind/babel'], + } +} diff --git a/apps/expo/tailwind.config.js b/apps/expo/tailwind.config.js new file mode 100644 index 0000000..f3640ac --- /dev/null +++ b/apps/expo/tailwind.config.js @@ -0,0 +1,14 @@ +const { universalTheme } = require('@app/core/tailwind.theme') + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './app/**/*.{js,jsx,ts,tsx}', + '../../features/**/*.{js,jsx,ts,tsx}', + '../../packages/**/*.{js,jsx,ts,tsx}', + ], + plugins: [], + theme: { + //...universalTheme, + }, +} diff --git a/apps/next/babel.config.js b/apps/next/babel.config.js index 5670d98..7df53e0 100644 --- a/apps/next/babel.config.js +++ b/apps/next/babel.config.js @@ -1,7 +1,8 @@ // babel.config.js module.exports = function (api) { - api.cache(true); + api.cache(true) return { - presets: ["babel-preset-expo"], - }; -}; + presets: ['babel-preset-expo'], + plugins: ['nativewind/babel', { mode: 'transformOnly' }], + } +} diff --git a/apps/next/global.css b/apps/next/global.css index 658fe65..72e135b 100644 --- a/apps/next/global.css +++ b/apps/next/global.css @@ -1,3 +1,8 @@ + +@tailwind base; +@tailwind components; +@tailwind utilities; + /* -i- Upgrade from the CSS reset that came with Expo's default Next.js setup */ /* Follows the setup for react-native-web: */ /* https://necolas.github.io/react-native-web/docs/setup/#root-element */ diff --git a/apps/next/next.config.js b/apps/next/next.config.js index ec00977..9dfdbde 100644 --- a/apps/next/next.config.js +++ b/apps/next/next.config.js @@ -8,6 +8,7 @@ const nextConfig = withExpo({ "react-native", "react-native-web", "expo", + "nativewind", // Add more React Native / Expo packages here... ], experimental: { diff --git a/apps/next/package.json b/apps/next/package.json index 1ea911a..65ce7d4 100644 --- a/apps/next/package.json +++ b/apps/next/package.json @@ -5,7 +5,10 @@ "dependencies": { "next": "~14.0.4" }, - "devDependencies": {}, + "devDependencies": { + "autoprefixer": "^10.4.19", + "postcss": "8.4.23" + }, "scripts": { "dev": "next dev", "build": "next build", diff --git a/apps/next/postcss.config.js b/apps/next/postcss.config.js new file mode 100644 index 0000000..fef1b22 --- /dev/null +++ b/apps/next/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/apps/next/tailwind.config.js b/apps/next/tailwind.config.js new file mode 100644 index 0000000..e77a1bc --- /dev/null +++ b/apps/next/tailwind.config.js @@ -0,0 +1,15 @@ +const { universalTheme } = require('@app/core/tailwind.theme') + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './app/**/*.{js,jsx,ts,tsx}', + '../../features/**/*.{js,jsx,ts,tsx}', + '../../packages/**/*.{js,jsx,ts,tsx}', + ], + plugins: [require('nativewind/tailwind/css')], + important: 'html', + theme: { + ...universalTheme, + }, +} diff --git a/features/app-core/components/Typography.tsx b/features/app-core/components/Typography.tsx new file mode 100644 index 0000000..23339fc --- /dev/null +++ b/features/app-core/components/Typography.tsx @@ -0,0 +1,7 @@ +import { styled } from 'nativewind' +import { Text } from 'react-native' + +export const H1 = styled(Text, 'font-bold text-2xl') +export const H2 = styled(Text, 'font-bold text-xl') +export const H3 = styled(Text, 'font-bold text-lg') +export const P = styled(Text, 'text-base') diff --git a/features/app-core/package.json b/features/app-core/package.json index e04b339..9002a7f 100644 --- a/features/app-core/package.json +++ b/features/app-core/package.json @@ -2,8 +2,11 @@ "name": "@app/core", "version": "1.0.0", "private": true, - "dependencies": {}, + "dependencies": { + "nativewind": "^2.0.11" + }, "devDependencies": { + "tailwindcss": "3.3.2", "typescript": "5.3.3" }, "scripts": {} diff --git a/features/app-core/screens/HomeScreen.tsx b/features/app-core/screens/HomeScreen.tsx index 7db3255..23a036e 100644 --- a/features/app-core/screens/HomeScreen.tsx +++ b/features/app-core/screens/HomeScreen.tsx @@ -2,6 +2,7 @@ import React from 'react' import { StyleSheet, Text, View } from 'react-native' import { Link } from '../navigation/Link' import { Image } from '../components/Image' +import { H3, P } from '../components/Typography' /* --- --------------------------------------------------------------------------- */ @@ -9,8 +10,8 @@ const HomeScreen = () => { return ( - Expo + Next.js app routing 🚀 - Open HomeScreen.tsx in features/app-core/screens to start working on your app +

Expo + Next.js app routing 🚀

+

Open HomeScreen.tsx in features/app-core/screens to start working on your app

Test navigation Test images Docs diff --git a/features/app-core/tailwind.config.js b/features/app-core/tailwind.config.js new file mode 100644 index 0000000..44a139c --- /dev/null +++ b/features/app-core/tailwind.config.js @@ -0,0 +1,12 @@ +const { universalTheme } = require('./tailwind.theme') + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './**/*.{js,jsx,ts,tsx}', + ], + plugins: [], + theme: { + ...universalTheme, + }, +} diff --git a/features/app-core/tailwind.theme.js b/features/app-core/tailwind.theme.js new file mode 100644 index 0000000..ddcd558 --- /dev/null +++ b/features/app-core/tailwind.theme.js @@ -0,0 +1,24 @@ +/** @type {import('tailwindcss').Config['theme']} */ +const universalTheme = { + // -i- Extend default tailwind theme here + // -i- Reference this theme in the tailwind.config.js files in apps/expo, apps/next, features/app-core and other package or feature folders + extend: { + // colors: { + // primary: { + // 100: '#FFA8E2', + // 200: '#FF8CD4', + // 300: '#FF70C6', + // 400: '#FF54B8', + // 500: '#FF38AA', + // 600: '#FF1C9C', + // 700: '#FF0090', + // 800: '#E60082', + // 900: '#CC0074', + // }, + // } + } +} + +/* --- Exports --------------------------------------------------------------------------------- */ + +module.exports = { universalTheme } diff --git a/package-lock.json b/package-lock.json index 2babd0b..2e8a144 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,22 +44,40 @@ "dependencies": { "next": "~14.0.4" }, - "devDependencies": {} + "devDependencies": { + "autoprefixer": "^10.4.19", + "postcss": "8.4.23" + } }, "features/app-core": { "name": "@app/core", "version": "1.0.0", + "dependencies": { + "nativewind": "^2.0.11" + }, "devDependencies": { + "tailwindcss": "3.3.2", "typescript": "5.3.3" } }, + "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==", + "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==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -78,40 +96,40 @@ "link": true }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", + "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -127,13 +145,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -178,16 +196,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", - "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", + "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -216,9 +234,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -273,11 +291,11 @@ } }, "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==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -313,9 +331,9 @@ } }, "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==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "engines": { "node": ">=6.9.0" } @@ -337,12 +355,12 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -386,9 +404,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } @@ -423,35 +441,36 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", - "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -459,12 +478,27 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz", + "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -474,13 +508,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/plugin-transform-optional-chaining": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -490,12 +524,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", - "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -539,13 +573,13 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.7.tgz", - "integrity": "sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.1.tgz", + "integrity": "sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.23.7", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-decorators": "^7.23.3" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-decorators": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -555,12 +589,29 @@ } }, "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.23.3.tgz", - "integrity": "sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.1.tgz", + "integrity": "sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-default-from": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-export-default-from": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -701,11 +752,11 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", - "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz", + "integrity": "sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -726,11 +777,11 @@ } }, "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.23.3.tgz", - "integrity": "sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.1.tgz", + "integrity": "sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -751,11 +802,11 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", - "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", + "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -765,11 +816,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -779,11 +830,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -815,11 +866,11 @@ } }, "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -923,11 +974,11 @@ } }, "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -952,11 +1003,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -966,12 +1017,12 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", - "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -983,12 +1034,12 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { @@ -999,11 +1050,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1013,11 +1064,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", + "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1027,12 +1078,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1042,12 +1093,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1058,16 +1109,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1079,12 +1130,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1094,11 +1145,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1108,12 +1159,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1123,11 +1174,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1137,11 +1188,11 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1152,12 +1203,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1167,11 +1218,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1182,12 +1233,12 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", - "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz", + "integrity": "sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-flow": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1197,11 +1248,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1212,13 +1263,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1228,11 +1279,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1243,11 +1294,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1257,11 +1308,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1272,11 +1323,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1286,12 +1337,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1301,12 +1352,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-simple-access": "^7.22.5" }, "engines": { @@ -1317,13 +1368,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", - "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { @@ -1334,12 +1385,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1364,11 +1415,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1378,11 +1429,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1393,11 +1444,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1408,15 +1459,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/plugin-transform-parameters": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1426,12 +1476,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1441,11 +1491,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1456,11 +1506,11 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1472,11 +1522,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1486,12 +1536,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1501,13 +1551,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1518,11 +1568,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1532,11 +1582,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", - "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", + "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1578,11 +1628,11 @@ } }, "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", + "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1592,11 +1642,11 @@ } }, "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1606,12 +1656,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", - "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz", + "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1621,11 +1671,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1636,11 +1686,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1650,15 +1700,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz", - "integrity": "sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.7", - "babel-plugin-polyfill-corejs3": "^0.8.7", - "babel-plugin-polyfill-regenerator": "^0.5.4", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -1669,11 +1719,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1683,11 +1733,11 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1698,11 +1748,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1712,11 +1762,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1726,11 +1776,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1740,14 +1790,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", - "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz", + "integrity": "sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.23.3" + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-typescript": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1757,11 +1807,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1771,12 +1821,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1786,12 +1836,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1801,12 +1851,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1816,25 +1866,26 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", - "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz", + "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==", "dependencies": { - "@babel/compat-data": "^7.23.5", + "@babel/compat-data": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1846,58 +1897,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.7", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.3", - "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.4", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.1", + "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.7", - "babel-plugin-polyfill-corejs3": "^0.8.7", - "babel-plugin-polyfill-regenerator": "^0.5.4", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1909,13 +1960,13 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz", - "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.1.tgz", + "integrity": "sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-flow-strip-types": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-flow-strip-types": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1938,16 +1989,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", - "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz", + "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-react-display-name": "^7.24.1", + "@babel/plugin-transform-react-jsx": "^7.23.4", "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.23.3" + "@babel/plugin-transform-react-pure-annotations": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1957,15 +2008,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", - "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", + "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-syntax-jsx": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-typescript": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1998,9 +2049,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", - "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2009,31 +2060,31 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@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.6", - "@babel/types": "^7.23.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2042,9 +2093,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -2070,23 +2121,23 @@ } }, "node_modules/@expo/cli": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.1.tgz", - "integrity": "sha512-7TS7UguHF6KVMVJQKwBgmV/azyPg5Oq/HuSUzWz2rSZbjCpP0ZhEK4WHUNI0uHRxW1AbGYg9ToRkUG53bZlm4Q==", + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.8.tgz", + "integrity": "sha512-yfkoghCltbGPDbRI71Qu3puInjXx4wO82+uhW82qbWLvosfIN7ep5Gr0Lq54liJpvlUG6M0IXM1GiGqcCyP12w==", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/code-signing-certificates": "0.0.5", "@expo/config": "~8.5.0", "@expo/config-plugins": "~7.8.0", "@expo/devcert": "^1.0.0", - "@expo/env": "~0.2.0", + "@expo/env": "~0.2.2", "@expo/image-utils": "^0.4.0", "@expo/json-file": "^8.2.37", "@expo/metro-config": "~0.17.0", "@expo/osascript": "^2.0.31", "@expo/package-manager": "^1.1.1", "@expo/plist": "^0.1.0", - "@expo/prebuild-config": "6.7.3", + "@expo/prebuild-config": "6.7.4", "@expo/rudder-sdk-node": "1.1.1", "@expo/spawn-async": "1.5.0", "@expo/xcpretty": "^4.3.0", @@ -2126,6 +2177,7 @@ "npm-package-arg": "^7.0.0", "open": "^8.3.0", "ora": "3.4.0", + "picomatch": "^3.0.1", "pretty-bytes": "5.6.0", "progress": "2.0.3", "prompts": "^2.3.2", @@ -2138,6 +2190,8 @@ "semver": "^7.5.3", "send": "^0.18.0", "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "stacktrace-parser": "^0.1.10", "structured-headers": "^0.4.1", "tar": "^6.0.5", "temp-dir": "^2.0.0", @@ -2217,9 +2271,9 @@ } }, "node_modules/@expo/cli/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2381,9 +2435,9 @@ } }, "node_modules/@expo/config-plugins/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2501,9 +2555,9 @@ } }, "node_modules/@expo/env": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.1.tgz", - "integrity": "sha512-deZmRS7Dvp18VM8s559dq/ZjPlV1D9vtLoLXwHmCK/JYOvtNptdKsfxcWjI7ewmo6ln2PqgNI9HRI74q6Wk2eA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.2.tgz", + "integrity": "sha512-m9nGuaSpzdvMzevQ1H60FWgf4PG5s4J0dfKUzdAGnDu7sMUerY/yUeDaA4+OBo3vBwGVQ+UHcQS9vPSMBNaPcg==", "dependencies": { "chalk": "^4.0.0", "debug": "^4.3.4", @@ -2857,16 +2911,16 @@ } }, "node_modules/@expo/metro-config": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.17.3.tgz", - "integrity": "sha512-YW8ixbaz6yL7/Mg1rJJejiAAVQQKjGY1wXvT2Dh487r/r9/j1yE1YRS/oRY1yItYzbnHvO0p0jMnEGfiFYL3Tg==", + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.17.6.tgz", + "integrity": "sha512-WaC1C+sLX/Wa7irwUigLhng3ckmXIEQefZczB8DfYmleV6uhfWWo2kz/HijFBpV7FKs2cW6u8J/aBQpFkxlcqg==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", "@expo/config": "~8.5.0", - "@expo/env": "~0.2.0", + "@expo/env": "~0.2.2", "@expo/json-file": "~8.3.0", "@expo/spawn-async": "^1.7.2", "babel-preset-fbjs": "^3.4.0", @@ -2996,6 +3050,33 @@ "node": ">=8" } }, + "node_modules/@expo/metro-config/node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "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.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/@expo/metro-config/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3049,9 +3130,9 @@ } }, "node_modules/@expo/metro-runtime": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.1.1.tgz", - "integrity": "sha512-NTtSgYIDqoJb/3m6uxus08PcJO7FguHRRg/ZLRBXt/NNPtJ1bk9eLGspZaa5jbSniVZe2AIXW9VGPi/GwKmIbQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.1.3.tgz", + "integrity": "sha512-u1CaQJJlSgvxBB5NJ6YMVvSDTTRzjT71dHpEBnKPZhpFv5ebVry52FZ2sEeEEA6mHG5zGxWXmHImW3hNKHh8EA==", "peerDependencies": { "react-native": "*" } @@ -3178,9 +3259,9 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.7.3.tgz", - "integrity": "sha512-jZIHzlnvdg4Gnln06XR9tvirL3hSp/Jh48COhLKs51vb3THCWumUytZBS4DSMdvGwf8btnaB01Zg00xQhSDBsA==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.7.4.tgz", + "integrity": "sha512-x8EUdCa8DTMZ/dtEXjHAdlP+ljf6oSeSKNzhycXiHhpMSMG9jEhV28ocCwc6cKsjK5GziweEiHwvrj6+vsBlhA==", "dependencies": { "@expo/config": "~8.5.0", "@expo/config-plugins": "~7.8.0", @@ -3283,9 +3364,9 @@ "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==" }, "node_modules/@expo/server": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.3.0.tgz", - "integrity": "sha512-5oIqedpLVMnf1LGI9Xd5OOGmK3DjgH9VpuqVN4e/6DwLT05RZJMyI7ylfG6QSy1e44yOgjv242tLyg0e/zdZ+A==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.3.1.tgz", + "integrity": "sha512-cCKyVA2IR9J4hDFPXzj3L08+Ngd/7z2F+JtdW0NLy03qShXBI5NSEEcaiHtjrgsLXPDe9PBw5Xgsfmxuduyggg==", "dependencies": { "@remix-run/node": "^1.19.3", "abort-controller": "^3.0.0", @@ -3578,41 +3659,41 @@ } }, "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==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "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==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -3621,9 +3702,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3822,9 +3903,9 @@ } }, "node_modules/@npmcli/fs/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -4480,9 +4561,9 @@ } }, "node_modules/@react-native-community/cli-doctor/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5329,9 +5410,9 @@ } }, "node_modules/@react-native-community/cli-tools/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5601,9 +5682,9 @@ } }, "node_modules/@react-native-community/cli/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5672,25 +5753,28 @@ } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.73.2", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.2.tgz", - "integrity": "sha512-PadyFZWVaWXIBP7Q5dgEL7eAd7tnsgsLjoHJB1hIRZZuVUg1Zqe3nULwC7RFAqOtr5Qx7KXChkFFcKQ3WnZzGw==", + "version": "0.75.0-main", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.75.0-main.tgz", + "integrity": "sha512-gEl+bl+orntqNA3yGETGeHLNzDnZuQfO074BreX/l80WnZbx00/BJ57IkZ372j6I+gjki+3dYeRQOp82m/sUWQ==", + "peer": true, "dependencies": { - "@react-native/codegen": "0.73.2" + "@react-native/codegen": "0.75.0-main" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.73.19", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.19.tgz", - "integrity": "sha512-ujon01uMOREZecIltQxPDmJ6xlVqAUFGI/JCSpeVYdxyXBoBH5dBb0ihj7h6LKH1q1jsnO9z4MxfddtypKkIbg==", + "version": "0.75.0-main", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.75.0-main.tgz", + "integrity": "sha512-yTyft0jSbTEfTfDUUfllJqKWLl3rNMiVMFjuWzMigikKAlSwKKUC/DxTEUfMwekFU05TjDyEOtigOTrm2yuoRQ==", + "peer": true, "dependencies": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", "@babel/plugin-proposal-class-properties": "^7.18.0", "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", "@babel/plugin-proposal-numeric-separator": "^7.0.0", "@babel/plugin-proposal-object-rest-spread": "^7.20.0", @@ -5726,7 +5810,7 @@ "@babel/plugin-transform-typescript": "^7.5.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.73.2", + "@react-native/babel-plugin-codegen": "0.75.0-main", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, @@ -5738,13 +5822,14 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.73.2", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.2.tgz", - "integrity": "sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==", + "version": "0.75.0-main", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.75.0-main.tgz", + "integrity": "sha512-vcIu7x7o/3xn9UQdOPqA6B/jtxDHB+xTIDlVe7nym+0ua/OIOwYoVscTb0NtHuEjGKO1G5CTWNhl34BFhIs0+g==", + "peer": true, "dependencies": { "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", "glob": "^7.1.1", + "hermes-parser": "0.20.1", "invariant": "^2.2.4", "jscodeshift": "^0.14.0", "mkdirp": "^0.5.1", @@ -5778,6 +5863,26 @@ "node": ">=18" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { + "version": "0.73.7", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz", + "integrity": "sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.73.3", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^1.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "open": "^7.0.3", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5836,6 +5941,14 @@ "node": ">= 8" } }, + "node_modules/@react-native/community-cli-plugin/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/@react-native/community-cli-plugin/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -5896,6 +6009,11 @@ "node": ">=6" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/@react-native/community-cli-plugin/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -5921,6 +6039,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -5982,9 +6115,9 @@ } }, "node_modules/@react-native/dev-middleware": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz", - "integrity": "sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.8.tgz", + "integrity": "sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg==", "dependencies": { "@isaacs/ttlcache": "^1.4.1", "@react-native/debugger-frontend": "0.73.3", @@ -5995,7 +6128,8 @@ "node-fetch": "^2.2.0", "open": "^7.0.3", "serve-static": "^1.13.1", - "temp-dir": "^2.0.0" + "temp-dir": "^2.0.0", + "ws": "^6.2.2" }, "engines": { "node": ">=18" @@ -6029,6 +6163,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, "node_modules/@react-native/gradle-plugin": { "version": "0.73.4", "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz", @@ -6062,6 +6204,113 @@ "@babel/core": "*" } }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.2.tgz", + "integrity": "sha512-PadyFZWVaWXIBP7Q5dgEL7eAd7tnsgsLjoHJB1hIRZZuVUg1Zqe3nULwC7RFAqOtr5Qx7KXChkFFcKQ3WnZzGw==", + "dependencies": { + "@react-native/codegen": "0.73.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": { + "version": "0.73.19", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.19.tgz", + "integrity": "sha512-ujon01uMOREZecIltQxPDmJ6xlVqAUFGI/JCSpeVYdxyXBoBH5dBb0ihj7h6LKH1q1jsnO9z4MxfddtypKkIbg==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.2", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/codegen": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.2.tgz", + "integrity": "sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==", + "dependencies": { + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", + "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==" + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", + "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", + "dependencies": { + "hermes-estree": "0.15.0" + } + }, "node_modules/@react-native/normalize-color": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", @@ -6088,11 +6337,11 @@ } }, "node_modules/@react-navigation/bottom-tabs": { - "version": "6.5.11", - "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.11.tgz", - "integrity": "sha512-CBN/NOdxnMvmjw+AJQI1kltOYaClTZmGec5pQ3ZNTPX86ytbIOylDIITKMfTgHZcIEFQDymx1SHeS++PIL3Szw==", + "version": "6.5.20", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz", + "integrity": "sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA==", "dependencies": { - "@react-navigation/elements": "^1.3.21", + "@react-navigation/elements": "^1.3.30", "color": "^4.2.3", "warn-once": "^0.1.0" }, @@ -6105,16 +6354,16 @@ } }, "node_modules/@react-navigation/core": { - "version": "6.4.10", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.10.tgz", - "integrity": "sha512-oYhqxETRHNHKsipm/BtGL0LI43Hs2VSFoWMbBdHK9OqgQPjTVUitslgLcPpo4zApCcmBWoOLX2qPxhsBda644A==", + "version": "6.4.16", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.16.tgz", + "integrity": "sha512-UDTJBsHxnzgFETR3ZxhctP+RWr4SkyeZpbhpkQoIGOuwSCkt1SE0qjU48/u6r6w6XlX8OqVudn1Ab0QFXTHxuQ==", "dependencies": { "@react-navigation/routers": "^6.1.9", "escape-string-regexp": "^4.0.0", "nanoid": "^3.1.23", "query-string": "^7.1.3", "react-is": "^16.13.0", - "use-latest-callback": "^0.1.7" + "use-latest-callback": "^0.1.9" }, "peerDependencies": { "react": "*" @@ -6131,15 +6380,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-navigation/core/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==" - }, "node_modules/@react-navigation/elements": { - "version": "1.3.21", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.21.tgz", - "integrity": "sha512-eyS2C6McNR8ihUoYfc166O1D8VYVh9KIl0UQPI8/ZJVsStlfSTgeEEh+WXge6+7SFPnZ4ewzEJdSAHH+jzcEfg==", + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.30.tgz", + "integrity": "sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ==", "peerDependencies": { "@react-navigation/native": "^6.0.0", "react": "*", @@ -6148,11 +6392,11 @@ } }, "node_modules/@react-navigation/native": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.9.tgz", - "integrity": "sha512-AMuJDpwXE7UlfyhIXaUCCynXmv69Kb8NzKgKJO7v0k0L+u6xUTbt6xvshmJ79vsvaFyaEH9Jg5FMzek5/S5qNw==", + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.17.tgz", + "integrity": "sha512-mer3OvfwWOHoUSMJyLa4vnBH3zpFmCwuzrBPlw7feXklurr/ZDiLjLxUScOot6jLRMz/67GyilEYMmP99LL0RQ==", "dependencies": { - "@react-navigation/core": "^6.4.10", + "@react-navigation/core": "^6.4.16", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.1.23" @@ -6163,11 +6407,11 @@ } }, "node_modules/@react-navigation/native-stack": { - "version": "6.9.17", - "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.17.tgz", - "integrity": "sha512-X8p8aS7JptQq7uZZNFEvfEcPf6tlK4PyVwYDdryRbG98B4bh2wFQYMThxvqa+FGEN7USEuHdv2mF0GhFKfX0ew==", + "version": "6.9.26", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.26.tgz", + "integrity": "sha512-++dueQ+FDj2XkZ902DVrK79ub1vp19nSdAZWxKRgd6+Bc0Niiesua6rMCqymYOVaYh+dagwkA9r00bpt/U5WLw==", "dependencies": { - "@react-navigation/elements": "^1.3.21", + "@react-navigation/elements": "^1.3.30", "warn-once": "^0.1.0" }, "peerDependencies": { @@ -6301,9 +6545,9 @@ } }, "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -6353,9 +6597,9 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/eslint": { - "version": "8.56.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", - "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "version": "8.56.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.7.tgz", + "integrity": "sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==", "dev": true, "peer": true, "dependencies": { @@ -6408,17 +6652,17 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/node": { - "version": "20.11.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", - "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "version": "20.12.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.4.tgz", + "integrity": "sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", "dev": true }, "node_modules/@types/react": { @@ -6433,9 +6677,9 @@ } }, "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==", "dev": true }, "node_modules/@types/stack-utils": { @@ -6486,9 +6730,9 @@ "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==" }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "peer": true, "dependencies": { @@ -6511,9 +6755,9 @@ "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true, "peer": true }, @@ -6537,16 +6781,16 @@ "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -6577,30 +6821,30 @@ "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -6608,26 +6852,26 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -6636,13 +6880,13 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -6742,15 +6986,13 @@ } }, "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, - "peer": true, + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -6774,34 +7016,15 @@ } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peer": true, "peerDependencies": { - "ajv": "^6.9.1" + "ajv": "^8.8.2" } }, "node_modules/anser": { @@ -6869,6 +7092,17 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/appdirsjs": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", @@ -6942,10 +7176,50 @@ "node": ">= 4.0.0" } }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "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.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -6962,12 +7236,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.1", "semver": "^6.3.1" }, "peerDependencies": { @@ -6975,38 +7249,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", - "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4", - "core-js-compat": "^3.33.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", - "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", + "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" + "@babel/helper-define-polyfill-provider": "^0.6.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -7046,6 +7305,100 @@ "react-refresh": "0.14.0" } }, + "node_modules/babel-preset-expo/node_modules/@react-native/babel-plugin-codegen": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz", + "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==", + "dependencies": { + "@react-native/codegen": "0.73.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/babel-preset-expo/node_modules/@react-native/babel-preset": { + "version": "0.73.21", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz", + "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.4", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/babel-preset-expo/node_modules/@react-native/codegen": { + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz", + "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==", + "dependencies": { + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/babel-preset-expo/node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/babel-preset-fbjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", @@ -7126,6 +7479,17 @@ "node": ">=0.6" } }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -7194,9 +7558,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "funding": [ { "type": "opencollective", @@ -7212,8 +7576,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -7373,13 +7737,18 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7426,10 +7795,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001579", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", - "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", + "version": "1.0.30001605", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", + "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", "funding": [ { "type": "opencollective", @@ -7466,6 +7851,29 @@ "node": "*" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -7842,11 +8250,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", - "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", "dependencies": { - "browserslist": "^4.22.2" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -7919,6 +8327,14 @@ "node": ">=8" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, "node_modules/css-in-js-utils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", @@ -7927,6 +8343,32 @@ "hyphenate-style-name": "^1.0.3" } }, + "node_modules/css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "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==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -8031,16 +8473,19 @@ } }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -8140,6 +8585,11 @@ "node": ">=0.10" } }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -8151,6 +8601,11 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, "node_modules/dotenv": { "version": "16.0.3", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", @@ -8173,9 +8628,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.642", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.642.tgz", - "integrity": "sha512-M4+u22ZJGpk4RY7tne6W+APkZhnnhmAH48FNl8iEFK2lEgob+U5rUQsIqQhvAwCXYpfd3H20pHK/ENsCvwTbsA==" + "version": "1.4.727", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.727.tgz", + "integrity": "sha512-brpv4KTeC4g0Fx2FeIKytLd4UGn1zBQq5Lauy7zEWT9oqkaj5mgsxblEZIAOf1HHLlXxzr6adGViiBy5Z39/CA==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -8199,9 +8654,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "peer": true, "dependencies": { @@ -8221,9 +8676,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", + "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", "bin": { "envinfo": "dist/cli.js" }, @@ -8264,17 +8719,36 @@ "node": ">= 0.8" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "dev": true, "peer": true }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -8408,23 +8882,23 @@ } }, "node_modules/expo": { - "version": "50.0.2", - "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.2.tgz", - "integrity": "sha512-nHb/ACe+vVm8lKkKj3LIWgypQI9oGSe9aNSzeJhT3/sBW/KIrnaSMgjs0WujqEJ85xMiXt7EQlwIFIdtBW82jg==", + "version": "50.0.14", + "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.14.tgz", + "integrity": "sha512-yLPdxCMVAbmeEIpzzyAuJ79wvr6ToDDtQmuLDMAgWtjqP8x3CGddXxUe07PpKEQgzwJabdHvCLP5Bv94wMFIjQ==", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.17.1", + "@expo/cli": "0.17.8", "@expo/config": "8.5.4", "@expo/config-plugins": "7.8.4", - "@expo/metro-config": "0.17.3", + "@expo/metro-config": "0.17.6", "@expo/vector-icons": "^14.0.0", "babel-preset-expo": "~10.0.1", "expo-asset": "~9.0.2", - "expo-file-system": "~16.0.4", - "expo-font": "~11.10.2", + "expo-file-system": "~16.0.8", + "expo-font": "~11.10.3", "expo-keep-awake": "~12.8.2", - "expo-modules-autolinking": "1.10.2", - "expo-modules-core": "1.11.7", + "expo-modules-autolinking": "1.10.3", + "expo-modules-core": "1.11.12", "fbemitter": "^3.0.0", "whatwg-url-without-unicode": "8.0.0-3" }, @@ -8457,17 +8931,17 @@ } }, "node_modules/expo-file-system": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-16.0.4.tgz", - "integrity": "sha512-H6WIzAi2rS7NaRXemolInejvdW6GllpBDWdQTa+6jPkfKg7PVL+ovzf5Ebb4EQl2O2dAQtF31LLQkps5Rdb92g==", + "version": "16.0.8", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-16.0.8.tgz", + "integrity": "sha512-yDbVT0TUKd7ewQjaY5THum2VRFx2n/biskGhkUmLh3ai21xjIVtaeIzHXyv9ir537eVgt4ReqDNWi7jcXjdUcA==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-font": { - "version": "11.10.2", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.10.2.tgz", - "integrity": "sha512-AE0Q0LiWiVosQ/jlKUPoWoob7p3GwYM2xmLoUkuopO9RYh9NL1hZKHiMKcWBZyDG8Gww1GtBQwh7ZREST8+jjQ==", + "version": "11.10.3", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.10.3.tgz", + "integrity": "sha512-q1Td2zUvmLbCA9GV4OG4nLPw5gJuNY1VrPycsnemN1m8XWTzzs8nyECQQqrcBhgulCgcKZZJJ6U0kC2iuSoQHQ==", "dependencies": { "fontfaceobserver": "^2.1.0" }, @@ -8504,9 +8978,9 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.10.2.tgz", - "integrity": "sha512-OEeoz0+zGx5EJwGtDm9pSywCr+gUCaisZV0mNkK7V3fuRl+EVPBSsI+957JwAc4ZxVps95jy28eLcRRtQ33yVg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.10.3.tgz", + "integrity": "sha512-pn4n2Dl4iRh/zUeiChjRIe1C7EqOw1qhccr85viQV7W6l5vgRpY0osE51ij5LKg/kJmGRcJfs12+PwbdTplbKw==", "dependencies": { "@expo/config": "~8.5.0", "chalk": "^4.1.0", @@ -8617,105 +9091,56 @@ } }, "node_modules/expo-modules-core": { - "version": "1.11.7", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.7.tgz", - "integrity": "sha512-4LFoCaoO36pQCQpge4jLjDSFkO5qpPYl5FMRF6FkwqO3gCpaQu5SUeErZKT4gaon9WHDCWuGVTRtNSjgN5jwVw==", + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.12.tgz", + "integrity": "sha512-/e8g4kis0pFLer7C0PLyx98AfmztIM6gU9jLkYnB1pU9JAfQf904XEi3bmszO7uoteBQwSL6FLp1m3TePKhDaA==", "dependencies": { "invariant": "^2.2.4" } }, - "node_modules/expo-router": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.4.4.tgz", - "integrity": "sha512-72vpjXpVw+KoNMlEl6MGL0mpHom/5M3PmtojgLssLE2ZjLQqIym3qPcx2xYEE6nbo61+Z8ol5BT/Jvj9O2q0rw==", - "dependencies": { - "@expo/metro-runtime": "3.1.1", - "@expo/server": "^0.3.0", - "@radix-ui/react-slot": "1.0.1", - "@react-navigation/bottom-tabs": "~6.5.7", - "@react-navigation/native": "~6.1.6", - "@react-navigation/native-stack": "~6.9.12", - "expo-splash-screen": "0.26.3", - "react-helmet-async": "^1.3.0", - "schema-utils": "^4.0.1" - }, - "peerDependencies": { - "@react-navigation/drawer": "^6.5.8", - "expo": "*", - "expo-constants": "*", - "expo-linking": "*", - "expo-status-bar": "*", - "react-native-reanimated": "*", - "react-native-safe-area-context": "*", - "react-native-screens": "*" - }, - "peerDependenciesMeta": { - "@react-navigation/drawer": { - "optional": true - }, - "@testing-library/jest-native": { - "optional": true - }, - "react-native-reanimated": { - "optional": true - } - } - }, - "node_modules/expo-router/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/expo-router/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/expo-router/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/expo-router/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "node_modules/expo-router": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.4.8.tgz", + "integrity": "sha512-fOOAWHH4LSPjPFtIZbApxdTNU8xSS8qKvhZ7PfWNMfx9510J1R1Ce/nwENPzcRLHRuVofDsSAEBfi4kV03fJwg==", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "@expo/metro-runtime": "3.1.3", + "@expo/server": "^0.3.0", + "@radix-ui/react-slot": "1.0.1", + "@react-navigation/bottom-tabs": "~6.5.7", + "@react-navigation/native": "~6.1.6", + "@react-navigation/native-stack": "~6.9.12", + "expo-splash-screen": "0.26.4", + "react-helmet-async": "^1.3.0", + "schema-utils": "^4.0.1" }, - "engines": { - "node": ">= 12.13.0" + "peerDependencies": { + "@react-navigation/drawer": "^6.5.8", + "expo": "*", + "expo-constants": "*", + "expo-linking": "*", + "expo-status-bar": "*", + "react-native-reanimated": "*", + "react-native-safe-area-context": "*", + "react-native-screens": "*" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependenciesMeta": { + "@react-navigation/drawer": { + "optional": true + }, + "@testing-library/jest-native": { + "optional": true + }, + "react-native-reanimated": { + "optional": true + } } }, "node_modules/expo-splash-screen": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.26.3.tgz", - "integrity": "sha512-zV+2J/stwdirINrcs/d0BTVjKGUoZyN2j5vTp4H4dwWWU/gA0yAkzzh5eGHySg+yTqMSr7sPJkiyZh2Hek2vBQ==", + "version": "0.26.4", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.26.4.tgz", + "integrity": "sha512-2DwofTQ0FFQCsvDysm/msENsbyNsJiAJwK3qK/oXeizECAPqD7bK19J4z9kuEbr7ORPX9MLnTQYKl6kmX3keUg==", "dependencies": { - "@expo/prebuild-config": "6.7.3" + "@expo/prebuild-config": "6.7.4" }, "peerDependencies": { "expo": "*" @@ -8726,6 +9151,11 @@ "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.11.1.tgz", "integrity": "sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg==" }, + "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-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -8759,9 +9189,9 @@ "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" }, "node_modules/fast-xml-parser": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.3.tgz", - "integrity": "sha512-coV/D1MhrShMvU6D0I+VAK3umz6hUaxxhL0yp/9RjfiYUfAv14rDhGQL+PLForhMdr0wq3PiV07WtkkNjJjNHg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", + "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", "funding": [ { "type": "github", @@ -8780,9 +9210,9 @@ } }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dependencies": { "reusify": "^1.0.4" } @@ -8918,9 +9348,9 @@ "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" }, "node_modules/flow-parser": { - "version": "0.206.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", - "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "version": "0.233.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.233.0.tgz", + "integrity": "sha512-E/mv51GYJfLuRX6fZnw4M52gBxYa8pkHUOgNEZOcQK2RTXS8YXeU5rlalkTcY99UpwbeNVCSUFKaavpOksi/pQ==", "engines": { "node": ">=0.4.0" } @@ -8951,6 +9381,19 @@ "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/freeport-async": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", @@ -9034,15 +9477,19 @@ } }, "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==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9183,20 +9630,20 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -9216,11 +9663,11 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -9230,9 +9677,9 @@ } }, "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==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -9241,16 +9688,16 @@ } }, "node_modules/hermes-estree": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", - "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==" + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" }, "node_modules/hermes-parser": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", - "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", "dependencies": { - "hermes-estree": "0.15.0" + "hermes-estree": "0.20.1" } }, "node_modules/hermes-profile-transformer": { @@ -9359,9 +9806,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "engines": { "node": ">= 4" } @@ -9470,9 +9917,9 @@ } }, "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", + "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" }, "node_modules/ip-regex": { "version": "2.1.0", @@ -9510,6 +9957,17 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "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==", + "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", @@ -9682,11 +10140,11 @@ } }, "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==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -9964,6 +10422,17 @@ "node": ">=8" } }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10125,14 +10594,22 @@ "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==" }, + "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==", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/joi": { - "version": "17.12.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.0.tgz", - "integrity": "sha512-HSLsmSmXz+PV9PYoi3p7cgIbj06WnEBNT28n+bbBNcPZXZFqCzzvGqpTBPujx/Z0nh1+KNQPDrNgdmQ8dq0qYw==", + "version": "17.12.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.3.tgz", + "integrity": "sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g==", "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.4", + "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } @@ -10317,11 +10794,9 @@ } }, "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, - "peer": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json5": { "version": "2.2.3", @@ -10565,6 +11040,14 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "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", @@ -10896,9 +11379,9 @@ } }, "node_modules/metro": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.4.tgz", - "integrity": "sha512-fBhZKU1z44KdhS6sH6Sk97595A66EOniH+jI9OjKDu6piH1SIEqQgdWAuWfJJMzgBHcJceRRvJY1zzsOT/Zx0g==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.8.tgz", + "integrity": "sha512-in7S0W11mg+RNmcXw+2d9S3zBGmCARDxIwoXJAmLUQOQoYsRP3cpGzyJtc7WOw8+FXfpgXvceD0u+PZIHXEL7g==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -10915,25 +11398,24 @@ "denodeify": "^1.2.1", "error-stack-parser": "^2.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.18.2", + "hermes-parser": "0.20.1", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.6.3", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.4", - "metro-cache": "0.80.4", - "metro-cache-key": "0.80.4", - "metro-config": "0.80.4", - "metro-core": "0.80.4", - "metro-file-map": "0.80.4", - "metro-minify-terser": "0.80.4", - "metro-resolver": "0.80.4", - "metro-runtime": "0.80.4", - "metro-source-map": "0.80.4", - "metro-symbolicate": "0.80.4", - "metro-transform-plugins": "0.80.4", - "metro-transform-worker": "0.80.4", + "metro-babel-transformer": "0.80.8", + "metro-cache": "0.80.8", + "metro-cache-key": "0.80.8", + "metro-config": "0.80.8", + "metro-core": "0.80.8", + "metro-file-map": "0.80.8", + "metro-resolver": "0.80.8", + "metro-runtime": "0.80.8", + "metro-source-map": "0.80.8", + "metro-symbolicate": "0.80.8", + "metro-transform-plugins": "0.80.8", + "metro-transform-worker": "0.80.8", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -10953,37 +11435,24 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.4.tgz", - "integrity": "sha512-QP1kjYLap4O3w9tA4bYO8iyuNpR65If5Z97Ku37O4CwQPAwQaTmg67g4OdABS4BVK10fsxdExKp+fC37XirPow==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.8.tgz", + "integrity": "sha512-TTzNwRZb2xxyv4J/+yqgtDAP2qVqH3sahsnFu6Xv4SkLqzrivtlnyUbaeTdJ9JjtADJUEjCbgbFgUVafrXdR9Q==", "dependencies": { "@babel/core": "^7.20.0", - "hermes-parser": "0.18.2", + "hermes-parser": "0.20.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">=18" } }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz", - "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==" - }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz", - "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==", - "dependencies": { - "hermes-estree": "0.18.2" - } - }, "node_modules/metro-cache": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.4.tgz", - "integrity": "sha512-Dj+GoYt4PvsnnE4GdXhqV9PxEF7GPilY5NPeoTgptWZLlaDuTT2+cJQoDOOit1SfRjnF0zqABtVvB6GGBWdtaQ==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.8.tgz", + "integrity": "sha512-5svz+89wSyLo7BxdiPDlwDTgcB9kwhNMfNhiBZPNQQs1vLFXxOkILwQiV5F2EwYT9DEr6OPZ0hnJkZfRQ8lDYQ==", "dependencies": { - "metro-core": "0.80.4", + "metro-core": "0.80.8", "rimraf": "^3.0.2" }, "engines": { @@ -10991,9 +11460,9 @@ } }, "node_modules/metro-cache-key": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.4.tgz", - "integrity": "sha512-okOOSRFou7Mxaaigoi+KxdFIU/ZJtvDCC6l8BYKsdMx86JDlVdvtIgFU4tFrY1yEkv0wnn7WH0X3xSz4mHKwoQ==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.8.tgz", + "integrity": "sha512-qWKzxrLsRQK5m3oH8ePecqCc+7PEhR03cJE6Z6AxAj0idi99dHOSitTmY0dclXVB9vP2tQIAE8uTd8xkYGk8fA==", "engines": { "node": ">=18" } @@ -11013,38 +11482,38 @@ } }, "node_modules/metro-config": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.4.tgz", - "integrity": "sha512-X3/3tleFYB4SdoxXg8uJ+qc8eITKiLnXs3Ev6pihM4jIM5JD89riwUsSLKVsovfZs8ETqKtjevzfe6jQ2O5NtQ==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.8.tgz", + "integrity": "sha512-VGQJpfJawtwRzGzGXVUoohpIkB0iPom4DmSbAppKfumdhtLA8uVeEPp2GM61kL9hRvdbMhdWA7T+hZFDlo4mJA==", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", "jest-validate": "^29.6.3", - "metro": "0.80.4", - "metro-cache": "0.80.4", - "metro-core": "0.80.4", - "metro-runtime": "0.80.4" + "metro": "0.80.8", + "metro-cache": "0.80.8", + "metro-core": "0.80.8", + "metro-runtime": "0.80.8" }, "engines": { "node": ">=18" } }, "node_modules/metro-core": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.4.tgz", - "integrity": "sha512-HRb+zydAhI7QyLpK4D6ARZsKjaBwEn+kCrJEjnVFij8wjJxIIHVilgNCETgg9NWvKJFUoZZCG7ewHkxQ9Qpd8Q==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.8.tgz", + "integrity": "sha512-g6lud55TXeISRTleW6SHuPFZHtYrpwNqbyFIVd9j9Ofrb5IReiHp9Zl8xkAfZQp8v6ZVgyXD7c130QTsCz+vBw==", "dependencies": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.4" + "metro-resolver": "0.80.8" }, "engines": { "node": ">=18" } }, "node_modules/metro-file-map": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.4.tgz", - "integrity": "sha512-EvBC31JI5vsyebeQ8PWpGENuAWy2Ka7sLqEW7OInW+aLVWmBq02h0BNl33xRgAMz0gwvMf2nKie82hmefYF6ew==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.8.tgz", + "integrity": "sha512-eQXMFM9ogTfDs2POq7DT2dnG7rayZcoEgRbHPXvhUWkVwiKkro2ngcBE++ck/7A36Cj5Ljo79SOkYwHaWUDYDw==", "dependencies": { "anymatch": "^3.0.3", "debug": "^2.2.0", @@ -11078,9 +11547,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/metro-minify-terser": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.4.tgz", - "integrity": "sha512-cuxfRZWDWGKjh+Z6t4KJkrvmV4JUKXfvQuAX7Pa7U0Mf1YJdLtoGQ5iVOu/6MkfYGXbppqGk2qmFECrRGRh0cA==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.8.tgz", + "integrity": "sha512-y8sUFjVvdeUIINDuW1sejnIjkZfEF+7SmQo0EIpYbWmwh+kq/WMj74yVaBWuqNjirmUp1YNfi3alT67wlbBWBQ==", "dependencies": { "terser": "^5.15.0" }, @@ -11089,17 +11558,17 @@ } }, "node_modules/metro-resolver": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.4.tgz", - "integrity": "sha512-PCiVWN+d3gtWlobf8jPypwKx9T1QrZmhLJAyqIWLoOsZbpSfj1dn5h0ajCr8rYi9LNzIHm58GGYJK8VFHNn8Cw==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.8.tgz", + "integrity": "sha512-JdtoJkP27GGoZ2HJlEsxs+zO7jnDUCRrmwXJozTlIuzLHMRrxgIRRby9fTCbMhaxq+iA9c+wzm3iFb4NhPmLbQ==", "engines": { "node": ">=18" } }, "node_modules/metro-runtime": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.4.tgz", - "integrity": "sha512-CWIvf0zmL4jKHSj81zjUAbEwjTqFQmETI0NIQvN4JNwTSHiz50WPOuHnUUcmwM6Dye/ta6KNTELnERp0tKEYYg==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.8.tgz", + "integrity": "sha512-2oScjfv6Yb79PelU1+p8SVrCMW9ZjgEiipxq7jMRn8mbbtWzyv3g8Mkwr+KwOoDFI/61hYPUbY8cUnu278+x1g==", "dependencies": { "@babel/runtime": "^7.0.0" }, @@ -11108,16 +11577,16 @@ } }, "node_modules/metro-source-map": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.4.tgz", - "integrity": "sha512-x+0By55ml6IcGqY9x9HE0hyU0S+uDssrTQ0bPvuydG+iKCX85DzGnlT8k0Vs+EYgZl3KMWcvQ9TpGHW4LRL4GQ==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.8.tgz", + "integrity": "sha512-+OVISBkPNxjD4eEKhblRpBf463nTMk3KMEeYS8Z4xM/z3qujGJGSsWUGRtH27+c6zElaSGtZFiDMshEb8mMKQg==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.80.4", + "metro-symbolicate": "0.80.8", "nullthrows": "^1.1.1", - "ob1": "0.80.4", + "ob1": "0.80.8", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -11134,12 +11603,12 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.4.tgz", - "integrity": "sha512-UmtH96G5TrcAgbIqdE4xA8MBS9fbZW9Pln+n7eJ0tQ0Fw0M/jzdpiZzhx3bIB2zzqbdm6Nv/kB1+aEo0WvXdyg==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.8.tgz", + "integrity": "sha512-nwhYySk79jQhwjL9QmOUo4wS+/0Au9joEryDWw7uj4kz2yvw1uBjwmlql3BprQCBzRdB3fcqOP8kO8Es+vE31g==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.80.4", + "metro-source-map": "0.80.8", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -11161,9 +11630,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.4.tgz", - "integrity": "sha512-cvmTLBA9ET64h+tgHt6prHlvOq98zBA1Glc9+wLZihPJo+Qmu9i3nQ1g4O+4aUnHivDlp+4C00BMNC+aC/buRQ==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.8.tgz", + "integrity": "sha512-sSu8VPL9Od7w98MftCOkQ1UDeySWbsIAS5I54rW22BVpPnI3fQ42srvqMLaJUQPjLehUanq8St6OMBCBgH/UWw==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -11176,20 +11645,21 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.4.tgz", - "integrity": "sha512-hLCrlxXyyaV64XQNSiyY/0jMVvGXrgXMkpJ4KwH2t4clxbxyt6TBW+4TqmgAeU9WGclY0OuQ0HzfvIZiONcUOw==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.8.tgz", + "integrity": "sha512-+4FG3TQk3BTbNqGkFb2uCaxYTfsbuFOCKMMURbwu0ehCP8ZJuTUramkaNZoATS49NSAkRgUltgmBa4YaKZ5mqw==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "metro": "0.80.4", - "metro-babel-transformer": "0.80.4", - "metro-cache": "0.80.4", - "metro-cache-key": "0.80.4", - "metro-source-map": "0.80.4", - "metro-transform-plugins": "0.80.4", + "metro": "0.80.8", + "metro-babel-transformer": "0.80.8", + "metro-cache": "0.80.8", + "metro-cache-key": "0.80.8", + "metro-minify-terser": "0.80.8", + "metro-source-map": "0.80.8", + "metro-transform-plugins": "0.80.8", "nullthrows": "^1.1.1" }, "engines": { @@ -11262,19 +11732,6 @@ "node": ">=8" } }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz", - "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==" - }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz", - "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==", - "dependencies": { - "hermes-estree": "0.18.2" - } - }, "node_modules/metro/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -11356,6 +11813,17 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -11572,6 +12040,61 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nativewind": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/nativewind/-/nativewind-2.0.11.tgz", + "integrity": "sha512-qCEXUwKW21RYJ33KRAJl3zXq2bCq82WoI564fI21D/TiqhfmstZOqPN53RF8qK1NDK6PGl56b2xaTxgObEePEg==", + "dependencies": { + "@babel/generator": "^7.18.7", + "@babel/helper-module-imports": "7.18.6", + "@babel/types": "7.19.0", + "css-mediaquery": "^0.1.2", + "css-to-react-native": "^3.0.0", + "micromatch": "^4.0.5", + "postcss": "^8.4.12", + "postcss-calc": "^8.2.4", + "postcss-color-functional-notation": "^4.2.2", + "postcss-css-variables": "^0.18.0", + "postcss-nested": "^5.0.6", + "react-is": "^18.1.0", + "use-sync-external-store": "^1.1.0" + }, + "engines": { + "node": ">=14.18" + }, + "peerDependencies": { + "tailwindcss": "~3" + } + }, + "node_modules/nativewind/node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/nativewind/node_modules/@babel/types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/nativewind/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==" + }, "node_modules/ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", @@ -11758,6 +12281,15 @@ "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/npm-package-arg": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", @@ -11794,9 +12326,9 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, "node_modules/ob1": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.4.tgz", - "integrity": "sha512-Lku8OBpq+fhF1ZdKUjbPnTNeqG+3OL0psGAEVJ8zcUiCB5/DPGR/rm3kLcjKDylzC9Rfv540/7I08+oImzfrhw==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.8.tgz", + "integrity": "sha512-QHJQk/lXMmAW8I7AIM3in1MSlwe1umR72Chhi8B7Xnq6mzjhBKkA6Fy/zAhQnGkA4S912EPCEvTij5yh+EQTAA==", "engines": { "node": ">=18" } @@ -11809,6 +12341,14 @@ "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==", + "engines": { + "node": ">= 6" + } + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -12099,11 +12639,11 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -12229,10 +12769,18 @@ "node": ">=4.0.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", "funding": [ { "type": "opencollective", @@ -12248,12 +12796,164 @@ } ], "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-css-variables": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/postcss-css-variables/-/postcss-css-variables-0.18.0.tgz", + "integrity": "sha512-lYS802gHbzn1GI+lXvy9MYIYDuGnl1WB4FTKoqMQqJ3Mab09A7a/1wZvGTkCEZJTM8mSbIyb1mJYn8f0aPye0Q==", + "dependencies": { + "balanced-match": "^1.0.0", + "escape-string-regexp": "^1.0.3", + "extend": "^3.0.1" + }, + "peerDependencies": { + "postcss": "^8.2.6" + } + }, + "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==", + "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-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "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.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dependencies": { + "postcss-selector-parser": "^6.0.6" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, "node_modules/postcss-value-parser": { @@ -12362,6 +13062,11 @@ "node": ">=8" } }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, "node_modules/pretty-format/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12421,11 +13126,6 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types/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==" - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -12585,9 +13285,9 @@ "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, "node_modules/react-freeze": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.3.tgz", - "integrity": "sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz", + "integrity": "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==", "engines": { "node": ">=10" }, @@ -12612,9 +13312,9 @@ } }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native": { "version": "0.73.2", @@ -12715,6 +13415,34 @@ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, + "node_modules/react-native/node_modules/@react-native/codegen": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.2.tgz", + "integrity": "sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==", + "dependencies": { + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/react-native/node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/react-native/node_modules/promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", @@ -12764,6 +13492,22 @@ "react": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, + "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==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -12778,6 +13522,28 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/readline": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", @@ -13027,18 +13793,17 @@ } }, "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "peer": true, + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", @@ -13167,15 +13932,16 @@ "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" }, "node_modules/set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -13316,9 +14082,9 @@ } }, "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==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -13681,6 +14447,72 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tailwindcss": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", + "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", + "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.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "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", + "postcss-value-parser": "^4.2.0", + "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/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==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/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==", + "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/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -13692,9 +14524,9 @@ } }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -13817,9 +14649,9 @@ } }, "node_modules/terser": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", - "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz", + "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -13868,6 +14700,33 @@ } } }, + "node_modules/terser-webpack-plugin/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, + "peer": 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/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/terser-webpack-plugin/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -13893,6 +14752,32 @@ "node": ">= 10.13.0" } }, + "node_modules/terser-webpack-plugin/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, + "peer": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -14214,6 +15099,14 @@ "react": ">=16.8" } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -14318,9 +15211,9 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", - "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "engines": { "node": ">= 8" } @@ -14331,35 +15224,35 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", - "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -14388,6 +15281,73 @@ "node": ">=10.13.0" } }, + "node_modules/webpack/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, + "peer": 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/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/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, + "peer": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/whatwg-fetch": { "version": "3.6.20", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", @@ -14440,15 +15400,15 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "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==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -14624,9 +15584,12 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } From 8aee5766adc447850379f596dc84e961943304c3 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 5 Apr 2024 11:30:56 +0200 Subject: [PATCH 002/126] fix: Add TextLink to provide styles for Next Link --- features/app-core/components/Typography.tsx | 7 ----- features/app-core/components/styled.tsx | 30 +++++++++++++++++++++ features/app-core/navigation/Link.types.ts | 3 +++ 3 files changed, 33 insertions(+), 7 deletions(-) delete mode 100644 features/app-core/components/Typography.tsx create mode 100644 features/app-core/components/styled.tsx diff --git a/features/app-core/components/Typography.tsx b/features/app-core/components/Typography.tsx deleted file mode 100644 index 23339fc..0000000 --- a/features/app-core/components/Typography.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { styled } from 'nativewind' -import { Text } from 'react-native' - -export const H1 = styled(Text, 'font-bold text-2xl') -export const H2 = styled(Text, 'font-bold text-xl') -export const H3 = styled(Text, 'font-bold text-lg') -export const P = styled(Text, 'text-base') diff --git a/features/app-core/components/styled.tsx b/features/app-core/components/styled.tsx new file mode 100644 index 0000000..5c74837 --- /dev/null +++ b/features/app-core/components/styled.tsx @@ -0,0 +1,30 @@ +import { styled } from 'nativewind' +import { Text as RNText, View as RNView } from 'react-native' +import { Link as UniversalLink } from './Link' + +/* --- Primitives ------------------------------------------------------------------------------ */ + +export const View = styled(RNView, '') +export const Text = styled(RNText, '') + +/* --- Typography ------------------------------------------------------------------------------ */ + +export const H1 = styled(RNText, 'font-bold text-2xl') +export const H2 = styled(RNText, 'font-bold text-xl') +export const H3 = styled(RNText, 'font-bold text-lg') + +export const P = styled(RNText, 'text-base') + +/* --- Fix for Next Link ----------------------------------------------------------------------- */ + +export const LinkText = styled(RNText, 'text-blue-500 underline') +export const TextLink = (props: Omit, 'className'> & { className?: string }) => { + const { className, style, children, ...universalLinkProps } = props + return ( + + + {children} + + + ) +} diff --git a/features/app-core/navigation/Link.types.ts b/features/app-core/navigation/Link.types.ts index f0fbd3a..7af0c6e 100644 --- a/features/app-core/navigation/Link.types.ts +++ b/features/app-core/navigation/Link.types.ts @@ -13,6 +13,9 @@ export type UniversalLinkProps = { /** Universal - Style prop: https://reactnative.dev/docs/text#style */ style?: ExpoLinkProps['style']; + /** -!- Nativewind classNames should be applied to either the parent or children of Link. Ideally, create or use a TextLink component instead */ + className?: never; + /** Universal - Should replace the current route without adding to the history - Default: false. */ replace?: boolean; From 7fed591e2c6ace37d8ff1719983f1520a0953da9 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 5 Apr 2024 11:31:31 +0200 Subject: [PATCH 003/126] chore: Rewrite HomeScreen & SlugScreen to use Nativewind classNames --- apps/expo/app/ExpoRootLayout.tsx | 2 + features/app-core/screens/HomeScreen.tsx | 42 +++------------- features/app-core/screens/SlugScreen.tsx | 63 +++++++----------------- 3 files changed, 27 insertions(+), 80 deletions(-) diff --git a/apps/expo/app/ExpoRootLayout.tsx b/apps/expo/app/ExpoRootLayout.tsx index b8bd9f5..e0f79d6 100644 --- a/apps/expo/app/ExpoRootLayout.tsx +++ b/apps/expo/app/ExpoRootLayout.tsx @@ -7,6 +7,8 @@ import UniversalRootLayout from '@app/core/screens/UniversalRootLayout' // -i- Use this file to apply your Expo specific layout setup: // -i- like rendering our Universal Layout and App Providers +/* --- ------------------------------------------------------------------------ */ + export default function ExpoRootLayout() { return ( diff --git a/features/app-core/screens/HomeScreen.tsx b/features/app-core/screens/HomeScreen.tsx index 23a036e..c07743e 100644 --- a/features/app-core/screens/HomeScreen.tsx +++ b/features/app-core/screens/HomeScreen.tsx @@ -1,51 +1,23 @@ import React from 'react' -import { StyleSheet, Text, View } from 'react-native' -import { Link } from '../navigation/Link' import { Image } from '../components/Image' -import { H3, P } from '../components/Typography' +import { View, H3, P, TextLink } from '../components/styled' /* --- --------------------------------------------------------------------------- */ const HomeScreen = () => { return ( - + -

Expo + Next.js app routing 🚀

-

Open HomeScreen.tsx in features/app-core/screens to start working on your app

- Test navigation - Test images +

Expo + Next.js app routing 👋

+

Open HomeScreen.tsx in features/app-core/screens to start working on your app

+ + Test navigation + Docs
) } -/* --- Styles ---------------------------------------------------------------------------------- */ - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - title: { - fontWeight: 'bold', - fontSize: 16, - textAlign: 'center', - }, - subtitle: { - marginTop: 8, - fontSize: 16, - textAlign: 'center', - }, - link: { - marginTop: 16, - fontSize: 16, - color: 'blue', - textAlign: 'center', - textDecorationLine: 'underline', - }, -}) - /* --- Exports --------------------------------------------------------------------------------- */ export default HomeScreen diff --git a/features/app-core/screens/SlugScreen.tsx b/features/app-core/screens/SlugScreen.tsx index c0184ec..e72b264 100644 --- a/features/app-core/screens/SlugScreen.tsx +++ b/features/app-core/screens/SlugScreen.tsx @@ -1,7 +1,6 @@ import React from 'react' -import { StyleSheet, Text, View } from 'react-native' -import { useRouteParams } from '../navigation/useRouteParams' -import { Link } from '../navigation/Link' +import { useRouteParams } from '@app/core/navigation/useRouteParams' +import { View, Text, H3, TextLink } from '../components/styled' import { useRouter } from '../navigation/useRouter' /* --- --------------------------------------------------------------------------- */ @@ -17,71 +16,45 @@ const SlugScreen = (props) => { // -- Render -- return ( - + {showBackButton && ( {`< Back`} )} - +

Page slug: {slug} {!!count && ` | count: ${count}`} +

+ + Need a more robust, Fully-Stacked, Full-Product, Universal App Setup? - Need a more robust, Fully-Stacked, Full-Product, Universal App Setup? - + Check out the GREEN Stack Starter - - push('/subpages/push')}> + + push('/subpages/push')}> {`router.push()`} - navigate('/subpages/navigate')}> + navigate('/subpages/navigate')}> {`router.navigate()`} - replace('/subpages/replace')}> + replace('/subpages/replace')}> {`router.replace()`} - setParams({ count: `${+count + 1}` })}> + setParams({ count: `${+count + 1}` })}> {`router.setParams()`}
) } -/* --- Styles ---------------------------------------------------------------------------------- */ - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - backButton: { - position: 'absolute', - top: 16, - left: 16, - }, - title: { - fontWeight: 'bold', - fontSize: 16, - textAlign: 'center', - }, - subtitle: { - marginTop: 8, - fontSize: 16, - textAlign: 'center', - }, - link: { - marginTop: 16, - fontSize: 16, - color: 'blue', - textAlign: 'center', - textDecorationLine: 'underline', - }, -}) - /* --- Exports --------------------------------------------------------------------------------- */ export default SlugScreen From ca782e95236dc114e397dcfd72f7cd742a4a45cb Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 5 Apr 2024 17:14:49 +0200 Subject: [PATCH 004/126] chore: Add custom primary color in tailwind.theme.js --- apps/expo/app/ExpoRootLayout.tsx | 7 +++++++ apps/expo/tailwind.config.js | 8 ++++---- apps/next/tailwind.config.js | 6 +++--- features/app-core/components/styled.tsx | 8 ++++---- features/app-core/tailwind.config.js | 4 +++- features/app-core/tailwind.theme.js | 18 +++++------------- 6 files changed, 26 insertions(+), 25 deletions(-) diff --git a/apps/expo/app/ExpoRootLayout.tsx b/apps/expo/app/ExpoRootLayout.tsx index e0f79d6..42a23fc 100644 --- a/apps/expo/app/ExpoRootLayout.tsx +++ b/apps/expo/app/ExpoRootLayout.tsx @@ -1,12 +1,19 @@ import { Stack } from 'expo-router' import UniversalAppProviders from '@app/core/screens/UniversalAppProviders' import UniversalRootLayout from '@app/core/screens/UniversalRootLayout' +import { NativeWindStyleSheet } from 'nativewind' // -i- Expo Router's layout setup is much simpler than Next.js's layout setup // -i- Since Expo doesn't require a custom document setup or server component root layout // -i- Use this file to apply your Expo specific layout setup: // -i- like rendering our Universal Layout and App Providers +/* --- Settings -------------------------------------------------------------------------------- */ + +NativeWindStyleSheet.setOutput({ + default: 'native', +}) + /* --- ------------------------------------------------------------------------ */ export default function ExpoRootLayout() { diff --git a/apps/expo/tailwind.config.js b/apps/expo/tailwind.config.js index f3640ac..b0e0700 100644 --- a/apps/expo/tailwind.config.js +++ b/apps/expo/tailwind.config.js @@ -3,12 +3,12 @@ const { universalTheme } = require('@app/core/tailwind.theme') /** @type {import('tailwindcss').Config} */ module.exports = { content: [ - './app/**/*.{js,jsx,ts,tsx}', - '../../features/**/*.{js,jsx,ts,tsx}', - '../../packages/**/*.{js,jsx,ts,tsx}', + '../../apps/**/*.tsx', + '../../features/**/*.tsx', + '../../packages/**/*.tsx', ], plugins: [], theme: { - //...universalTheme, + ...universalTheme, }, } diff --git a/apps/next/tailwind.config.js b/apps/next/tailwind.config.js index e77a1bc..434c6cd 100644 --- a/apps/next/tailwind.config.js +++ b/apps/next/tailwind.config.js @@ -3,9 +3,9 @@ const { universalTheme } = require('@app/core/tailwind.theme') /** @type {import('tailwindcss').Config} */ module.exports = { content: [ - './app/**/*.{js,jsx,ts,tsx}', - '../../features/**/*.{js,jsx,ts,tsx}', - '../../packages/**/*.{js,jsx,ts,tsx}', + '../../apps/**/*.tsx', + '../../features/**/*.tsx', + '../../packages/**/*.tsx', ], plugins: [require('nativewind/tailwind/css')], important: 'html', diff --git a/features/app-core/components/styled.tsx b/features/app-core/components/styled.tsx index 5c74837..eb9b30e 100644 --- a/features/app-core/components/styled.tsx +++ b/features/app-core/components/styled.tsx @@ -1,6 +1,6 @@ import { styled } from 'nativewind' import { Text as RNText, View as RNView } from 'react-native' -import { Link as UniversalLink } from './Link' +import { Link as UniversalLink } from '../navigation/Link' /* --- Primitives ------------------------------------------------------------------------------ */ @@ -9,9 +9,9 @@ export const Text = styled(RNText, '') /* --- Typography ------------------------------------------------------------------------------ */ -export const H1 = styled(RNText, 'font-bold text-2xl') -export const H2 = styled(RNText, 'font-bold text-xl') -export const H3 = styled(RNText, 'font-bold text-lg') +export const H1 = styled(RNText, 'font-bold text-2xl text-primary-500') +export const H2 = styled(RNText, 'font-bold text-xl text-primary-500') +export const H3 = styled(RNText, 'font-bold text-lg text-primary-500') export const P = styled(RNText, 'text-base') diff --git a/features/app-core/tailwind.config.js b/features/app-core/tailwind.config.js index 44a139c..03a600b 100644 --- a/features/app-core/tailwind.config.js +++ b/features/app-core/tailwind.config.js @@ -3,7 +3,9 @@ const { universalTheme } = require('./tailwind.theme') /** @type {import('tailwindcss').Config} */ module.exports = { content: [ - './**/*.{js,jsx,ts,tsx}', + '../../apps/**/*.tsx', + '../../features/**/*.tsx', + '../../packages/**/*.tsx', ], plugins: [], theme: { diff --git a/features/app-core/tailwind.theme.js b/features/app-core/tailwind.theme.js index ddcd558..fdb93f5 100644 --- a/features/app-core/tailwind.theme.js +++ b/features/app-core/tailwind.theme.js @@ -1,21 +1,13 @@ +const colors = require('tailwindcss/colors') + /** @type {import('tailwindcss').Config['theme']} */ const universalTheme = { // -i- Extend default tailwind theme here // -i- Reference this theme in the tailwind.config.js files in apps/expo, apps/next, features/app-core and other package or feature folders extend: { - // colors: { - // primary: { - // 100: '#FFA8E2', - // 200: '#FF8CD4', - // 300: '#FF70C6', - // 400: '#FF54B8', - // 500: '#FF38AA', - // 600: '#FF1C9C', - // 700: '#FF0090', - // 800: '#E60082', - // 900: '#CC0074', - // }, - // } + colors: { + primary: colors.green, + }, } } From 9efca2f7933673caa5f42f5a013732114d3fae46 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Tue, 9 Apr 2024 00:21:53 +0200 Subject: [PATCH 005/126] feat: Parse NativeWind styles in custom Image & Link --- features/app-core/components/Image.tsx | 8 +++- features/app-core/components/Image.types.tsx | 4 ++ features/app-core/components/Image.web.tsx | 12 +++-- features/app-core/components/styled.tsx | 3 ++ features/app-core/navigation/Link.tsx | 8 +++- features/app-core/navigation/Link.types.ts | 2 +- features/app-core/navigation/Link.web.tsx | 10 +++- features/app-core/screens/HomeScreen.tsx | 18 ++++--- features/app-core/screens/ImagesScreen.tsx | 48 ++++--------------- features/app-core/screens/SlugScreen.tsx | 6 +-- .../app-core/utils/parseNativeWindStyles.ts | 31 ++++++++++++ 11 files changed, 93 insertions(+), 57 deletions(-) create mode 100644 features/app-core/utils/parseNativeWindStyles.ts diff --git a/features/app-core/components/Image.tsx b/features/app-core/components/Image.tsx index 162ab80..49dc3cc 100644 --- a/features/app-core/components/Image.tsx +++ b/features/app-core/components/Image.tsx @@ -1,5 +1,6 @@ import { Image as ExpoImage } from 'expo-image' import { UniversalImageProps, UniversalImageMethods } from './Image.types' +import { parseNativeWindStyles } from '../utils/parseNativeWindStyles' /* --- -------------------------------------------------------------------------------- */ @@ -38,10 +39,13 @@ const Image = (props: UniversalImageProps): JSX.Element => { responsivePolicy, } = props + // -- Nativewind -- + + const { nativeWindStyles, restStyle } = parseNativeWindStyles(style) + const finalStyle = { width, height, ...nativeWindStyles, ...restStyle } + // -- Overrides -- - // @ts-ignore - const finalStyle = { width, height, ...style } if (fill) finalStyle.height = '100%' if (fill) finalStyle.width = '100%' diff --git a/features/app-core/components/Image.types.tsx b/features/app-core/components/Image.types.tsx index e4a3ce6..8768eed 100644 --- a/features/app-core/components/Image.types.tsx +++ b/features/app-core/components/Image.types.tsx @@ -38,6 +38,10 @@ export type UniversalImageProps = { * - Remember that the required width and height props can interact with your styling. If you use styling to modify an image's width, you should also style its height to auto to preserve its intrinsic aspect ratio, or your image will be distorted. */ style?: ExpoImageProps['style'] + /** Universal, will affect both Expo & Next.js + * - Remember that the required width and height props can interact with your styling. If you use styling to modify an image's width, you should also style its height to auto to preserve its intrinsic aspect ratio, or your image will be distorted. */ + className?: string + /** Universal, will affect both Expo & Next.js - Called on an image fetching error. */ onError?: ExpoImageProps['onError'] diff --git a/features/app-core/components/Image.web.tsx b/features/app-core/components/Image.web.tsx index f37b907..6bcc6ee 100644 --- a/features/app-core/components/Image.web.tsx +++ b/features/app-core/components/Image.web.tsx @@ -1,5 +1,6 @@ import NextImage from 'next/image' import { UniversalImageProps, UniversalImageMethods } from './Image.types' +import { parseNativeWindStyles } from '../utils/parseNativeWindStyles' /* --- -------------------------------------------------------------------------------- */ @@ -11,6 +12,7 @@ const Image = (props: UniversalImageProps): JSX.Element => { alt, width, height, + className, style = {}, priority = 'normal', onError, @@ -31,10 +33,13 @@ const Image = (props: UniversalImageProps): JSX.Element => { contentFit, } = props + // -- Nativewind -- + + const { nativeWindStyles, nativeWindClassName, restStyle } = parseNativeWindStyles(style) + const finalStyle = { width, height, ...nativeWindStyles, ...restStyle } as React.CSSProperties + // -- Overrides -- - // @ts-ignore - const finalStyle = { width, height, ...style } if (fill) finalStyle.height = '100%' if (fill) finalStyle.width = '100%' if (fill) finalStyle.objectFit = contentFit || 'cover' @@ -47,7 +52,8 @@ const Image = (props: UniversalImageProps): JSX.Element => { src={src as any} alt={alt || accessibilityLabel} width={width} - height={height} // @ts-ignore + height={height} + className={[className, nativeWindClassName].filter(Boolean).join(' ')} style={finalStyle} priority={priority === 'high'} onError={onError as any} diff --git a/features/app-core/components/styled.tsx b/features/app-core/components/styled.tsx index eb9b30e..4a503f1 100644 --- a/features/app-core/components/styled.tsx +++ b/features/app-core/components/styled.tsx @@ -1,11 +1,13 @@ import { styled } from 'nativewind' import { Text as RNText, View as RNView } from 'react-native' import { Link as UniversalLink } from '../navigation/Link' +import { Image as UniversalImage } from './Image' /* --- Primitives ------------------------------------------------------------------------------ */ export const View = styled(RNView, '') export const Text = styled(RNText, '') +export const Image = styled(UniversalImage, '') /* --- Typography ------------------------------------------------------------------------------ */ @@ -17,6 +19,7 @@ export const P = styled(RNText, 'text-base') /* --- Fix for Next Link ----------------------------------------------------------------------- */ +export const Link = styled(UniversalLink, 'text-blue-500 underline') export const LinkText = styled(RNText, 'text-blue-500 underline') export const TextLink = (props: Omit, 'className'> & { className?: string }) => { const { className, style, children, ...universalLinkProps } = props diff --git a/features/app-core/navigation/Link.tsx b/features/app-core/navigation/Link.tsx index 6f36026..6efc365 100644 --- a/features/app-core/navigation/Link.tsx +++ b/features/app-core/navigation/Link.tsx @@ -1,5 +1,6 @@ import { Link as ExpoLink } from 'expo-router' import type { UniversalLinkProps } from './Link.types' +import { parseNativeWindStyles } from '../utils/parseNativeWindStyles' /* --- --------------------------------------------------------------------------------- */ @@ -21,12 +22,17 @@ export const Link = (props: UniversalLinkProps) => { maxFontSizeMultiplier } = props + // -- Nativewind -- + + const { nativeWindStyles, restStyle } = parseNativeWindStyles(style) + const finalStyle = { ...nativeWindStyles, ...restStyle } + // -- Render -- return ( --------------------------------------------------------------------------------- */ @@ -9,6 +10,7 @@ export const Link = (props: UniversalLinkProps) => { const { children, href, + className, style, replace, onPress, @@ -21,12 +23,18 @@ export const Link = (props: UniversalLinkProps) => { as, } = props + // -- Nativewind -- + + const { nativeWindStyles, nativeWindClassName, restStyle } = parseNativeWindStyles(style) + const finalStyle = { ...nativeWindStyles, ...restStyle } as React.CSSProperties + // -- Render -- return ( ['style']} + className={[className, nativeWindClassName].filter(Boolean).join(' ')} + style={finalStyle as unknown as ComponentProps['style']} onClick={onPress} target={target} replace={replace} diff --git a/features/app-core/screens/HomeScreen.tsx b/features/app-core/screens/HomeScreen.tsx index c07743e..fa73032 100644 --- a/features/app-core/screens/HomeScreen.tsx +++ b/features/app-core/screens/HomeScreen.tsx @@ -1,19 +1,23 @@ import React from 'react' -import { Image } from '../components/Image' -import { View, H3, P, TextLink } from '../components/styled' +import { View, Image, H3, P, Link } from '../components/styled' /* --- --------------------------------------------------------------------------- */ const HomeScreen = () => { return ( - -

Expo + Next.js app routing 👋

+ +

Expo + Next.js app routing 🚀

Open HomeScreen.tsx in features/app-core/screens to start working on your app

- + Test navigation - - Docs + + + Test images + + + Docs +
) } diff --git a/features/app-core/screens/ImagesScreen.tsx b/features/app-core/screens/ImagesScreen.tsx index 81bd68e..06a1e6e 100644 --- a/features/app-core/screens/ImagesScreen.tsx +++ b/features/app-core/screens/ImagesScreen.tsx @@ -1,67 +1,37 @@ import React from 'react' -import { StyleSheet, Text, View } from 'react-native' -import { Link } from '../navigation/Link' -import { Image } from '../components/Image' +import { View, Text, Image, Link } from '../components/styled' /* --- --------------------------------------------------------------------------- */ const ImagesScreen = () => { return ( - + {`< Back`} {/* - 1 - */} - src=static-require | width: 60 | height: 60 + src=static-require | width: 60 | height: 60 {/* - 2 - */} - src=external-url | width: 60 | height: 60 + src=external-url | width: 60 | height: 60 {/* - 3 - */} - + - wrapper=50x80, relative | fill=true + wrapper=50x80, relative | fill=true {/* - 4 - */} - + - wrapper=80x60, relative | fill | contentFit=contain + wrapper=80x60, relative | fill | contentFit=contain ) } -/* --- Styles ---------------------------------------------------------------------------------- */ - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - backButton: { - position: 'absolute', - top: 16, - left: 16, - }, - subtitle: { - marginTop: 8, - marginBottom: 16, - fontSize: 16, - textAlign: 'center', - }, - link: { - marginTop: 16, - fontSize: 16, - color: 'blue', - textAlign: 'center', - textDecorationLine: 'underline', - }, -}) - /* --- Exports --------------------------------------------------------------------------------- */ export default ImagesScreen diff --git a/features/app-core/screens/SlugScreen.tsx b/features/app-core/screens/SlugScreen.tsx index e72b264..2924afb 100644 --- a/features/app-core/screens/SlugScreen.tsx +++ b/features/app-core/screens/SlugScreen.tsx @@ -1,6 +1,6 @@ import React from 'react' import { useRouteParams } from '@app/core/navigation/useRouteParams' -import { View, Text, H3, TextLink } from '../components/styled' +import { View, Text, H3, Link } from '../components/styled' import { useRouter } from '../navigation/useRouter' /* --- --------------------------------------------------------------------------- */ @@ -32,13 +32,13 @@ const SlugScreen = (props) => { Need a more robust, Fully-Stacked, Full-Product, Universal App Setup? - Check out the GREEN Stack Starter - + push('/subpages/push')}> {`router.push()`} diff --git a/features/app-core/utils/parseNativeWindStyles.ts b/features/app-core/utils/parseNativeWindStyles.ts new file mode 100644 index 0000000..afa1855 --- /dev/null +++ b/features/app-core/utils/parseNativeWindStyles.ts @@ -0,0 +1,31 @@ + +/** --- parseNativeWindStyles() ---------------------------------------------------------------- */ +/** -i- Util to extract Nativewind's style and/or className from a styled() components style prop */ +export const parseNativeWindStyles = (style: any) => { + return Object.entries(style || {}).reduce( + (acc, [key, value]) => { + // If the key is unsupported, ignore it + if (['mask', 'childClassNames'].includes(key)) return acc + // If the key is a number, it's a Nativewind style + if (Number.isInteger(Number(key))) { + const isCSS = !!(value as Record)['$$css'] + if (isCSS) { + // If it's a CSS object, add as a Nativewind className + const { '$$css': _, ...classNameObjects } = value as Record + const className = [acc.nativeWindClassName, ...Object.values(classNameObjects)].filter(Boolean).join(' ') // prettier-ignore + return { ...acc, nativeWindClassName: className } + } else if (Array.isArray(value)) { + // If it's an array, we should merge the arrays + const flattenedStyles = value.reduce((acc, val) => ({ ...acc, ...val }), {}) + return { ...acc, nativeWindStyles: { ...acc.nativeWindStyles, ...flattenedStyles } } // prettier-ignore + } else { + // If it's a React-Native style object, check if we should merge arrays or objects + return { ...acc, nativeWindStyles: { ...acc.nativeWindStyles, ...(value as Record) } } // prettier-ignore + } + } + // If the key is a string, it's a regular style + return { ...acc, restStyle: { ...acc.restStyle, [key]: value } } + }, + { nativeWindStyles: {}, nativeWindClassName: '', restStyle: {} } + ) +} From 8c19f650720e3c8c2629d158adca2aae0b92ab4b Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 5 Apr 2024 23:24:40 +0200 Subject: [PATCH 006/126] feat: Implement React portability patterns --- apps/expo/app/ExpoRootLayout.tsx | 16 ++++++- apps/next/app/NextClientRootLayout.tsx | 24 +++++++--- features/app-core/context/CoreContext.ts | 26 +++++++++++ features/app-core/navigation/Link.expo.tsx | 45 +++++++++++++++++++ .../{Link.web.tsx => Link.next.tsx} | 0 features/app-core/navigation/Link.tsx | 43 +++--------------- .../navigation/useRouteParams.expo.ts | 14 ++++++ ...teParams.web.ts => useRouteParams.next.ts} | 5 ++- .../app-core/navigation/useRouteParams.ts | 18 +++----- .../app-core/navigation/useRouter.expo.ts | 15 +++++++ .../{useRouter.web.ts => useRouter.next.ts} | 0 features/app-core/navigation/useRouter.ts | 17 +++---- .../screens/UniversalAppProviders.tsx | 24 +++++++--- 13 files changed, 174 insertions(+), 73 deletions(-) create mode 100644 features/app-core/context/CoreContext.ts create mode 100644 features/app-core/navigation/Link.expo.tsx rename features/app-core/navigation/{Link.web.tsx => Link.next.tsx} (100%) create mode 100644 features/app-core/navigation/useRouteParams.expo.ts rename features/app-core/navigation/{useRouteParams.web.ts => useRouteParams.next.ts} (66%) create mode 100644 features/app-core/navigation/useRouter.expo.ts rename features/app-core/navigation/{useRouter.web.ts => useRouter.next.ts} (100%) diff --git a/apps/expo/app/ExpoRootLayout.tsx b/apps/expo/app/ExpoRootLayout.tsx index b8bd9f5..b841355 100644 --- a/apps/expo/app/ExpoRootLayout.tsx +++ b/apps/expo/app/ExpoRootLayout.tsx @@ -1,15 +1,29 @@ import { Stack } from 'expo-router' import UniversalAppProviders from '@app/core/screens/UniversalAppProviders' import UniversalRootLayout from '@app/core/screens/UniversalRootLayout' +import { Link as ExpoContextLink } from '@app/core/navigation/Link.expo' +import { useRouter as useExpoContextRouter } from '@app/core/navigation/useRouter.expo' +import { useRouteParams as useExpoRouteParams } from '@app/core/navigation/useRouteParams.expo' // -i- Expo Router's layout setup is much simpler than Next.js's layout setup // -i- Since Expo doesn't require a custom document setup or server component root layout // -i- Use this file to apply your Expo specific layout setup: // -i- like rendering our Universal Layout and App Providers +/* --- ----------------------------------------------------------------------- */ + export default function ExpoRootLayout() { + // Navigation + const expoContextRouter = useExpoContextRouter() + + // -- Render -- + return ( - + ---------------------------------------------------------------- */ -const NextClientRootLayout = ({ children }: NextClientRootLayoutProps) => ( - - {children} - -) +const NextClientRootLayout = ({ children }: NextClientRootLayoutProps) => { + // Navigation + const nextContextRouter = useNextContextRouter() + + // -- Render -- + + return ( + + {children} + + ) +} /* --- Exports --------------------------------------------------------------------------------- */ diff --git a/features/app-core/context/CoreContext.ts b/features/app-core/context/CoreContext.ts new file mode 100644 index 0000000..e090c98 --- /dev/null +++ b/features/app-core/context/CoreContext.ts @@ -0,0 +1,26 @@ +import React from 'react' +import { UniversalLinkProps } from '../navigation/Link.types' +import { UniversalRouterMethods } from '../navigation/useRouter.types' +import { UniversalRouteScreenProps } from '../navigation/useRouteParams.types' +import type { useLocalSearchParams } from 'expo-router' + +// -i- This context's only aim is to provide React Portability & Framework Ejection patterns if required +// -i- By allowing you to provide your own custom Link and Router overrides, you could e.g.: +// -i- 1) Support Expo for Web by not defaulting to Next.js's Link and Router on web +// -i- 2) Eject from Next.js entirely and e.g. use another framework's Link component and Router + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type CoreContextType = { + contextLink: (props: UniversalLinkProps) => JSX.Element + contextRouter: UniversalRouterMethods + useContextRouteParams: (routeScreenProps: UniversalRouteScreenProps) => ReturnType +} + +/* --- Context --------------------------------------------------------------------------------- */ + +export const CoreContext = React.createContext({ + contextLink: null, + contextRouter: null, + useContextRouteParams: () => ({}), +}) diff --git a/features/app-core/navigation/Link.expo.tsx b/features/app-core/navigation/Link.expo.tsx new file mode 100644 index 0000000..6f36026 --- /dev/null +++ b/features/app-core/navigation/Link.expo.tsx @@ -0,0 +1,45 @@ +import { Link as ExpoLink } from 'expo-router' +import type { UniversalLinkProps } from './Link.types' + +/* --- --------------------------------------------------------------------------------- */ + +export const Link = (props: UniversalLinkProps) => { + // Props + const { + children, + href, + style, + replace, + onPress, + target, + asChild, + push, + testID, + nativeID, + allowFontScaling, + numberOfLines, + maxFontSizeMultiplier + } = props + + // -- Render -- + + return ( + + {children} + + ) +} + diff --git a/features/app-core/navigation/Link.web.tsx b/features/app-core/navigation/Link.next.tsx similarity index 100% rename from features/app-core/navigation/Link.web.tsx rename to features/app-core/navigation/Link.next.tsx diff --git a/features/app-core/navigation/Link.tsx b/features/app-core/navigation/Link.tsx index 6f36026..271d490 100644 --- a/features/app-core/navigation/Link.tsx +++ b/features/app-core/navigation/Link.tsx @@ -1,45 +1,14 @@ -import { Link as ExpoLink } from 'expo-router' +import React from 'react' import type { UniversalLinkProps } from './Link.types' +import { CoreContext } from '../context/CoreContext' /* --- --------------------------------------------------------------------------------- */ export const Link = (props: UniversalLinkProps) => { - // Props - const { - children, - href, - style, - replace, - onPress, - target, - asChild, - push, - testID, - nativeID, - allowFontScaling, - numberOfLines, - maxFontSizeMultiplier - } = props + // Context + const { contextLink: ContextLink } = React.useContext(CoreContext) - // -- Render -- - - return ( - - {children} - - ) + // Render + return } diff --git a/features/app-core/navigation/useRouteParams.expo.ts b/features/app-core/navigation/useRouteParams.expo.ts new file mode 100644 index 0000000..e7d4374 --- /dev/null +++ b/features/app-core/navigation/useRouteParams.expo.ts @@ -0,0 +1,14 @@ +import { useLocalSearchParams } from 'expo-router' +import type { UniversalRouteScreenProps } from './useRouteParams.types' + +/** --- useRouteParams() ----------------------------------------------------------------------- */ +/** -i- Gets the route search and query params on both web and mobile */ +export const useRouteParams = (routeScreenProps: UniversalRouteScreenProps) => { + const { params, searchParams } = routeScreenProps + const expoRouterParams = useLocalSearchParams() + return { + ...params, + ...searchParams, + ...expoRouterParams, + } as typeof expoRouterParams +} diff --git a/features/app-core/navigation/useRouteParams.web.ts b/features/app-core/navigation/useRouteParams.next.ts similarity index 66% rename from features/app-core/navigation/useRouteParams.web.ts rename to features/app-core/navigation/useRouteParams.next.ts index 7f7fdc8..043041c 100644 --- a/features/app-core/navigation/useRouteParams.web.ts +++ b/features/app-core/navigation/useRouteParams.next.ts @@ -1,8 +1,9 @@ import type { UniversalRouteScreenProps } from './useRouteParams.types' +import type { useLocalSearchParams } from 'expo-router' -/** --- useRouteParams() -------------------------------------------------------------- */ +/** --- useRouteParams() ----------------------------------------------------------------------- */ /** -i- Gets the route search and query params on both web and mobile */ export const useRouteParams = (routeScreenProps: UniversalRouteScreenProps) => { const { params, searchParams } = routeScreenProps - return { ...params, ...searchParams } + return { ...params, ...searchParams } as ReturnType } diff --git a/features/app-core/navigation/useRouteParams.ts b/features/app-core/navigation/useRouteParams.ts index e3a1420..0acc3c2 100644 --- a/features/app-core/navigation/useRouteParams.ts +++ b/features/app-core/navigation/useRouteParams.ts @@ -1,14 +1,10 @@ -import { useLocalSearchParams } from 'expo-router' -import type { UniversalRouteScreenProps } from './useRouteParams.types' +import { useContext } from 'react' +import { CoreContext } from '../context/CoreContext' +import { UniversalRouteScreenProps } from './useRouteParams.types' + +/* --- useRouteParams() ------------------------------------------------------------------------ */ -/** --- useRouteParams() -------------------------------------------------------------- */ -/** -i- Gets the route search and query params on both web and mobile */ export const useRouteParams = (routeScreenProps: UniversalRouteScreenProps) => { - const { params, searchParams } = routeScreenProps - const expoRouterParams = useLocalSearchParams() - return { - ...params, - ...searchParams, - ...expoRouterParams, - } as typeof expoRouterParams + const { useContextRouteParams } = useContext(CoreContext) + return useContextRouteParams(routeScreenProps) } diff --git a/features/app-core/navigation/useRouter.expo.ts b/features/app-core/navigation/useRouter.expo.ts new file mode 100644 index 0000000..320a990 --- /dev/null +++ b/features/app-core/navigation/useRouter.expo.ts @@ -0,0 +1,15 @@ +import { router } from 'expo-router' +import { UniversalRouterMethods } from './useRouter.types' + +/* --- useRouter() ----------------------------------------------------------------------------- */ + +export const useRouter = () => { + return { + push: router.push, + navigate: router.navigate, + replace: router.replace, + back: router.back, + canGoBack: router.canGoBack, + setParams: router.setParams, + } as UniversalRouterMethods +} diff --git a/features/app-core/navigation/useRouter.web.ts b/features/app-core/navigation/useRouter.next.ts similarity index 100% rename from features/app-core/navigation/useRouter.web.ts rename to features/app-core/navigation/useRouter.next.ts diff --git a/features/app-core/navigation/useRouter.ts b/features/app-core/navigation/useRouter.ts index 320a990..e981594 100644 --- a/features/app-core/navigation/useRouter.ts +++ b/features/app-core/navigation/useRouter.ts @@ -1,15 +1,12 @@ -import { router } from 'expo-router' -import { UniversalRouterMethods } from './useRouter.types' +import { useContext } from 'react' +import { CoreContext } from '../context/CoreContext' /* --- useRouter() ----------------------------------------------------------------------------- */ export const useRouter = () => { - return { - push: router.push, - navigate: router.navigate, - replace: router.replace, - back: router.back, - canGoBack: router.canGoBack, - setParams: router.setParams, - } as UniversalRouterMethods + // Context + const { contextRouter } = useContext(CoreContext) + + // Return + return contextRouter } diff --git a/features/app-core/screens/UniversalAppProviders.tsx b/features/app-core/screens/UniversalAppProviders.tsx index 770f906..3f6f5ad 100644 --- a/features/app-core/screens/UniversalAppProviders.tsx +++ b/features/app-core/screens/UniversalAppProviders.tsx @@ -1,24 +1,34 @@ 'use client' import React from 'react' +import { CoreContext, CoreContextType } from '../context/CoreContext' // -i- This is a regular react client component -// -i- Use this file for adding universal app providers +// -i- Use this file for adding universal app providers that work in both Expo and Next.js // -i- It will be rendered by 'apps/expo' on mobile from the 'ExpoRootLayout' component // -i- It will also be rendered by 'apps/next' on web from the 'NextClientRootLayout' component /* --- Types ----------------------------------------------------------------------------------- */ -type UniversalAppProvidersProps = { +type UniversalAppProvidersProps = CoreContextType & { children: React.ReactNode } /* --- ---------------------------------------------------------------- */ -const UniversalAppProviders = ({ children }: UniversalAppProvidersProps) => ( - <> - {children} - -) +const UniversalAppProviders = (props: UniversalAppProvidersProps) => { + // Props + const { children, contextLink, contextRouter, useContextRouteParams } = props + + // -- Render -- + + return ( + <> + + {children} + + + ) +} /* --- Exports --------------------------------------------------------------------------------- */ From c299b6acb2084c5a0f1372744053a04ef042e877 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Tue, 9 Apr 2024 13:21:14 +0200 Subject: [PATCH 007/126] feat: Add portable Image component --- apps/expo/app/ExpoRootLayout.tsx | 2 + apps/next/app/NextClientRootLayout.tsx | 2 + features/app-core/components/Image.expo.tsx | 97 +++++++++++++++++++ .../{Image.web.tsx => Image.next.tsx} | 0 features/app-core/components/Image.tsx | 97 +++---------------- .../{CoreContext.ts => CoreContext.tsx} | 13 ++- .../screens/UniversalAppProviders.tsx | 4 +- 7 files changed, 129 insertions(+), 86 deletions(-) create mode 100644 features/app-core/components/Image.expo.tsx rename features/app-core/components/{Image.web.tsx => Image.next.tsx} (100%) rename features/app-core/context/{CoreContext.ts => CoreContext.tsx} (65%) diff --git a/apps/expo/app/ExpoRootLayout.tsx b/apps/expo/app/ExpoRootLayout.tsx index b841355..e7440d0 100644 --- a/apps/expo/app/ExpoRootLayout.tsx +++ b/apps/expo/app/ExpoRootLayout.tsx @@ -1,6 +1,7 @@ import { Stack } from 'expo-router' import UniversalAppProviders from '@app/core/screens/UniversalAppProviders' import UniversalRootLayout from '@app/core/screens/UniversalRootLayout' +import { Image as ExpoContextImage } from '@app/core/components/Image.expo' import { Link as ExpoContextLink } from '@app/core/navigation/Link.expo' import { useRouter as useExpoContextRouter } from '@app/core/navigation/useRouter.expo' import { useRouteParams as useExpoRouteParams } from '@app/core/navigation/useRouteParams.expo' @@ -20,6 +21,7 @@ export default function ExpoRootLayout() { return ( { return ( -------------------------------------------------------------------------------- */ + +const Image = (props: UniversalImageProps): JSX.Element => { + // Props + const { + /* - Universal - */ + src, + alt, + width, + height, + style, + priority, + onError, + onLoadEnd, + /* - Split - */ + expoPlaceholder, + /* - Next.js - */ + onLoad, + fill, + /* - Expo - */ + accessibilityLabel, + accessible, + allowDownscaling, + autoplay, + blurRadius, + cachePolicy, + contentFit, + contentPosition, + enableLiveTextInteraction, + focusable, + onLoadStart, + onProgress, + placeholderContentFit, + recyclingKey, + responsivePolicy, + } = props + + // -- Overrides -- + + // @ts-ignore + const finalStyle = { width, height, ...style } + if (fill) finalStyle.height = '100%' + if (fill) finalStyle.width = '100%' + + // -- Render -- + + return ( + + ) +} + +/* --- Static Methods -------------------------------------------------------------------------- */ + +Image.clearDiskCache = ExpoImage.clearDiskCache as UniversalImageMethods['clearDiskCache'] +Image.clearMemoryCache = ExpoImage.clearMemoryCache as UniversalImageMethods['clearMemoryCache'] +Image.getCachePathAsync = ExpoImage.getCachePathAsync as UniversalImageMethods['getCachePathAsync'] +Image.prefetch = ExpoImage.prefetch as UniversalImageMethods['prefetch'] + +/* --- Exports --------------------------------------------------------------------------------- */ + +export { Image } diff --git a/features/app-core/components/Image.web.tsx b/features/app-core/components/Image.next.tsx similarity index 100% rename from features/app-core/components/Image.web.tsx rename to features/app-core/components/Image.next.tsx diff --git a/features/app-core/components/Image.tsx b/features/app-core/components/Image.tsx index 162ab80..a4ac6d0 100644 --- a/features/app-core/components/Image.tsx +++ b/features/app-core/components/Image.tsx @@ -1,89 +1,22 @@ -import { Image as ExpoImage } from 'expo-image' -import { UniversalImageProps, UniversalImageMethods } from './Image.types' +import React from 'react' +import type { UniversalImageProps, UniversalImageMethods } from './Image.types' +import { CoreContext } from '../context/CoreContext' -/* --- -------------------------------------------------------------------------------- */ +/* --- --------------------------------------------------------------------------------- */ -const Image = (props: UniversalImageProps): JSX.Element => { - // Props - const { - /* - Universal - */ - src, - alt, - width, - height, - style, - priority, - onError, - onLoadEnd, - /* - Split - */ - expoPlaceholder, - /* - Next.js - */ - onLoad, - fill, - /* - Expo - */ - accessibilityLabel, - accessible, - allowDownscaling, - autoplay, - blurRadius, - cachePolicy, - contentFit, - contentPosition, - enableLiveTextInteraction, - focusable, - onLoadStart, - onProgress, - placeholderContentFit, - recyclingKey, - responsivePolicy, - } = props +const Image = ((props: UniversalImageProps) => { + // Context + const { contextImage: ContextImage } = React.useContext(CoreContext) - // -- Overrides -- + // Static methods + if (!Image.clearDiskCache) Image.clearDiskCache = ContextImage.clearDiskCache + if (!Image.clearMemoryCache) Image.clearMemoryCache = ContextImage.clearMemoryCache + if (!Image.getCachePathAsync) Image.getCachePathAsync = ContextImage.getCachePathAsync + if (!Image.prefetch) Image.prefetch = ContextImage.prefetch - // @ts-ignore - const finalStyle = { width, height, ...style } - if (fill) finalStyle.height = '100%' - if (fill) finalStyle.width = '100%' - - // -- Render -- - - return ( - - ) -} - -/* --- Static Methods -------------------------------------------------------------------------- */ - -Image.clearDiskCache = ExpoImage.clearDiskCache as UniversalImageMethods['clearDiskCache'] -Image.clearMemoryCache = ExpoImage.clearMemoryCache as UniversalImageMethods['clearMemoryCache'] -Image.getCachePathAsync = ExpoImage.getCachePathAsync as UniversalImageMethods['getCachePathAsync'] -Image.prefetch = ExpoImage.prefetch as UniversalImageMethods['prefetch'] + // Render + return +}) as ((props: UniversalImageProps) => JSX.Element) & UniversalImageMethods /* --- Exports --------------------------------------------------------------------------------- */ diff --git a/features/app-core/context/CoreContext.ts b/features/app-core/context/CoreContext.tsx similarity index 65% rename from features/app-core/context/CoreContext.ts rename to features/app-core/context/CoreContext.tsx index e090c98..57d3bf9 100644 --- a/features/app-core/context/CoreContext.ts +++ b/features/app-core/context/CoreContext.tsx @@ -3,24 +3,33 @@ import { UniversalLinkProps } from '../navigation/Link.types' import { UniversalRouterMethods } from '../navigation/useRouter.types' import { UniversalRouteScreenProps } from '../navigation/useRouteParams.types' import type { useLocalSearchParams } from 'expo-router' +import { UniversalImageMethods, UniversalImageProps } from '../components/Image.types' // -i- This context's only aim is to provide React Portability & Framework Ejection patterns if required // -i- By allowing you to provide your own custom Link and Router overrides, you could e.g.: // -i- 1) Support Expo for Web by not defaulting to Next.js's Link and Router on web -// -i- 2) Eject from Next.js entirely and e.g. use another framework's Link component and Router +// -i- 2) Eject from Next.js entirely and e.g. use another framework's Image / Link / router /* --- Types ----------------------------------------------------------------------------------- */ export type CoreContextType = { + contextImage: ((props: UniversalImageProps) => JSX.Element) & UniversalImageMethods contextLink: (props: UniversalLinkProps) => JSX.Element contextRouter: UniversalRouterMethods useContextRouteParams: (routeScreenProps: UniversalRouteScreenProps) => ReturnType } +/* --- Dummy ----------------------------------------------------------------------------------- */ + +const createDummyComponent = (contextComponentName: string) => (props: any) => { + throw new Error(`CoreContext was not provided with a ${contextComponentName}. Please provide one in UniversalAppProviders.`) +} + /* --- Context --------------------------------------------------------------------------------- */ export const CoreContext = React.createContext({ - contextLink: null, + contextImage: createDummyComponent('contextImage') as any, + contextLink: createDummyComponent('contextLink'), contextRouter: null, useContextRouteParams: () => ({}), }) diff --git a/features/app-core/screens/UniversalAppProviders.tsx b/features/app-core/screens/UniversalAppProviders.tsx index 3f6f5ad..04c9132 100644 --- a/features/app-core/screens/UniversalAppProviders.tsx +++ b/features/app-core/screens/UniversalAppProviders.tsx @@ -17,13 +17,13 @@ type UniversalAppProvidersProps = CoreContextType & { const UniversalAppProviders = (props: UniversalAppProvidersProps) => { // Props - const { children, contextLink, contextRouter, useContextRouteParams } = props + const { children, contextImage, contextLink, contextRouter, useContextRouteParams } = props // -- Render -- return ( <> - + {children} From 9d7c056a3051823edf00151be62e1acf650779df Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 12 Apr 2024 21:34:03 +0200 Subject: [PATCH 008/126] feat: Add Apollo Server at '/api/graphql' --- apps/next/app/(main)/api/graphql/route.ts | 12 + features/app-core/graphql/graphqlServer.ts | 23 + features/app-core/graphql/schema.ts | 56 + features/app-core/package.json | 7 +- .../app-core/resolvers/healthCheck.graphql | 33 + package-lock.json | 4236 ++++++++++++----- package.json | 3 + 7 files changed, 3225 insertions(+), 1145 deletions(-) create mode 100644 apps/next/app/(main)/api/graphql/route.ts create mode 100644 features/app-core/graphql/graphqlServer.ts create mode 100644 features/app-core/graphql/schema.ts create mode 100644 features/app-core/resolvers/healthCheck.graphql diff --git a/apps/next/app/(main)/api/graphql/route.ts b/apps/next/app/(main)/api/graphql/route.ts new file mode 100644 index 0000000..153cd10 --- /dev/null +++ b/apps/next/app/(main)/api/graphql/route.ts @@ -0,0 +1,12 @@ +import type { NextRequest } from 'next/server' +import { createGraphQLServerHandler } from '@app/core/graphql/graphqlServer' + +/* --- Handler --------------------------------------------------------------------------------- */ + +const handler = createGraphQLServerHandler() + +/* --- /api/graphql ---------------------------------------------------------------------------- */ + +export const GET = (req: NextRequest) => handler(req) + +export const POST = (req: NextRequest) => handler(req) diff --git a/features/app-core/graphql/graphqlServer.ts b/features/app-core/graphql/graphqlServer.ts new file mode 100644 index 0000000..456571f --- /dev/null +++ b/features/app-core/graphql/graphqlServer.ts @@ -0,0 +1,23 @@ +import { ApolloServer } from '@apollo/server' +import type { NextRequest } from 'next/server' +import { startServerAndCreateNextHandler } from '@as-integrations/next' +import { createRequestContext } from '../middleware/createRequestContext' +import { schemaBundle } from './schema' + +/* --- Apollo Server --------------------------------------------------------------------------- */ + +export const graphqlServer = new ApolloServer({ + typeDefs: schemaBundle.typeDefs, + resolvers: schemaBundle.resolvers, + introspection: true, +}) + +/** --- createGraphQLServerHandler() ----------------------------------------------------------- */ +/** -i- Create the apollo graphql server handler for Next.js API router and provides context to resolvers */ +export const createGraphQLServerHandler = () => { + return startServerAndCreateNextHandler(graphqlServer, { + context: async (req: NextRequest) => { + return await createRequestContext({ req }) + }, + }) +} diff --git a/features/app-core/graphql/schema.ts b/features/app-core/graphql/schema.ts new file mode 100644 index 0000000..039055d --- /dev/null +++ b/features/app-core/graphql/schema.ts @@ -0,0 +1,56 @@ +import path from 'path' +import { fileURLToPath } from 'node:url' +import { loadFilesSync } from '@graphql-tools/load-files' +import { mergeTypeDefs, mergeResolvers } from '@graphql-tools/merge' +import { makeExecutableSchema } from '@graphql-tools/schema' +import type { RequestContext } from '../middleware/createRequestContext' +import { healthCheck } from '../resolvers/healthCheck' + +/** --- createResolver() ----------------------------------------------------------------------- */ +/** -i- Helper to wrap a resolver function and map context and args to it */ +export const createResolver = (resolver: (input: { args: T, context: RequestContext }) => Promise) => { + return async (parent: unknown, { args }: { args: T }, context: RequestContext, info: unknown) => { + return resolver({ args, context: { ...context, parent, info } }) + } +} + +/* --- Custom Resolvers ------------------------------------------------------------------------ */ + +const customResolvers = { + Query: { + healthCheck: createResolver(healthCheck), + }, +} + +/** --- createRootResolver() ------------------------------------------------------------------- */ +/** -i- Combine all custom and other (e.g. injected) resolvers */ +export const createRootResolver = () => mergeResolvers([ + customResolvers, + /* other resolvers? */ +]) + +/** --- createSchemaDefinitions() -------------------------------------------------------------- */ +/** -i- Combine all custom and other (e.g. generated) graphql schema definitions */ +export const createSchemaDefinitions = () => { + const currentDir = path.dirname(fileURLToPath(import.meta.url)) + const rootDir = path.resolve(currentDir, '../../..') + const schemaPathPattern = `${rootDir}/(features|packages)/**/*.graphql` + const customGraphQLDefinitions = loadFilesSync(schemaPathPattern) + return mergeTypeDefs([ + ...customGraphQLDefinitions, + /* other typedefs? */ + ]) +} + +/* --- Schema ---------------------------------------------------------------------------------- */ + +export const schemaBundle = { + typeDefs: createSchemaDefinitions(), + resolvers: createRootResolver(), +} + +export const executableSchema = makeExecutableSchema(schemaBundle) + +/* --- Exports --------------------------------------------------------------------------------- */ + +export default executableSchema diff --git a/features/app-core/package.json b/features/app-core/package.json index e04b339..5fb761b 100644 --- a/features/app-core/package.json +++ b/features/app-core/package.json @@ -2,7 +2,12 @@ "name": "@app/core", "version": "1.0.0", "private": true, - "dependencies": {}, + "dependencies": { + "@apollo/server": "^4.10.2", + "@as-integrations/next": "^3.0.0", + "@graphql-tools/load-files": "^7.0.0", + "graphql-tag": "^2.12.6" + }, "devDependencies": { "typescript": "5.3.3" }, diff --git a/features/app-core/resolvers/healthCheck.graphql b/features/app-core/resolvers/healthCheck.graphql new file mode 100644 index 0000000..3e4349e --- /dev/null +++ b/features/app-core/resolvers/healthCheck.graphql @@ -0,0 +1,33 @@ +type Query { + healthCheck(args: HealthCheckArgs): HealthCheckData! +} + +input HealthCheckArgs { + echo: String +} + +type HealthCheckData { + echo: String + status: String! + alive: Boolean! + kicking: Boolean! + now: String! + aliveTime: Float! + aliveSince: String! + serverTimezone: String! + requestHost: String + requestProtocol: String + requestURL: String + baseURL: String + apiURL: String + port: Int + debugPort: Int + nodeVersion: String + v8Version: String + systemArch: String + systemPlatform: String + systemRelease: String + systemFreeMemory: Float + systemTotalMemory: Float + systemLoadAverage: [Float] +} diff --git a/package-lock.json b/package-lock.json index 2babd0b..334280c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,22 +49,253 @@ "features/app-core": { "name": "@app/core", "version": "1.0.0", + "dependencies": { + "@apollo/server": "^4.10.2", + "@as-integrations/next": "^3.0.0", + "@graphql-tools/load-files": "^7.0.0", + "graphql-tag": "^2.12.6" + }, "devDependencies": { "typescript": "5.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==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, + "node_modules/@apollo/cache-control-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@apollo/cache-control-types/-/cache-control-types-1.0.3.tgz", + "integrity": "sha512-F17/vCp7QVwom9eG7ToauIKdAxpSoadsJnqIfyryLFSkLSOEqu+eC5Z3N8OXcUVStuOMcNHlyraRsA6rRICu4g==", + "peerDependencies": { + "graphql": "14.x || 15.x || 16.x" + } + }, + "node_modules/@apollo/protobufjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", + "integrity": "sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "long": "^4.0.0" + }, + "bin": { + "apollo-pbjs": "bin/pbjs", + "apollo-pbts": "bin/pbts" + } + }, + "node_modules/@apollo/server": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@apollo/server/-/server-4.10.2.tgz", + "integrity": "sha512-qlTZE4XyzMPprtkxFjmPxMwc2KC4nvNQrKXk2PMotEACKcaLXVZFIgstxbSqBCNl2KgzbsgU1g6vvbV6Xcfikw==", + "dependencies": { + "@apollo/cache-control-types": "^1.0.3", + "@apollo/server-gateway-interface": "^1.1.1", + "@apollo/usage-reporting-protobuf": "^4.1.1", + "@apollo/utils.createhash": "^2.0.0", + "@apollo/utils.fetcher": "^2.0.0", + "@apollo/utils.isnodelike": "^2.0.0", + "@apollo/utils.keyvaluecache": "^2.1.0", + "@apollo/utils.logger": "^2.0.0", + "@apollo/utils.usagereporting": "^2.1.0", + "@apollo/utils.withrequired": "^2.0.0", + "@graphql-tools/schema": "^9.0.0", + "@josephg/resolvable": "^1.0.0", + "@types/express": "^4.17.13", + "@types/express-serve-static-core": "^4.17.30", + "@types/node-fetch": "^2.6.1", + "async-retry": "^1.2.1", + "cors": "^2.8.5", + "express": "^4.17.1", + "loglevel": "^1.6.8", + "lru-cache": "^7.10.1", + "negotiator": "^0.6.3", + "node-abort-controller": "^3.1.1", + "node-fetch": "^2.6.7", + "uuid": "^9.0.0", + "whatwg-mimetype": "^3.0.0" + }, + "engines": { + "node": ">=14.16.0" + }, + "peerDependencies": { + "graphql": "^16.6.0" + } + }, + "node_modules/@apollo/server-gateway-interface": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@apollo/server-gateway-interface/-/server-gateway-interface-1.1.1.tgz", + "integrity": "sha512-pGwCl/po6+rxRmDMFgozKQo2pbsSwE91TpsDBAOgf74CRDPXHHtM88wbwjab0wMMZh95QfR45GGyDIdhY24bkQ==", + "dependencies": { + "@apollo/usage-reporting-protobuf": "^4.1.1", + "@apollo/utils.fetcher": "^2.0.0", + "@apollo/utils.keyvaluecache": "^2.1.0", + "@apollo/utils.logger": "^2.0.0" + }, + "peerDependencies": { + "graphql": "14.x || 15.x || 16.x" + } + }, + "node_modules/@apollo/usage-reporting-protobuf": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz", + "integrity": "sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==", + "dependencies": { + "@apollo/protobufjs": "1.2.7" + } + }, + "node_modules/@apollo/utils.createhash": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.createhash/-/utils.createhash-2.0.1.tgz", + "integrity": "sha512-fQO4/ZOP8LcXWvMNhKiee+2KuKyqIcfHrICA+M4lj/h/Lh1H10ICcUtk6N/chnEo5HXu0yejg64wshdaiFitJg==", + "dependencies": { + "@apollo/utils.isnodelike": "^2.0.1", + "sha.js": "^2.4.11" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@apollo/utils.dropunuseddefinitions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-2.0.1.tgz", + "integrity": "sha512-EsPIBqsSt2BwDsv8Wu76LK5R1KtsVkNoO4b0M5aK0hx+dGg9xJXuqlr7Fo34Dl+y83jmzn+UvEW+t1/GP2melA==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "graphql": "14.x || 15.x || 16.x" + } + }, + "node_modules/@apollo/utils.fetcher": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.fetcher/-/utils.fetcher-2.0.1.tgz", + "integrity": "sha512-jvvon885hEyWXd4H6zpWeN3tl88QcWnHp5gWF5OPF34uhvoR+DFqcNxs9vrRaBBSY3qda3Qe0bdud7tz2zGx1A==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@apollo/utils.isnodelike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.isnodelike/-/utils.isnodelike-2.0.1.tgz", + "integrity": "sha512-w41XyepR+jBEuVpoRM715N2ZD0xMD413UiJx8w5xnAZD2ZkSJnMJBoIzauK83kJpSgNuR6ywbV29jG9NmxjK0Q==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@apollo/utils.keyvaluecache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-2.1.1.tgz", + "integrity": "sha512-qVo5PvUUMD8oB9oYvq4ViCjYAMWnZ5zZwEjNF37L2m1u528x5mueMlU+Cr1UinupCgdB78g+egA1G98rbJ03Vw==", + "dependencies": { + "@apollo/utils.logger": "^2.0.1", + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@apollo/utils.logger": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-2.0.1.tgz", + "integrity": "sha512-YuplwLHaHf1oviidB7MxnCXAdHp3IqYV8n0momZ3JfLniae92eYqMIx+j5qJFX6WKJPs6q7bczmV4lXIsTu5Pg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@apollo/utils.printwithreducedwhitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-2.0.1.tgz", + "integrity": "sha512-9M4LUXV/fQBh8vZWlLvb/HyyhjJ77/I5ZKu+NBWV/BmYGyRmoEP9EVAy7LCVoY3t8BDcyCAGfxJaLFCSuQkPUg==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "graphql": "14.x || 15.x || 16.x" + } + }, + "node_modules/@apollo/utils.removealiases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-2.0.1.tgz", + "integrity": "sha512-0joRc2HBO4u594Op1nev+mUF6yRnxoUH64xw8x3bX7n8QBDYdeYgY4tF0vJReTy+zdn2xv6fMsquATSgC722FA==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "graphql": "14.x || 15.x || 16.x" + } + }, + "node_modules/@apollo/utils.sortast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-2.0.1.tgz", + "integrity": "sha512-eciIavsWpJ09za1pn37wpsCGrQNXUhM0TktnZmHwO+Zy9O4fu/WdB4+5BvVhFiZYOXvfjzJUcc+hsIV8RUOtMw==", + "dependencies": { + "lodash.sortby": "^4.7.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "graphql": "14.x || 15.x || 16.x" + } + }, + "node_modules/@apollo/utils.stripsensitiveliterals": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-2.0.1.tgz", + "integrity": "sha512-QJs7HtzXS/JIPMKWimFnUMK7VjkGQTzqD9bKD1h3iuPAqLsxd0mUNVbkYOPTsDhUKgcvUOfOqOJWYohAKMvcSA==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "graphql": "14.x || 15.x || 16.x" + } + }, + "node_modules/@apollo/utils.usagereporting": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-2.1.0.tgz", + "integrity": "sha512-LPSlBrn+S17oBy5eWkrRSGb98sWmnEzo3DPTZgp8IQc8sJe0prDgDuppGq4NeQlpoqEHz0hQeYHAOA0Z3aQsxQ==", + "dependencies": { + "@apollo/usage-reporting-protobuf": "^4.1.0", + "@apollo/utils.dropunuseddefinitions": "^2.0.1", + "@apollo/utils.printwithreducedwhitespace": "^2.0.1", + "@apollo/utils.removealiases": "2.0.1", + "@apollo/utils.sortast": "^2.0.1", + "@apollo/utils.stripsensitiveliterals": "^2.0.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "graphql": "14.x || 15.x || 16.x" + } + }, + "node_modules/@apollo/utils.withrequired": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.withrequired/-/utils.withrequired-2.0.1.tgz", + "integrity": "sha512-YBDiuAX9i1lLc6GeTy1m7DGLFn/gMnvXqlalOIMjM7DeOgIacEjjfwPqb0M1CQ2v11HhR15d1NmxJoRCfrNqcA==", + "engines": { + "node": ">=14" + } + }, "node_modules/@app/core": { "resolved": "features/app-core", "link": true @@ -77,41 +308,53 @@ "resolved": "apps/next", "link": true }, + "node_modules/@as-integrations/next": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@as-integrations/next/-/next-3.0.0.tgz", + "integrity": "sha512-FmqJjoH5XamyBZQVTnnG9ssE3ywf/TPIanFGwYjp3YFsX92F1lY7FDcrQJa/gCJQnb8gSZAdqAIgrWo4K325sA==", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@apollo/server": "^4.0.0", + "next": "^12.0.0 || ^13.0.0 || ^14.0.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", + "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -127,13 +370,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -177,17 +420,30 @@ "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==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "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==" + }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", - "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", + "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -216,9 +472,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -273,11 +529,11 @@ } }, "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==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -313,9 +569,9 @@ } }, "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==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "engines": { "node": ">=6.9.0" } @@ -337,12 +593,12 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -386,9 +642,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } @@ -423,35 +679,36 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", - "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -459,12 +716,27 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz", + "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -474,13 +746,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/plugin-transform-optional-chaining": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -490,12 +762,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", - "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -539,13 +811,13 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.7.tgz", - "integrity": "sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.1.tgz", + "integrity": "sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.23.7", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-decorators": "^7.23.3" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-decorators": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -555,12 +827,29 @@ } }, "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.23.3.tgz", - "integrity": "sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.1.tgz", + "integrity": "sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-default-from": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-export-default-from": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -701,11 +990,11 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", - "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz", + "integrity": "sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -726,11 +1015,11 @@ } }, "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.23.3.tgz", - "integrity": "sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.1.tgz", + "integrity": "sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -751,11 +1040,11 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", - "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", + "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -765,11 +1054,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -779,11 +1068,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -815,11 +1104,11 @@ } }, "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -923,11 +1212,11 @@ } }, "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -952,11 +1241,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -966,12 +1255,12 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", - "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -983,12 +1272,12 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { @@ -999,11 +1288,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1013,11 +1302,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", + "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1027,12 +1316,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1042,12 +1331,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1058,16 +1347,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1079,12 +1368,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1094,11 +1383,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1108,12 +1397,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1123,11 +1412,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1137,11 +1426,11 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1152,12 +1441,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1167,11 +1456,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1182,12 +1471,12 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", - "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz", + "integrity": "sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-flow": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1197,11 +1486,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1212,13 +1501,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1228,11 +1517,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1243,11 +1532,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1257,11 +1546,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1272,11 +1561,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1286,12 +1575,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1301,12 +1590,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-simple-access": "^7.22.5" }, "engines": { @@ -1317,13 +1606,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", - "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { @@ -1334,12 +1623,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1364,11 +1653,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1378,11 +1667,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1393,11 +1682,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1408,15 +1697,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/plugin-transform-parameters": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1426,12 +1714,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1441,11 +1729,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1456,11 +1744,11 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1472,11 +1760,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1486,12 +1774,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1501,13 +1789,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1518,11 +1806,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1532,11 +1820,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", - "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", + "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1578,11 +1866,11 @@ } }, "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", + "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1592,11 +1880,11 @@ } }, "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==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1606,12 +1894,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", - "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz", + "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1621,11 +1909,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1636,11 +1924,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1650,15 +1938,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz", - "integrity": "sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.7", - "babel-plugin-polyfill-corejs3": "^0.8.7", - "babel-plugin-polyfill-regenerator": "^0.5.4", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -1669,11 +1957,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1683,11 +1971,11 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1698,11 +1986,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1712,11 +2000,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1726,11 +2014,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1740,14 +2028,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", - "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz", + "integrity": "sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.23.3" + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-typescript": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1757,11 +2045,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1771,12 +2059,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1786,12 +2074,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1801,12 +2089,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1816,25 +2104,26 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", - "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz", + "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==", "dependencies": { - "@babel/compat-data": "^7.23.5", + "@babel/compat-data": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1846,58 +2135,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.7", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.3", - "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.4", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.1", + "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.7", - "babel-plugin-polyfill-corejs3": "^0.8.7", - "babel-plugin-polyfill-regenerator": "^0.5.4", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1909,13 +2198,13 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz", - "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.1.tgz", + "integrity": "sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-flow-strip-types": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-flow-strip-types": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1938,16 +2227,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", - "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz", + "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-react-display-name": "^7.24.1", + "@babel/plugin-transform-react-jsx": "^7.23.4", "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.23.3" + "@babel/plugin-transform-react-pure-annotations": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1957,15 +2246,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", - "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", + "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-syntax-jsx": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-typescript": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1998,9 +2287,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", - "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2009,31 +2298,31 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@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.6", - "@babel/types": "^7.23.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2042,9 +2331,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -2069,24 +2358,32 @@ "safe-json-stringify": "~1" } }, + "node_modules/@expo/bunyan/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/@expo/cli": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.1.tgz", - "integrity": "sha512-7TS7UguHF6KVMVJQKwBgmV/azyPg5Oq/HuSUzWz2rSZbjCpP0ZhEK4WHUNI0uHRxW1AbGYg9ToRkUG53bZlm4Q==", + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.8.tgz", + "integrity": "sha512-yfkoghCltbGPDbRI71Qu3puInjXx4wO82+uhW82qbWLvosfIN7ep5Gr0Lq54liJpvlUG6M0IXM1GiGqcCyP12w==", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/code-signing-certificates": "0.0.5", "@expo/config": "~8.5.0", "@expo/config-plugins": "~7.8.0", "@expo/devcert": "^1.0.0", - "@expo/env": "~0.2.0", + "@expo/env": "~0.2.2", "@expo/image-utils": "^0.4.0", "@expo/json-file": "^8.2.37", "@expo/metro-config": "~0.17.0", "@expo/osascript": "^2.0.31", "@expo/package-manager": "^1.1.1", "@expo/plist": "^0.1.0", - "@expo/prebuild-config": "6.7.3", + "@expo/prebuild-config": "6.7.4", "@expo/rudder-sdk-node": "1.1.1", "@expo/spawn-async": "1.5.0", "@expo/xcpretty": "^4.3.0", @@ -2126,6 +2423,7 @@ "npm-package-arg": "^7.0.0", "open": "^8.3.0", "ora": "3.4.0", + "picomatch": "^3.0.1", "pretty-bytes": "5.6.0", "progress": "2.0.3", "prompts": "^2.3.2", @@ -2138,6 +2436,8 @@ "semver": "^7.5.3", "send": "^0.18.0", "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "stacktrace-parser": "^0.1.10", "structured-headers": "^0.4.1", "tar": "^6.0.5", "temp-dir": "^2.0.0", @@ -2197,6 +2497,19 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/@expo/cli/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@expo/cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2217,9 +2530,9 @@ } }, "node_modules/@expo/cli/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2241,11 +2554,6 @@ "node": ">=8" } }, - "node_modules/@expo/cli/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/@expo/code-signing-certificates": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", @@ -2381,9 +2689,9 @@ } }, "node_modules/@expo/config-plugins/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2405,11 +2713,6 @@ "node": ">=8" } }, - "node_modules/@expo/config-plugins/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/@expo/config-types": { "version": "50.0.0", "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz", @@ -2467,11 +2770,6 @@ "node": ">=10" } }, - "node_modules/@expo/config/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/@expo/devcert": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.0.tgz", @@ -2501,14 +2799,14 @@ } }, "node_modules/@expo/env": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.1.tgz", - "integrity": "sha512-deZmRS7Dvp18VM8s559dq/ZjPlV1D9vtLoLXwHmCK/JYOvtNptdKsfxcWjI7ewmo6ln2PqgNI9HRI74q6Wk2eA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.3.tgz", + "integrity": "sha512-a+uJ/e6MAVxPVVN/HbXU5qxzdqrqDwNQYxCfxtAufgmd5VZj54e5f3TJA3LEEUW3pTSZR8xK0H0EtVN297AZnw==", "dependencies": { "chalk": "^4.0.0", "debug": "^4.3.4", - "dotenv": "~16.0.3", - "dotenv-expand": "~10.0.0", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", "getenv": "^1.0.0" } }, @@ -2857,16 +3155,16 @@ } }, "node_modules/@expo/metro-config": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.17.3.tgz", - "integrity": "sha512-YW8ixbaz6yL7/Mg1rJJejiAAVQQKjGY1wXvT2Dh487r/r9/j1yE1YRS/oRY1yItYzbnHvO0p0jMnEGfiFYL3Tg==", + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.17.6.tgz", + "integrity": "sha512-WaC1C+sLX/Wa7irwUigLhng3ckmXIEQefZczB8DfYmleV6uhfWWo2kz/HijFBpV7FKs2cW6u8J/aBQpFkxlcqg==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", "@expo/config": "~8.5.0", - "@expo/env": "~0.2.0", + "@expo/env": "~0.2.2", "@expo/json-file": "~8.3.0", "@expo/spawn-async": "^1.7.2", "babel-preset-fbjs": "^3.4.0", @@ -3049,9 +3347,9 @@ } }, "node_modules/@expo/metro-runtime": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.1.1.tgz", - "integrity": "sha512-NTtSgYIDqoJb/3m6uxus08PcJO7FguHRRg/ZLRBXt/NNPtJ1bk9eLGspZaa5jbSniVZe2AIXW9VGPi/GwKmIbQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.1.3.tgz", + "integrity": "sha512-u1CaQJJlSgvxBB5NJ6YMVvSDTTRzjT71dHpEBnKPZhpFv5ebVry52FZ2sEeEEA6mHG5zGxWXmHImW3hNKHh8EA==", "peerDependencies": { "react-native": "*" } @@ -3178,9 +3476,9 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.7.3.tgz", - "integrity": "sha512-jZIHzlnvdg4Gnln06XR9tvirL3hSp/Jh48COhLKs51vb3THCWumUytZBS4DSMdvGwf8btnaB01Zg00xQhSDBsA==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.7.4.tgz", + "integrity": "sha512-x8EUdCa8DTMZ/dtEXjHAdlP+ljf6oSeSKNzhycXiHhpMSMG9jEhV28ocCwc6cKsjK5GziweEiHwvrj6+vsBlhA==", "dependencies": { "@expo/config": "~8.5.0", "@expo/config-plugins": "~7.8.0", @@ -3255,11 +3553,6 @@ "node": ">= 10.0.0" } }, - "node_modules/@expo/prebuild-config/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/@expo/rudder-sdk-node": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", @@ -3277,15 +3570,23 @@ "node": ">=12" } }, + "node_modules/@expo/rudder-sdk-node/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/@expo/sdk-runtime-versions": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==" }, "node_modules/@expo/server": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.3.0.tgz", - "integrity": "sha512-5oIqedpLVMnf1LGI9Xd5OOGmK3DjgH9VpuqVN4e/6DwLT05RZJMyI7ylfG6QSy1e44yOgjv242tLyg0e/zdZ+A==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.3.1.tgz", + "integrity": "sha512-cCKyVA2IR9J4hDFPXzj3L08+Ngd/7z2F+JtdW0NLy03qShXBI5NSEEcaiHtjrgsLXPDe9PBw5Xgsfmxuduyggg==", "dependencies": { "@remix-run/node": "^1.19.3", "abort-controller": "^3.0.0", @@ -3416,6 +3717,60 @@ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" }, + "node_modules/@graphql-tools/load-files": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/load-files/-/load-files-7.0.0.tgz", + "integrity": "sha512-P98amERIwI7FD8Bsq6xUbz9Mj63W8qucfrE/WQjad5jFMZYdFFt46a99FFdfx8S/ZYgpAlj/AZbaTtWLitMgNQ==", + "dependencies": { + "globby": "11.1.0", + "tslib": "^2.4.0", + "unixify": "1.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/merge": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", + "dependencies": { + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/@graphql-typed-document-node/core": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", @@ -3577,42 +3932,47 @@ "node": ">=8" } }, + "node_modules/@josephg/resolvable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz", + "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==" + }, "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==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "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==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -3621,9 +3981,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3822,9 +4182,9 @@ } }, "node_modules/@npmcli/fs/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3835,11 +4195,6 @@ "node": ">=10" } }, - "node_modules/@npmcli/fs/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/@npmcli/move-file": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", @@ -3878,6 +4233,60 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", @@ -4480,9 +4889,9 @@ } }, "node_modules/@react-native-community/cli-doctor/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -4537,11 +4946,6 @@ "node": ">= 8" } }, - "node_modules/@react-native-community/cli-doctor/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/@react-native-community/cli-hermes": { "version": "12.3.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.0.tgz", @@ -5329,9 +5733,9 @@ } }, "node_modules/@react-native-community/cli-tools/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5369,11 +5773,6 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-tools/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/@react-native-community/cli-types": { "version": "12.3.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.0.tgz", @@ -5601,9 +6000,9 @@ } }, "node_modules/@react-native-community/cli/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5658,11 +6057,6 @@ "node": ">= 8" } }, - "node_modules/@react-native-community/cli/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/@react-native/assets-registry": { "version": "0.73.1", "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.73.1.tgz", @@ -5672,25 +6066,28 @@ } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.73.2", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.2.tgz", - "integrity": "sha512-PadyFZWVaWXIBP7Q5dgEL7eAd7tnsgsLjoHJB1hIRZZuVUg1Zqe3nULwC7RFAqOtr5Qx7KXChkFFcKQ3WnZzGw==", + "version": "0.75.0-main", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.75.0-main.tgz", + "integrity": "sha512-gEl+bl+orntqNA3yGETGeHLNzDnZuQfO074BreX/l80WnZbx00/BJ57IkZ372j6I+gjki+3dYeRQOp82m/sUWQ==", + "peer": true, "dependencies": { - "@react-native/codegen": "0.73.2" + "@react-native/codegen": "0.75.0-main" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.73.19", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.19.tgz", - "integrity": "sha512-ujon01uMOREZecIltQxPDmJ6xlVqAUFGI/JCSpeVYdxyXBoBH5dBb0ihj7h6LKH1q1jsnO9z4MxfddtypKkIbg==", + "version": "0.75.0-main", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.75.0-main.tgz", + "integrity": "sha512-yTyft0jSbTEfTfDUUfllJqKWLl3rNMiVMFjuWzMigikKAlSwKKUC/DxTEUfMwekFU05TjDyEOtigOTrm2yuoRQ==", + "peer": true, "dependencies": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", "@babel/plugin-proposal-class-properties": "^7.18.0", "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", "@babel/plugin-proposal-numeric-separator": "^7.0.0", "@babel/plugin-proposal-object-rest-spread": "^7.20.0", @@ -5726,7 +6123,7 @@ "@babel/plugin-transform-typescript": "^7.5.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.73.2", + "@react-native/babel-plugin-codegen": "0.75.0-main", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, @@ -5738,13 +6135,14 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.73.2", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.2.tgz", - "integrity": "sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==", + "version": "0.75.0-main", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.75.0-main.tgz", + "integrity": "sha512-vcIu7x7o/3xn9UQdOPqA6B/jtxDHB+xTIDlVe7nym+0ua/OIOwYoVscTb0NtHuEjGKO1G5CTWNhl34BFhIs0+g==", + "peer": true, "dependencies": { "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", "glob": "^7.1.1", + "hermes-parser": "0.20.1", "invariant": "^2.2.4", "jscodeshift": "^0.14.0", "mkdirp": "^0.5.1", @@ -5778,6 +6176,26 @@ "node": ">=18" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { + "version": "0.73.7", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz", + "integrity": "sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.73.3", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^1.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "open": "^7.0.3", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5836,6 +6254,14 @@ "node": ">= 8" } }, + "node_modules/@react-native/community-cli-plugin/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/@react-native/community-cli-plugin/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -5896,6 +6322,11 @@ "node": ">=6" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/@react-native/community-cli-plugin/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -5921,6 +6352,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -5982,9 +6428,9 @@ } }, "node_modules/@react-native/dev-middleware": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz", - "integrity": "sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.8.tgz", + "integrity": "sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg==", "dependencies": { "@isaacs/ttlcache": "^1.4.1", "@react-native/debugger-frontend": "0.73.3", @@ -5995,7 +6441,8 @@ "node-fetch": "^2.2.0", "open": "^7.0.3", "serve-static": "^1.13.1", - "temp-dir": "^2.0.0" + "temp-dir": "^2.0.0", + "ws": "^6.2.2" }, "engines": { "node": ">=18" @@ -6029,6 +6476,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, "node_modules/@react-native/gradle-plugin": { "version": "0.73.4", "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz", @@ -6062,6 +6517,113 @@ "@babel/core": "*" } }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.2.tgz", + "integrity": "sha512-PadyFZWVaWXIBP7Q5dgEL7eAd7tnsgsLjoHJB1hIRZZuVUg1Zqe3nULwC7RFAqOtr5Qx7KXChkFFcKQ3WnZzGw==", + "dependencies": { + "@react-native/codegen": "0.73.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": { + "version": "0.73.19", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.19.tgz", + "integrity": "sha512-ujon01uMOREZecIltQxPDmJ6xlVqAUFGI/JCSpeVYdxyXBoBH5dBb0ihj7h6LKH1q1jsnO9z4MxfddtypKkIbg==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.2", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/codegen": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.2.tgz", + "integrity": "sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==", + "dependencies": { + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", + "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==" + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", + "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", + "dependencies": { + "hermes-estree": "0.15.0" + } + }, "node_modules/@react-native/normalize-color": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", @@ -6088,11 +6650,11 @@ } }, "node_modules/@react-navigation/bottom-tabs": { - "version": "6.5.11", - "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.11.tgz", - "integrity": "sha512-CBN/NOdxnMvmjw+AJQI1kltOYaClTZmGec5pQ3ZNTPX86ytbIOylDIITKMfTgHZcIEFQDymx1SHeS++PIL3Szw==", + "version": "6.5.20", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz", + "integrity": "sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA==", "dependencies": { - "@react-navigation/elements": "^1.3.21", + "@react-navigation/elements": "^1.3.30", "color": "^4.2.3", "warn-once": "^0.1.0" }, @@ -6105,16 +6667,16 @@ } }, "node_modules/@react-navigation/core": { - "version": "6.4.10", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.10.tgz", - "integrity": "sha512-oYhqxETRHNHKsipm/BtGL0LI43Hs2VSFoWMbBdHK9OqgQPjTVUitslgLcPpo4zApCcmBWoOLX2qPxhsBda644A==", + "version": "6.4.16", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.16.tgz", + "integrity": "sha512-UDTJBsHxnzgFETR3ZxhctP+RWr4SkyeZpbhpkQoIGOuwSCkt1SE0qjU48/u6r6w6XlX8OqVudn1Ab0QFXTHxuQ==", "dependencies": { "@react-navigation/routers": "^6.1.9", "escape-string-regexp": "^4.0.0", "nanoid": "^3.1.23", "query-string": "^7.1.3", "react-is": "^16.13.0", - "use-latest-callback": "^0.1.7" + "use-latest-callback": "^0.1.9" }, "peerDependencies": { "react": "*" @@ -6131,15 +6693,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-navigation/core/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==" - }, "node_modules/@react-navigation/elements": { - "version": "1.3.21", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.21.tgz", - "integrity": "sha512-eyS2C6McNR8ihUoYfc166O1D8VYVh9KIl0UQPI8/ZJVsStlfSTgeEEh+WXge6+7SFPnZ4ewzEJdSAHH+jzcEfg==", + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.30.tgz", + "integrity": "sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ==", "peerDependencies": { "@react-navigation/native": "^6.0.0", "react": "*", @@ -6148,11 +6705,11 @@ } }, "node_modules/@react-navigation/native": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.9.tgz", - "integrity": "sha512-AMuJDpwXE7UlfyhIXaUCCynXmv69Kb8NzKgKJO7v0k0L+u6xUTbt6xvshmJ79vsvaFyaEH9Jg5FMzek5/S5qNw==", + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.17.tgz", + "integrity": "sha512-mer3OvfwWOHoUSMJyLa4vnBH3zpFmCwuzrBPlw7feXklurr/ZDiLjLxUScOot6jLRMz/67GyilEYMmP99LL0RQ==", "dependencies": { - "@react-navigation/core": "^6.4.10", + "@react-navigation/core": "^6.4.16", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.1.23" @@ -6163,11 +6720,11 @@ } }, "node_modules/@react-navigation/native-stack": { - "version": "6.9.17", - "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.17.tgz", - "integrity": "sha512-X8p8aS7JptQq7uZZNFEvfEcPf6tlK4PyVwYDdryRbG98B4bh2wFQYMThxvqa+FGEN7USEuHdv2mF0GhFKfX0ew==", + "version": "6.9.26", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.26.tgz", + "integrity": "sha512-++dueQ+FDj2XkZ902DVrK79ub1vp19nSdAZWxKRgd6+Bc0Niiesua6rMCqymYOVaYh+dagwkA9r00bpt/U5WLw==", "dependencies": { - "@react-navigation/elements": "^1.3.21", + "@react-navigation/elements": "^1.3.30", "warn-once": "^0.1.0" }, "peerDependencies": { @@ -6301,9 +6858,9 @@ } }, "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -6347,15 +6904,32 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/eslint": { - "version": "8.56.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", - "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "version": "8.56.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", + "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", "dev": true, "peer": true, "dependencies": { @@ -6381,6 +6955,33 @@ "dev": true, "peer": true }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, "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", @@ -6407,20 +7008,49 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, "node_modules/@types/node": { - "version": "20.11.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", - "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", "dev": true }, + "node_modules/@types/qs": { + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, "node_modules/@types/react": { "version": "18.2.48", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", @@ -6433,11 +7063,30 @@ } }, "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==", "dev": true }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -6486,9 +7135,9 @@ "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==" }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "peer": true, "dependencies": { @@ -6511,9 +7160,9 @@ "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true, "peer": true }, @@ -6537,16 +7186,16 @@ "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -6577,30 +7226,30 @@ "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -6608,26 +7257,26 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -6636,13 +7285,13 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -6742,15 +7391,13 @@ } }, "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, - "peer": true, + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -6774,34 +7421,15 @@ } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peer": true, "peerDependencies": { - "ajv": "^6.9.1" + "ajv": "^8.8.2" } }, "node_modules/anser": { @@ -6869,6 +7497,17 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/appdirsjs": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", @@ -6892,6 +7531,26 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-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/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -6900,6 +7559,27 @@ "node": ">=8" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -6929,6 +7609,14 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dependencies": { + "retry": "0.13.1" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -6943,9 +7631,12 @@ } }, "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -6962,12 +7653,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.1", "semver": "^6.3.1" }, "peerDependencies": { @@ -6975,38 +7666,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", - "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4", - "core-js-compat": "^3.33.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", - "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", + "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" + "@babel/helper-define-polyfill-provider": "^0.6.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -7046,6 +7722,100 @@ "react-refresh": "0.14.0" } }, + "node_modules/babel-preset-expo/node_modules/@react-native/babel-plugin-codegen": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz", + "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==", + "dependencies": { + "@react-native/codegen": "0.73.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/babel-preset-expo/node_modules/@react-native/babel-preset": { + "version": "0.73.21", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz", + "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.4", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/babel-preset-expo/node_modules/@react-native/codegen": { + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz", + "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==", + "dependencies": { + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/babel-preset-expo/node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/babel-preset-fbjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", @@ -7154,6 +7924,42 @@ "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "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.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/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/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/bplist-creator": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", @@ -7194,9 +8000,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "funding": [ { "type": "opencollective", @@ -7212,8 +8018,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -7296,9 +8102,9 @@ } }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } @@ -7367,19 +8173,19 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/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/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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7427,9 +8233,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001579", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", - "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", + "version": "1.0.30001609", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001609.tgz", + "integrity": "sha512-JFPQs34lHKx1B5t1EpQpWH4c+29zIyn/haGsbpfq3suuV9v56enjFt23zqijxGTMwy1p/4H2tjnQMY+p1WoAyA==", "funding": [ { "type": "opencollective", @@ -7775,6 +8581,14 @@ "node": ">= 0.8.0" } }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -7788,6 +8602,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -7820,6 +8639,25 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "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", @@ -7842,11 +8680,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", - "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", "dependencies": { - "browserslist": "^4.22.2" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -7858,6 +8696,18 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "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/cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -7946,6 +8796,54 @@ "node": ">= 6" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", @@ -8031,16 +8929,19 @@ } }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -8051,6 +8952,22 @@ "node": ">=8" } }, + "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==", + "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/del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -8152,19 +9069,28 @@ } }, "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", + "dependencies": { + "dotenv": "^16.4.4" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/ee-first": { @@ -8173,9 +9099,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.642", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.642.tgz", - "integrity": "sha512-M4+u22ZJGpk4RY7tne6W+APkZhnnhmAH48FNl8iEFK2lEgob+U5rUQsIqQhvAwCXYpfd3H20pHK/ENsCvwTbsA==" + "version": "1.4.735", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.735.tgz", + "integrity": "sha512-pkYpvwg8VyOTQAeBqZ7jsmpCjko1Qc6We1ZtZCjRyYbT5v4AIUKDy5cQTRotQlSSZmMr8jqpEt6JtOj5k7lR7A==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -8199,9 +9125,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "peer": true, "dependencies": { @@ -8221,9 +9147,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", + "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", "bin": { "envinfo": "dist/cli.js" }, @@ -8264,17 +9190,135 @@ "node": ">= 0.8" } }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "dev": true, "peer": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -8408,23 +9452,23 @@ } }, "node_modules/expo": { - "version": "50.0.2", - "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.2.tgz", - "integrity": "sha512-nHb/ACe+vVm8lKkKj3LIWgypQI9oGSe9aNSzeJhT3/sBW/KIrnaSMgjs0WujqEJ85xMiXt7EQlwIFIdtBW82jg==", + "version": "50.0.15", + "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.15.tgz", + "integrity": "sha512-tsyRmMHjA8lPlM7AsqH1smSH8hzmn1+x/vsP+xgbKYJTGtYccdY/wsm6P84VJWeK5peWSVqrWNos+YuPqXKLSQ==", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.17.1", + "@expo/cli": "0.17.8", "@expo/config": "8.5.4", "@expo/config-plugins": "7.8.4", - "@expo/metro-config": "0.17.3", + "@expo/metro-config": "0.17.6", "@expo/vector-icons": "^14.0.0", "babel-preset-expo": "~10.0.1", "expo-asset": "~9.0.2", - "expo-file-system": "~16.0.4", - "expo-font": "~11.10.2", + "expo-file-system": "~16.0.8", + "expo-font": "~11.10.3", "expo-keep-awake": "~12.8.2", - "expo-modules-autolinking": "1.10.2", - "expo-modules-core": "1.11.7", + "expo-modules-autolinking": "1.10.3", + "expo-modules-core": "1.11.13", "fbemitter": "^3.0.0", "whatwg-url-without-unicode": "8.0.0-3" }, @@ -8457,17 +9501,17 @@ } }, "node_modules/expo-file-system": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-16.0.4.tgz", - "integrity": "sha512-H6WIzAi2rS7NaRXemolInejvdW6GllpBDWdQTa+6jPkfKg7PVL+ovzf5Ebb4EQl2O2dAQtF31LLQkps5Rdb92g==", + "version": "16.0.8", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-16.0.8.tgz", + "integrity": "sha512-yDbVT0TUKd7ewQjaY5THum2VRFx2n/biskGhkUmLh3ai21xjIVtaeIzHXyv9ir537eVgt4ReqDNWi7jcXjdUcA==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-font": { - "version": "11.10.2", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.10.2.tgz", - "integrity": "sha512-AE0Q0LiWiVosQ/jlKUPoWoob7p3GwYM2xmLoUkuopO9RYh9NL1hZKHiMKcWBZyDG8Gww1GtBQwh7ZREST8+jjQ==", + "version": "11.10.3", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.10.3.tgz", + "integrity": "sha512-q1Td2zUvmLbCA9GV4OG4nLPw5gJuNY1VrPycsnemN1m8XWTzzs8nyECQQqrcBhgulCgcKZZJJ6U0kC2iuSoQHQ==", "dependencies": { "fontfaceobserver": "^2.1.0" }, @@ -8504,9 +9548,9 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.10.2.tgz", - "integrity": "sha512-OEeoz0+zGx5EJwGtDm9pSywCr+gUCaisZV0mNkK7V3fuRl+EVPBSsI+957JwAc4ZxVps95jy28eLcRRtQ33yVg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.10.3.tgz", + "integrity": "sha512-pn4n2Dl4iRh/zUeiChjRIe1C7EqOw1qhccr85viQV7W6l5vgRpY0osE51ij5LKg/kJmGRcJfs12+PwbdTplbKw==", "dependencies": { "@expo/config": "~8.5.0", "chalk": "^4.1.0", @@ -8617,25 +9661,25 @@ } }, "node_modules/expo-modules-core": { - "version": "1.11.7", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.7.tgz", - "integrity": "sha512-4LFoCaoO36pQCQpge4jLjDSFkO5qpPYl5FMRF6FkwqO3gCpaQu5SUeErZKT4gaon9WHDCWuGVTRtNSjgN5jwVw==", + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.13.tgz", + "integrity": "sha512-2H5qrGUvmLzmJNPDOnovH1Pfk5H/S/V0BifBmOQyDc9aUh9LaDwkqnChZGIXv8ZHDW8JRlUW0QqyWxTggkbw1A==", "dependencies": { "invariant": "^2.2.4" } }, "node_modules/expo-router": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.4.4.tgz", - "integrity": "sha512-72vpjXpVw+KoNMlEl6MGL0mpHom/5M3PmtojgLssLE2ZjLQqIym3qPcx2xYEE6nbo61+Z8ol5BT/Jvj9O2q0rw==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.4.8.tgz", + "integrity": "sha512-fOOAWHH4LSPjPFtIZbApxdTNU8xSS8qKvhZ7PfWNMfx9510J1R1Ce/nwENPzcRLHRuVofDsSAEBfi4kV03fJwg==", "dependencies": { - "@expo/metro-runtime": "3.1.1", + "@expo/metro-runtime": "3.1.3", "@expo/server": "^0.3.0", "@radix-ui/react-slot": "1.0.1", "@react-navigation/bottom-tabs": "~6.5.7", "@react-navigation/native": "~6.1.6", "@react-navigation/native-stack": "~6.9.12", - "expo-splash-screen": "0.26.3", + "expo-splash-screen": "0.26.4", "react-helmet-async": "^1.3.0", "schema-utils": "^4.0.1" }, @@ -8661,70 +9705,105 @@ } } }, - "node_modules/expo-router/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/expo-splash-screen": { + "version": "0.26.4", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.26.4.tgz", + "integrity": "sha512-2DwofTQ0FFQCsvDysm/msENsbyNsJiAJwK3qK/oXeizECAPqD7bK19J4z9kuEbr7ORPX9MLnTQYKl6kmX3keUg==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@expo/prebuild-config": "6.7.4" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "expo": "*" } }, - "node_modules/expo-router/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" + "node_modules/expo-status-bar": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.11.1.tgz", + "integrity": "sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg==" + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.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" }, - "peerDependencies": { - "ajv": "^8.8.2" + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/expo-router/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/expo-router/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "node_modules/express/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/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "ms": "2.0.0" } }, - "node_modules/expo-splash-screen": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.26.3.tgz", - "integrity": "sha512-zV+2J/stwdirINrcs/d0BTVjKGUoZyN2j5vTp4H4dwWWU/gA0yAkzzh5eGHySg+yTqMSr7sPJkiyZh2Hek2vBQ==", + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { - "@expo/prebuild-config": "6.7.3" + "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" }, - "peerDependencies": { - "expo": "*" + "engines": { + "node": ">= 0.8" } }, - "node_modules/expo-status-bar": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.11.1.tgz", - "integrity": "sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg==" + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -8759,9 +9838,9 @@ "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" }, "node_modules/fast-xml-parser": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.3.tgz", - "integrity": "sha512-coV/D1MhrShMvU6D0I+VAK3umz6hUaxxhL0yp/9RjfiYUfAv14rDhGQL+PLForhMdr0wq3PiV07WtkkNjJjNHg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", + "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", "funding": [ { "type": "github", @@ -8780,9 +9859,9 @@ } }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dependencies": { "reusify": "^1.0.4" } @@ -8876,6 +9955,25 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", @@ -8918,9 +10016,9 @@ "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" }, "node_modules/flow-parser": { - "version": "0.206.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", - "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "version": "0.233.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.233.0.tgz", + "integrity": "sha512-E/mv51GYJfLuRX6fZnw4M52gBxYa8pkHUOgNEZOcQK2RTXS8YXeU5rlalkTcY99UpwbeNVCSUFKaavpOksi/pQ==", "engines": { "node": ">=0.4.0" } @@ -8939,9 +10037,9 @@ } }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "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", @@ -8951,6 +10049,14 @@ "node": ">= 6" } }, + "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/freeport-async": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", @@ -9017,6 +10123,31 @@ "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==", + "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==", + "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", @@ -9034,15 +10165,19 @@ } }, "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==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9066,6 +10201,22 @@ "node": ">=6" } }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/getenv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", @@ -9117,6 +10268,20 @@ "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==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -9153,11 +10318,11 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphql": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", - "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", "engines": { - "node": ">= 10.x" + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, "node_modules/graphql-tag": { @@ -9174,6 +10339,14 @@ "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "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==", + "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", @@ -9183,20 +10356,20 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -9216,11 +10389,11 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -9230,9 +10403,9 @@ } }, "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==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -9241,16 +10414,16 @@ } }, "node_modules/hermes-estree": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", - "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==" + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" }, "node_modules/hermes-parser": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", - "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", "dependencies": { - "hermes-estree": "0.15.0" + "hermes-estree": "0.20.1" } }, "node_modules/hermes-profile-transformer": { @@ -9286,11 +10459,6 @@ "node": ">=10" } }, - "node_modules/hosted-git-info/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/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -9306,14 +10474,6 @@ "node": ">= 0.8" } }, - "node_modules/http-errors/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/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -9339,6 +10499,17 @@ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" }, + "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/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -9359,9 +10530,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "engines": { "node": ">= 4" } @@ -9461,6 +10632,19 @@ "node": ">=6" } }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -9470,9 +10654,9 @@ } }, "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", + "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" }, "node_modules/ip-regex": { "version": "2.1.0", @@ -9505,11 +10689,52 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "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-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -9537,6 +10762,34 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", @@ -9638,6 +10891,17 @@ "node": ">=0.10.0" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "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", @@ -9646,6 +10910,20 @@ "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==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -9673,6 +10951,35 @@ "node": ">=0.10.0" } }, + "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==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -9681,12 +10988,40 @@ "node": ">=0.10.0" } }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "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==", + "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==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -9717,6 +11052,17 @@ "node": ">=0.10.0" } }, + "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==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -9964,6 +11310,17 @@ "node": ">=8" } }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10126,13 +11483,13 @@ "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==" }, "node_modules/joi": { - "version": "17.12.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.0.tgz", - "integrity": "sha512-HSLsmSmXz+PV9PYoi3p7cgIbj06WnEBNT28n+bbBNcPZXZFqCzzvGqpTBPujx/Z0nh1+KNQPDrNgdmQ8dq0qYw==", + "version": "17.12.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.3.tgz", + "integrity": "sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g==", "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.4", + "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } @@ -10317,11 +11674,9 @@ } }, "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, - "peer": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json5": { "version": "2.2.3", @@ -10604,6 +11959,11 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, "node_modules/lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", @@ -10791,6 +12151,23 @@ "node": ">=6" } }, + "node_modules/loglevel": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.1.tgz", + "integrity": "sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -10803,11 +12180,11 @@ } }, "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==", - "dependencies": { - "yallist": "^3.0.2" + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" } }, "node_modules/make-dir": { @@ -10872,6 +12249,14 @@ "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==" }, + "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/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", @@ -10882,6 +12267,11 @@ "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==" }, + "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", @@ -10895,10 +12285,18 @@ "node": ">= 8" } }, + "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/metro": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.4.tgz", - "integrity": "sha512-fBhZKU1z44KdhS6sH6Sk97595A66EOniH+jI9OjKDu6piH1SIEqQgdWAuWfJJMzgBHcJceRRvJY1zzsOT/Zx0g==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.8.tgz", + "integrity": "sha512-in7S0W11mg+RNmcXw+2d9S3zBGmCARDxIwoXJAmLUQOQoYsRP3cpGzyJtc7WOw8+FXfpgXvceD0u+PZIHXEL7g==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -10915,25 +12313,24 @@ "denodeify": "^1.2.1", "error-stack-parser": "^2.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.18.2", + "hermes-parser": "0.20.1", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.6.3", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.4", - "metro-cache": "0.80.4", - "metro-cache-key": "0.80.4", - "metro-config": "0.80.4", - "metro-core": "0.80.4", - "metro-file-map": "0.80.4", - "metro-minify-terser": "0.80.4", - "metro-resolver": "0.80.4", - "metro-runtime": "0.80.4", - "metro-source-map": "0.80.4", - "metro-symbolicate": "0.80.4", - "metro-transform-plugins": "0.80.4", - "metro-transform-worker": "0.80.4", + "metro-babel-transformer": "0.80.8", + "metro-cache": "0.80.8", + "metro-cache-key": "0.80.8", + "metro-config": "0.80.8", + "metro-core": "0.80.8", + "metro-file-map": "0.80.8", + "metro-resolver": "0.80.8", + "metro-runtime": "0.80.8", + "metro-source-map": "0.80.8", + "metro-symbolicate": "0.80.8", + "metro-transform-plugins": "0.80.8", + "metro-transform-worker": "0.80.8", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -10953,37 +12350,24 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.4.tgz", - "integrity": "sha512-QP1kjYLap4O3w9tA4bYO8iyuNpR65If5Z97Ku37O4CwQPAwQaTmg67g4OdABS4BVK10fsxdExKp+fC37XirPow==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.8.tgz", + "integrity": "sha512-TTzNwRZb2xxyv4J/+yqgtDAP2qVqH3sahsnFu6Xv4SkLqzrivtlnyUbaeTdJ9JjtADJUEjCbgbFgUVafrXdR9Q==", "dependencies": { "@babel/core": "^7.20.0", - "hermes-parser": "0.18.2", + "hermes-parser": "0.20.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">=18" } }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz", - "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==" - }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz", - "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==", - "dependencies": { - "hermes-estree": "0.18.2" - } - }, "node_modules/metro-cache": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.4.tgz", - "integrity": "sha512-Dj+GoYt4PvsnnE4GdXhqV9PxEF7GPilY5NPeoTgptWZLlaDuTT2+cJQoDOOit1SfRjnF0zqABtVvB6GGBWdtaQ==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.8.tgz", + "integrity": "sha512-5svz+89wSyLo7BxdiPDlwDTgcB9kwhNMfNhiBZPNQQs1vLFXxOkILwQiV5F2EwYT9DEr6OPZ0hnJkZfRQ8lDYQ==", "dependencies": { - "metro-core": "0.80.4", + "metro-core": "0.80.8", "rimraf": "^3.0.2" }, "engines": { @@ -10991,9 +12375,9 @@ } }, "node_modules/metro-cache-key": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.4.tgz", - "integrity": "sha512-okOOSRFou7Mxaaigoi+KxdFIU/ZJtvDCC6l8BYKsdMx86JDlVdvtIgFU4tFrY1yEkv0wnn7WH0X3xSz4mHKwoQ==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.8.tgz", + "integrity": "sha512-qWKzxrLsRQK5m3oH8ePecqCc+7PEhR03cJE6Z6AxAj0idi99dHOSitTmY0dclXVB9vP2tQIAE8uTd8xkYGk8fA==", "engines": { "node": ">=18" } @@ -11013,38 +12397,38 @@ } }, "node_modules/metro-config": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.4.tgz", - "integrity": "sha512-X3/3tleFYB4SdoxXg8uJ+qc8eITKiLnXs3Ev6pihM4jIM5JD89riwUsSLKVsovfZs8ETqKtjevzfe6jQ2O5NtQ==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.8.tgz", + "integrity": "sha512-VGQJpfJawtwRzGzGXVUoohpIkB0iPom4DmSbAppKfumdhtLA8uVeEPp2GM61kL9hRvdbMhdWA7T+hZFDlo4mJA==", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", "jest-validate": "^29.6.3", - "metro": "0.80.4", - "metro-cache": "0.80.4", - "metro-core": "0.80.4", - "metro-runtime": "0.80.4" + "metro": "0.80.8", + "metro-cache": "0.80.8", + "metro-core": "0.80.8", + "metro-runtime": "0.80.8" }, "engines": { "node": ">=18" } }, "node_modules/metro-core": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.4.tgz", - "integrity": "sha512-HRb+zydAhI7QyLpK4D6ARZsKjaBwEn+kCrJEjnVFij8wjJxIIHVilgNCETgg9NWvKJFUoZZCG7ewHkxQ9Qpd8Q==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.8.tgz", + "integrity": "sha512-g6lud55TXeISRTleW6SHuPFZHtYrpwNqbyFIVd9j9Ofrb5IReiHp9Zl8xkAfZQp8v6ZVgyXD7c130QTsCz+vBw==", "dependencies": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.4" + "metro-resolver": "0.80.8" }, "engines": { "node": ">=18" } }, "node_modules/metro-file-map": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.4.tgz", - "integrity": "sha512-EvBC31JI5vsyebeQ8PWpGENuAWy2Ka7sLqEW7OInW+aLVWmBq02h0BNl33xRgAMz0gwvMf2nKie82hmefYF6ew==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.8.tgz", + "integrity": "sha512-eQXMFM9ogTfDs2POq7DT2dnG7rayZcoEgRbHPXvhUWkVwiKkro2ngcBE++ck/7A36Cj5Ljo79SOkYwHaWUDYDw==", "dependencies": { "anymatch": "^3.0.3", "debug": "^2.2.0", @@ -11078,9 +12462,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/metro-minify-terser": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.4.tgz", - "integrity": "sha512-cuxfRZWDWGKjh+Z6t4KJkrvmV4JUKXfvQuAX7Pa7U0Mf1YJdLtoGQ5iVOu/6MkfYGXbppqGk2qmFECrRGRh0cA==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.8.tgz", + "integrity": "sha512-y8sUFjVvdeUIINDuW1sejnIjkZfEF+7SmQo0EIpYbWmwh+kq/WMj74yVaBWuqNjirmUp1YNfi3alT67wlbBWBQ==", "dependencies": { "terser": "^5.15.0" }, @@ -11089,17 +12473,17 @@ } }, "node_modules/metro-resolver": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.4.tgz", - "integrity": "sha512-PCiVWN+d3gtWlobf8jPypwKx9T1QrZmhLJAyqIWLoOsZbpSfj1dn5h0ajCr8rYi9LNzIHm58GGYJK8VFHNn8Cw==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.8.tgz", + "integrity": "sha512-JdtoJkP27GGoZ2HJlEsxs+zO7jnDUCRrmwXJozTlIuzLHMRrxgIRRby9fTCbMhaxq+iA9c+wzm3iFb4NhPmLbQ==", "engines": { "node": ">=18" } }, "node_modules/metro-runtime": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.4.tgz", - "integrity": "sha512-CWIvf0zmL4jKHSj81zjUAbEwjTqFQmETI0NIQvN4JNwTSHiz50WPOuHnUUcmwM6Dye/ta6KNTELnERp0tKEYYg==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.8.tgz", + "integrity": "sha512-2oScjfv6Yb79PelU1+p8SVrCMW9ZjgEiipxq7jMRn8mbbtWzyv3g8Mkwr+KwOoDFI/61hYPUbY8cUnu278+x1g==", "dependencies": { "@babel/runtime": "^7.0.0" }, @@ -11108,16 +12492,16 @@ } }, "node_modules/metro-source-map": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.4.tgz", - "integrity": "sha512-x+0By55ml6IcGqY9x9HE0hyU0S+uDssrTQ0bPvuydG+iKCX85DzGnlT8k0Vs+EYgZl3KMWcvQ9TpGHW4LRL4GQ==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.8.tgz", + "integrity": "sha512-+OVISBkPNxjD4eEKhblRpBf463nTMk3KMEeYS8Z4xM/z3qujGJGSsWUGRtH27+c6zElaSGtZFiDMshEb8mMKQg==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.80.4", + "metro-symbolicate": "0.80.8", "nullthrows": "^1.1.1", - "ob1": "0.80.4", + "ob1": "0.80.8", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -11134,12 +12518,12 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.4.tgz", - "integrity": "sha512-UmtH96G5TrcAgbIqdE4xA8MBS9fbZW9Pln+n7eJ0tQ0Fw0M/jzdpiZzhx3bIB2zzqbdm6Nv/kB1+aEo0WvXdyg==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.8.tgz", + "integrity": "sha512-nwhYySk79jQhwjL9QmOUo4wS+/0Au9joEryDWw7uj4kz2yvw1uBjwmlql3BprQCBzRdB3fcqOP8kO8Es+vE31g==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.80.4", + "metro-source-map": "0.80.8", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -11161,9 +12545,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.4.tgz", - "integrity": "sha512-cvmTLBA9ET64h+tgHt6prHlvOq98zBA1Glc9+wLZihPJo+Qmu9i3nQ1g4O+4aUnHivDlp+4C00BMNC+aC/buRQ==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.8.tgz", + "integrity": "sha512-sSu8VPL9Od7w98MftCOkQ1UDeySWbsIAS5I54rW22BVpPnI3fQ42srvqMLaJUQPjLehUanq8St6OMBCBgH/UWw==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -11176,20 +12560,21 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.4.tgz", - "integrity": "sha512-hLCrlxXyyaV64XQNSiyY/0jMVvGXrgXMkpJ4KwH2t4clxbxyt6TBW+4TqmgAeU9WGclY0OuQ0HzfvIZiONcUOw==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.8.tgz", + "integrity": "sha512-+4FG3TQk3BTbNqGkFb2uCaxYTfsbuFOCKMMURbwu0ehCP8ZJuTUramkaNZoATS49NSAkRgUltgmBa4YaKZ5mqw==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "metro": "0.80.4", - "metro-babel-transformer": "0.80.4", - "metro-cache": "0.80.4", - "metro-cache-key": "0.80.4", - "metro-source-map": "0.80.4", - "metro-transform-plugins": "0.80.4", + "metro": "0.80.8", + "metro-babel-transformer": "0.80.8", + "metro-cache": "0.80.8", + "metro-cache-key": "0.80.8", + "metro-minify-terser": "0.80.8", + "metro-source-map": "0.80.8", + "metro-transform-plugins": "0.80.8", "nullthrows": "^1.1.1" }, "engines": { @@ -11262,19 +12647,6 @@ "node": ">=8" } }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz", - "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==" - }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz", - "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==", - "dependencies": { - "hermes-estree": "0.18.2" - } - }, "node_modules/metro/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -11356,6 +12728,17 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -11457,11 +12840,6 @@ "node": ">=8" } }, - "node_modules/minipass/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/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -11470,14 +12848,9 @@ "minipass": "^3.0.0", "yallist": "^4.0.0" }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "engines": { + "node": ">= 8" + } }, "node_modules/mkdirp": { "version": "0.5.6", @@ -11794,9 +13167,9 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, "node_modules/ob1": { - "version": "0.80.4", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.4.tgz", - "integrity": "sha512-Lku8OBpq+fhF1ZdKUjbPnTNeqG+3OL0psGAEVJ8zcUiCB5/DPGR/rm3kLcjKDylzC9Rfv540/7I08+oImzfrhw==", + "version": "0.80.8", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.8.tgz", + "integrity": "sha512-QHJQk/lXMmAW8I7AIM3in1MSlwe1umR72Chhi8B7Xnq6mzjhBKkA6Fy/zAhQnGkA4S912EPCEvTij5yh+EQTAA==", "engines": { "node": ">=18" } @@ -11809,10 +13182,43 @@ "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/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "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" }, @@ -12085,6 +13491,11 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "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/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -12099,11 +13510,11 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -12229,10 +13640,18 @@ "node": ">=4.0.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -12250,7 +13669,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -12362,6 +13781,11 @@ "node": ">=8" } }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, "node_modules/pretty-format/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12421,10 +13845,17 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types/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==" + "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/pump": { "version": "3.0.0", @@ -12451,6 +13882,20 @@ "qrcode-terminal": "bin/qrcode-terminal.js" } }, + "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/query-string": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", @@ -12513,6 +13958,20 @@ "node": ">= 0.6" } }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "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/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -12585,9 +14044,9 @@ "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, "node_modules/react-freeze": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.3.tgz", - "integrity": "sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz", + "integrity": "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==", "engines": { "node": ">=10" }, @@ -12612,9 +14071,9 @@ } }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native": { "version": "0.73.2", @@ -12715,6 +14174,34 @@ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, + "node_modules/react-native/node_modules/@react-native/codegen": { + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.2.tgz", + "integrity": "sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==", + "dependencies": { + "@babel/parser": "^7.20.0", + "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/react-native/node_modules/flow-parser": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/react-native/node_modules/promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", @@ -12778,6 +14265,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/readline": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", @@ -12834,6 +14326,23 @@ "@babel/runtime": "^7.8.4" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -12869,6 +14378,11 @@ "jsesc": "bin/jsesc" } }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + }, "node_modules/remove-trailing-slash": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", @@ -12960,6 +14474,14 @@ "node": ">=4" } }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -13002,10 +14524,46 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "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/safe-json-stringify": { "version": "1.2.0", @@ -13013,6 +14571,27 @@ "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", "optional": true }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "node_modules/sax": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", @@ -13027,18 +14606,17 @@ } }, "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "peer": true, + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", @@ -13105,25 +14683,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/send/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/send/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/serialize-error": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", @@ -13167,15 +14726,30 @@ "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" }, "node_modules/set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -13191,6 +14765,18 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -13234,6 +14820,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -13316,9 +14919,9 @@ } }, "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==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -13419,11 +15022,11 @@ } }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/stream-buffers": { @@ -13463,6 +15066,11 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -13484,15 +15092,61 @@ "node": ">=8" } }, - "node_modules/string-width/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==", + "node_modules/string-width/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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dependencies": { - "ansi-regex": "^5.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { @@ -13692,9 +15346,9 @@ } }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -13726,11 +15380,6 @@ "node": ">=10" } }, - "node_modules/tar/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/temp": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", @@ -13817,9 +15466,9 @@ } }, "node_modules/terser": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", - "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz", + "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -13868,6 +15517,33 @@ } } }, + "node_modules/terser-webpack-plugin/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, + "peer": 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/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/terser-webpack-plugin/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -13893,6 +15569,32 @@ "node": ">= 10.13.0" } }, + "node_modules/terser-webpack-plugin/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, + "peer": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -14006,9 +15708,14 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/traverse": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", - "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", + "integrity": "sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==", + "dependencies": { + "gopd": "^1.0.1", + "typedarray.prototype.slice": "^1.0.3", + "which-typed-array": "^1.1.15" + }, "engines": { "node": ">= 0.4" }, @@ -14045,6 +15752,106 @@ "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/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", + "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-offset": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", @@ -14080,6 +15887,20 @@ "node": "*" } }, + "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==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -14156,6 +15977,28 @@ "node": ">= 4.0.0" } }, + "node_modules/unixify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", + "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -14240,9 +16083,13 @@ } }, "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==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -14260,6 +16107,14 @@ "builtins": "^1.0.3" } }, + "node_modules/value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "engines": { + "node": ">=12" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -14318,9 +16173,9 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", - "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "engines": { "node": ">= 8" } @@ -14331,35 +16186,35 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", - "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -14388,11 +16243,86 @@ "node": ">=10.13.0" } }, + "node_modules/webpack/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, + "peer": 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/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/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, + "peer": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/whatwg-fetch": { "version": "3.6.20", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -14434,21 +16364,36 @@ "which": "bin/which" } }, + "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==", + "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-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "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==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -14619,14 +16564,17 @@ } }, "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } diff --git a/package.json b/package.json index 5bb894c..714fbc8 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,9 @@ "features/*", "packages/*" ], + "overrides": { + "graphql": "16.8.1" + }, "scripts": { "dev": "npm run dev:web & npm run dev:mobile", "dev:web": "npm -w @app/next run dev", From 328b1927fb7ad15e819b1274a5c9a76367700c97 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 12 Apr 2024 22:41:25 +0200 Subject: [PATCH 009/126] feat: Add graphql.tada for automagic GraphQL typesafety --- .vscode/settings.json | 4 + .../app-core/fetchers/useHealthCheckQuery.ts | 33 ++++++++ features/app-core/graphql-env.d.ts | 33 ++++++++ features/app-core/package.json | 2 + features/app-core/tsconfig.json | 9 ++- package-lock.json | 76 ++++++++++++++++++- package.json | 3 + 7 files changed, 157 insertions(+), 3 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 features/app-core/fetchers/useHealthCheckQuery.ts create mode 100644 features/app-core/graphql-env.d.ts diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2946048 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true +} diff --git a/features/app-core/fetchers/useHealthCheckQuery.ts b/features/app-core/fetchers/useHealthCheckQuery.ts new file mode 100644 index 0000000..0d5438d --- /dev/null +++ b/features/app-core/fetchers/useHealthCheckQuery.ts @@ -0,0 +1,33 @@ +import { graphql } from 'gql.tada' + +/* --- Query ----------------------------------------------------------------------------------- */ + +export const healthCheckQuery = graphql(` + query healthCheck { + healthCheck { + echo + status + alive + kicking + now + aliveTime + aliveSince + serverTimezone + requestHost + requestProtocol + requestURL + baseURL + apiURL + port + debugPort + nodeVersion + v8Version + systemArch + systemPlatform + systemRelease + systemFreeMemory + systemTotalMemory + systemLoadAverage + } + } +`) diff --git a/features/app-core/graphql-env.d.ts b/features/app-core/graphql-env.d.ts new file mode 100644 index 0000000..5a98d77 --- /dev/null +++ b/features/app-core/graphql-env.d.ts @@ -0,0 +1,33 @@ +/* eslint-disable */ +/* prettier-ignore */ + +/** An IntrospectionQuery representation of your schema. + * + * @remarks + * This is an introspection of your schema saved as a file by GraphQLSP. + * It will automatically be used by `gql.tada` to infer the types of your GraphQL documents. + * If you need to reuse this data or update your `scalars`, update `tadaOutputLocation` to + * instead save to a .ts instead of a .d.ts file. + */ +export type introspection = { + query: 'Query'; + mutation: never; + subscription: never; + types: { + 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'healthCheck': { name: 'healthCheck'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'HealthCheckData'; ofType: null; }; } }; }; }; + 'HealthCheckArgs': { kind: 'INPUT_OBJECT'; name: 'HealthCheckArgs'; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; + 'String': unknown; + 'HealthCheckData': { kind: 'OBJECT'; name: 'HealthCheckData'; fields: { 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; }; }; + 'Boolean': unknown; + 'Float': unknown; + 'Int': unknown; + }; +}; + +import * as gqlTada from 'gql.tada'; + +declare module 'gql.tada' { + interface setupSchema { + introspection: introspection + } +} \ No newline at end of file diff --git a/features/app-core/package.json b/features/app-core/package.json index 5fb761b..83bdd8e 100644 --- a/features/app-core/package.json +++ b/features/app-core/package.json @@ -6,9 +6,11 @@ "@apollo/server": "^4.10.2", "@as-integrations/next": "^3.0.0", "@graphql-tools/load-files": "^7.0.0", + "gql.tada": "^1.4.3", "graphql-tag": "^2.12.6" }, "devDependencies": { + "@0no-co/graphqlsp": "^1.9.1", "typescript": "5.3.3" }, "scripts": {} diff --git a/features/app-core/tsconfig.json b/features/app-core/tsconfig.json index 6b65349..023446e 100644 --- a/features/app-core/tsconfig.json +++ b/features/app-core/tsconfig.json @@ -15,7 +15,14 @@ "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve" + "jsx": "preserve", + "plugins": [ + { + "name": "@0no-co/graphqlsp", + "schema": "http://localhost:3000/api/graphql", + "tadaOutputLocation": "./graphql-env.d.ts" + } + ] }, "include": [ "next-env.d.ts", diff --git a/package-lock.json b/package-lock.json index 334280c..a8254d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,10 @@ "apps/*", "features/*", "packages/*" - ] + ], + "devDependencies": { + "@0no-co/graphqlsp": "^1.9.1" + } }, "apps/expo": { "name": "@app/expo", @@ -53,12 +56,41 @@ "@apollo/server": "^4.10.2", "@as-integrations/next": "^3.0.0", "@graphql-tools/load-files": "^7.0.0", + "gql.tada": "^1.4.3", "graphql-tag": "^2.12.6" }, "devDependencies": { + "@0no-co/graphqlsp": "^1.9.1", "typescript": "5.3.3" } }, + "node_modules/@0no-co/graphql.web": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.6.tgz", + "integrity": "sha512-KZ7TnwMcQJcFgzjoY623AVxtlDQonkqp3rSz0wb15/jHPyU1v5gynUibEpuutDeoyGJ5Tp+FwxjGyDGDwq3vIw==", + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "graphql": { + "optional": true + } + } + }, + "node_modules/@0no-co/graphqlsp": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.9.1.tgz", + "integrity": "sha512-3mLLCNponLK84hVbBUZIXZhw1nvmWblRwFTJE7WCs312iqlCdLW+SZEt+HfhEgM03XhN0D0gQB/8KnZHKs9qwg==", + "dev": true, + "dependencies": { + "@gql.tada/internal": "^0.1.2", + "graphql": "^16.8.1", + "node-fetch": "^2.0.0" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -3717,6 +3749,30 @@ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" }, + "node_modules/@gql.tada/cli-utils": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@gql.tada/cli-utils/-/cli-utils-0.3.3.tgz", + "integrity": "sha512-Typugq2JpCevTsQRHiWiCExagbP3XGfr/U/I0eguGtvIvKFLG+giqIPV5vvjq+B65SOU0EAgQTK7D9SL9tRc5g==", + "dependencies": { + "@gql.tada/internal": "0.1.3", + "graphql": "^16.8.1" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, + "node_modules/@gql.tada/internal": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-0.1.3.tgz", + "integrity": "sha512-wIvykBId7O0gaizmSl5n5AhbQsgJVLTUsFBm3RsfQ9dVfpmT+Fhy2yHX+yNgiVECg2EimXMhs4ltcE4EuZ2WOA==", + "dependencies": { + "@0no-co/graphql.web": "^1.0.5" + }, + "peerDependencies": { + "graphql": "^16.8.1", + "typescript": "^5.0.0" + } + }, "node_modules/@graphql-tools/load-files": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@graphql-tools/load-files/-/load-files-7.0.0.tgz", @@ -10312,6 +10368,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gql.tada": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.4.3.tgz", + "integrity": "sha512-ZnDQxHSU1cqqndtbHa3+wwsnur9PMuU1Ma6KcEdGnu0xLIe1lYchlPkXJIZxU3CDimJzceN6WRytx36Kp8z4Dg==", + "dependencies": { + "@0no-co/graphql.web": "^1.0.5", + "@gql.tada/cli-utils": "0.3.3", + "@gql.tada/internal": "0.1.3" + }, + "bin": { + "gql-tada": "bin/cli.js", + "gql.tada": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -15856,7 +15929,6 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index 714fbc8..6ce6bfc 100644 --- a/package.json +++ b/package.json @@ -20,5 +20,8 @@ "build": "npm -w @app/next run build", "add-dependencies": "npm -w @app/expo run add-dependencies", "env:local": "npm -w @app/next run env:local & npm -w @app/expo run env:local" + }, + "devDependencies": { + "@0no-co/graphqlsp": "^1.9.1" } } From df0de061f1edc0cc3ff66d67ad630527a1315ca2 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Mon, 15 Apr 2024 00:51:28 +0200 Subject: [PATCH 010/126] feat: Add buildSchema() script & isomorphic graphqlQuery() helper --- apps/expo/tsconfig.json | 6 +- apps/next/tsconfig.json | 3 +- .../app-core/fetchers/useHealthCheckQuery.ts | 33 ---- features/app-core/graphql-env.d.ts | 2 +- features/app-core/graphql/buildSchema.ts | 36 +++++ features/app-core/graphql/graphqlQuery.ts | 35 +++++ .../app-core/graphql/graphqlQuery.types.ts | 7 + features/app-core/graphql/graphqlQuery.web.ts | 60 ++++++++ features/app-core/graphql/schema.graphql | 39 +++++ features/app-core/graphql/schema.ts | 22 +-- features/app-core/graphql/typeDefs.ts | 39 +++++ features/app-core/package.json | 6 +- .../app-core/resolvers/healthCheck.graphql | 2 + .../app-core/resolvers/healthCheck.query.ts | 49 ++++++ features/app-core/screens/HomeScreen.tsx | 25 ++++ features/app-core/tsconfig.json | 2 +- package-lock.json | 141 ++++++++++++++++++ package.json | 2 +- 18 files changed, 452 insertions(+), 57 deletions(-) delete mode 100644 features/app-core/fetchers/useHealthCheckQuery.ts create mode 100644 features/app-core/graphql/buildSchema.ts create mode 100644 features/app-core/graphql/graphqlQuery.ts create mode 100644 features/app-core/graphql/graphqlQuery.types.ts create mode 100644 features/app-core/graphql/graphqlQuery.web.ts create mode 100644 features/app-core/graphql/schema.graphql create mode 100644 features/app-core/graphql/typeDefs.ts create mode 100644 features/app-core/resolvers/healthCheck.query.ts diff --git a/apps/expo/tsconfig.json b/apps/expo/tsconfig.json index 2fbb403..fcf18a6 100644 --- a/apps/expo/tsconfig.json +++ b/apps/expo/tsconfig.json @@ -1,5 +1,9 @@ { "extends": "@app/core/tsconfig", - "include": ["**/*.ts", "**/*.tsx"], + "include": [ + "**/*.ts", + "**/*.tsx", + "../../features/app-core/graphql-env.d.ts" + ], "exclude": ["node_modules"] } diff --git a/apps/next/tsconfig.json b/apps/next/tsconfig.json index 09c4d75..e833924 100644 --- a/apps/next/tsconfig.json +++ b/apps/next/tsconfig.json @@ -3,7 +3,8 @@ "include": [ "**/*.ts", "**/*.tsx", - ".next/types/**/*.ts" + ".next/types/**/*.ts", + "../../features/app-core/graphql-env.d.ts" ], "exclude": [ "node_modules" diff --git a/features/app-core/fetchers/useHealthCheckQuery.ts b/features/app-core/fetchers/useHealthCheckQuery.ts deleted file mode 100644 index 0d5438d..0000000 --- a/features/app-core/fetchers/useHealthCheckQuery.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { graphql } from 'gql.tada' - -/* --- Query ----------------------------------------------------------------------------------- */ - -export const healthCheckQuery = graphql(` - query healthCheck { - healthCheck { - echo - status - alive - kicking - now - aliveTime - aliveSince - serverTimezone - requestHost - requestProtocol - requestURL - baseURL - apiURL - port - debugPort - nodeVersion - v8Version - systemArch - systemPlatform - systemRelease - systemFreeMemory - systemTotalMemory - systemLoadAverage - } - } -`) diff --git a/features/app-core/graphql-env.d.ts b/features/app-core/graphql-env.d.ts index 5a98d77..223020a 100644 --- a/features/app-core/graphql-env.d.ts +++ b/features/app-core/graphql-env.d.ts @@ -17,7 +17,7 @@ export type introspection = { 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'healthCheck': { name: 'healthCheck'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'HealthCheckData'; ofType: null; }; } }; }; }; 'HealthCheckArgs': { kind: 'INPUT_OBJECT'; name: 'HealthCheckArgs'; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; 'String': unknown; - 'HealthCheckData': { kind: 'OBJECT'; name: 'HealthCheckData'; fields: { 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; }; }; + 'HealthCheckData': { kind: 'OBJECT'; name: 'HealthCheckData'; fields: { 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'backendURL': { name: 'backendURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'graphURL': { name: 'graphURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; }; }; 'Boolean': unknown; 'Float': unknown; 'Int': unknown; diff --git a/features/app-core/graphql/buildSchema.ts b/features/app-core/graphql/buildSchema.ts new file mode 100644 index 0000000..f408f9f --- /dev/null +++ b/features/app-core/graphql/buildSchema.ts @@ -0,0 +1,36 @@ +#!/usr/bin/env node --experimental-specifier-resolution=node +import path from 'path' +import fs from 'fs' +import { fileURLToPath } from 'node:url' +import { loadFilesSync } from '@graphql-tools/load-files' +import { mergeTypeDefs } from '@graphql-tools/merge' +import { print } from 'graphql' + +/* --- Constants ------------------------------------------------------------------------------- */ + +const currentDir = path.dirname(fileURLToPath(import.meta.url)) +const schemaPath = path.resolve(currentDir, 'schema.graphql') +const typeDefsPath = path.resolve(currentDir, 'typeDefs.ts') + +/** --- createSchemaDefinitions() -------------------------------------------------------------- */ +/** -i- Combine all custom and other (e.g. generated) graphql schema definitions */ +export const createSchemaDefinitions = () => { + const rootDir = path.resolve(currentDir, '../../..') + const schemaPathPattern = `${rootDir}/(features|packages)/**/!(schema).graphql` + const customGraphQLDefinitions = loadFilesSync(schemaPathPattern) + return mergeTypeDefs([ + ...customGraphQLDefinitions, + /* other typedefs? */ + ]) +} + +/* --- Script ---------------------------------------------------------------------------------- */ + +const buildSchemaDefinitions = async () => { + const schemaDefinitions = createSchemaDefinitions() + const typeDefsString = print(schemaDefinitions) + fs.writeFileSync(schemaPath, typeDefsString) + fs.writeFileSync(typeDefsPath, `export const typeDefs = \`${typeDefsString}\``) +} + +buildSchemaDefinitions() diff --git a/features/app-core/graphql/graphqlQuery.ts b/features/app-core/graphql/graphqlQuery.ts new file mode 100644 index 0000000..0ce4f57 --- /dev/null +++ b/features/app-core/graphql/graphqlQuery.ts @@ -0,0 +1,35 @@ +import { print } from 'graphql/language/printer' +import type { TadaDocumentNode, ResultOf } from 'gql.tada' +import type { QueryConfig } from './graphqlQuery.types' +import { appConfig } from '../appConfig' + +/** --- graphqlQuery --------------------------------------------------------------------------- */ +/** -i- Isomorphic graphql request, uses the graphql endpoint in browser & mobile, but the executable schema serverside */ +export const graphqlQuery = async >(query: T, config?: QueryConfig) => { + // Config + const { variables, headers, graphqlEndpoint } = config || {} + + // Vars + const queryString = print(query) + + // -- Native: Execute query with fetch -- + + try { + const { graphURL } = appConfig + const fetchURL = graphqlEndpoint || graphURL + const res = await fetch(fetchURL, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...headers, + }, + body: JSON.stringify({ query: queryString, variables }), + }) + const { data, errors } = await res.json() + if (errors) throw new Error(errors[0].message) + return data as R + } catch (error) { + throw new Error(error) + } +} + diff --git a/features/app-core/graphql/graphqlQuery.types.ts b/features/app-core/graphql/graphqlQuery.types.ts new file mode 100644 index 0000000..955fe9e --- /dev/null +++ b/features/app-core/graphql/graphqlQuery.types.ts @@ -0,0 +1,7 @@ +import type { TadaDocumentNode, VariablesOf } from 'gql.tada' + +export type QueryConfig = { + variables?: VariablesOf + headers?: Record + graphqlEndpoint?: string +} diff --git a/features/app-core/graphql/graphqlQuery.web.ts b/features/app-core/graphql/graphqlQuery.web.ts new file mode 100644 index 0000000..1bbf29e --- /dev/null +++ b/features/app-core/graphql/graphqlQuery.web.ts @@ -0,0 +1,60 @@ +import { print } from 'graphql/language/printer' +import type { TadaDocumentNode, ResultOf } from 'gql.tada' +import type { QueryConfig } from './graphqlQuery.types' +import { appConfig } from '../appConfig' + +/** --- graphqlQuery --------------------------------------------------------------------------- */ +/** -i- Isomorphic graphql request, uses the graphql endpoint in browser & mobile, but the executable schema serverside */ +export const graphqlQuery = async >(query: T, config?: QueryConfig) => { + // Config + const { variables, headers, graphqlEndpoint } = config || {} + + // Flags + const isServer = typeof window === 'undefined' + + // Vars + const queryString = print(query) + + // -- Server: Execute query with lazy loaded schema -- + + if (isServer) { + try { + const [ + { graphql }, + { executableSchema }, + ] = await Promise.all([ + import('graphql'), + import('./schema'), + ]) + const { data } = await graphql({ + schema: executableSchema, + source: queryString, + variableValues: variables, + }) as { data: R } + return data + } catch (error) { + throw new Error(error) + } + } + + // -- Browser: Execute query with fetch -- + + try { + const { graphURL } = appConfig + const fetchURL = graphqlEndpoint || graphURL + const res = await fetch(fetchURL, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...headers, + }, + body: JSON.stringify({ query: queryString, variables }), + }) + const { data, errors } = await res.json() + if (errors) throw new Error(errors[0].message) + return data as R + } catch (error) { + throw new Error(error) + } +} + diff --git a/features/app-core/graphql/schema.graphql b/features/app-core/graphql/schema.graphql new file mode 100644 index 0000000..5502771 --- /dev/null +++ b/features/app-core/graphql/schema.graphql @@ -0,0 +1,39 @@ +type Query { + healthCheck(args: HealthCheckArgs): HealthCheckData! +} + +input HealthCheckArgs { + echo: String +} + +type HealthCheckData { + echo: String + status: String! + alive: Boolean! + kicking: Boolean! + now: String! + aliveTime: Float! + aliveSince: String! + serverTimezone: String! + requestHost: String + requestProtocol: String + requestURL: String + baseURL: String + backendURL: String + apiURL: String + graphURL: String + port: Int + debugPort: Int + nodeVersion: String + v8Version: String + systemArch: String + systemPlatform: String + systemRelease: String + systemFreeMemory: Float + systemTotalMemory: Float + systemLoadAverage: [Float] +} + +schema { + query: Query +} \ No newline at end of file diff --git a/features/app-core/graphql/schema.ts b/features/app-core/graphql/schema.ts index 039055d..4fea6fc 100644 --- a/features/app-core/graphql/schema.ts +++ b/features/app-core/graphql/schema.ts @@ -1,9 +1,8 @@ -import path from 'path' -import { fileURLToPath } from 'node:url' -import { loadFilesSync } from '@graphql-tools/load-files' -import { mergeTypeDefs, mergeResolvers } from '@graphql-tools/merge' +import { mergeResolvers } from '@graphql-tools/merge' import { makeExecutableSchema } from '@graphql-tools/schema' +import { gql } from 'graphql-tag' import type { RequestContext } from '../middleware/createRequestContext' +import { typeDefs } from './typeDefs' import { healthCheck } from '../resolvers/healthCheck' /** --- createResolver() ----------------------------------------------------------------------- */ @@ -29,23 +28,10 @@ export const createRootResolver = () => mergeResolvers([ /* other resolvers? */ ]) -/** --- createSchemaDefinitions() -------------------------------------------------------------- */ -/** -i- Combine all custom and other (e.g. generated) graphql schema definitions */ -export const createSchemaDefinitions = () => { - const currentDir = path.dirname(fileURLToPath(import.meta.url)) - const rootDir = path.resolve(currentDir, '../../..') - const schemaPathPattern = `${rootDir}/(features|packages)/**/*.graphql` - const customGraphQLDefinitions = loadFilesSync(schemaPathPattern) - return mergeTypeDefs([ - ...customGraphQLDefinitions, - /* other typedefs? */ - ]) -} - /* --- Schema ---------------------------------------------------------------------------------- */ export const schemaBundle = { - typeDefs: createSchemaDefinitions(), + typeDefs: gql`${typeDefs}`, resolvers: createRootResolver(), } diff --git a/features/app-core/graphql/typeDefs.ts b/features/app-core/graphql/typeDefs.ts new file mode 100644 index 0000000..0c8edfe --- /dev/null +++ b/features/app-core/graphql/typeDefs.ts @@ -0,0 +1,39 @@ +export const typeDefs = `type Query { + healthCheck(args: HealthCheckArgs): HealthCheckData! +} + +input HealthCheckArgs { + echo: String +} + +type HealthCheckData { + echo: String + status: String! + alive: Boolean! + kicking: Boolean! + now: String! + aliveTime: Float! + aliveSince: String! + serverTimezone: String! + requestHost: String + requestProtocol: String + requestURL: String + baseURL: String + backendURL: String + apiURL: String + graphURL: String + port: Int + debugPort: Int + nodeVersion: String + v8Version: String + systemArch: String + systemPlatform: String + systemRelease: String + systemFreeMemory: Float + systemTotalMemory: Float + systemLoadAverage: [Float] +} + +schema { + query: Query +}` \ No newline at end of file diff --git a/features/app-core/package.json b/features/app-core/package.json index 83bdd8e..741e58f 100644 --- a/features/app-core/package.json +++ b/features/app-core/package.json @@ -2,6 +2,7 @@ "name": "@app/core", "version": "1.0.0", "private": true, + "type": "module", "dependencies": { "@apollo/server": "^4.10.2", "@as-integrations/next": "^3.0.0", @@ -11,7 +12,10 @@ }, "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", + "ts-node": "^10.9.2", "typescript": "5.3.3" }, - "scripts": {} + "scripts": { + "build:schema": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./graphql/buildSchema.ts" + } } diff --git a/features/app-core/resolvers/healthCheck.graphql b/features/app-core/resolvers/healthCheck.graphql index 3e4349e..b3a0123 100644 --- a/features/app-core/resolvers/healthCheck.graphql +++ b/features/app-core/resolvers/healthCheck.graphql @@ -19,7 +19,9 @@ type HealthCheckData { requestProtocol: String requestURL: String baseURL: String + backendURL: String apiURL: String + graphURL: String port: Int debugPort: Int nodeVersion: String diff --git a/features/app-core/resolvers/healthCheck.query.ts b/features/app-core/resolvers/healthCheck.query.ts new file mode 100644 index 0000000..c3e5ac8 --- /dev/null +++ b/features/app-core/resolvers/healthCheck.query.ts @@ -0,0 +1,49 @@ +import { ResultOf, VariablesOf, graphql } from 'gql.tada' +import { graphqlQuery } from '@app/core/graphql/graphqlQuery' + +/* --- Query ----------------------------------------------------------------------------------- */ + +export const healthCheckQuery = graphql(` + query healthCheck ($args: HealthCheckArgs) { + healthCheck(args: $args) { + echo + status + alive + kicking + now + aliveTime + aliveSince + serverTimezone + requestHost + requestProtocol + requestURL + baseURL + backendURL + apiURL + graphURL + port + debugPort + nodeVersion + v8Version + systemArch + systemPlatform + systemRelease + systemFreeMemory + systemTotalMemory + systemLoadAverage + } + } +`) + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type HealthCheckQueryVariables = VariablesOf + +export type HealthCheckQueryResult = ResultOf + +/* --- healthCheckFetcher() -------------------------------------------------------------------- */ + +export const healthCheckFetcher = async (variables: HealthCheckQueryVariables['args']) => { + const result = await graphqlQuery(healthCheckQuery, { variables: { args: variables } }) + return result.healthCheck +} diff --git a/features/app-core/screens/HomeScreen.tsx b/features/app-core/screens/HomeScreen.tsx index 7db3255..87ff650 100644 --- a/features/app-core/screens/HomeScreen.tsx +++ b/features/app-core/screens/HomeScreen.tsx @@ -2,10 +2,30 @@ import React from 'react' import { StyleSheet, Text, View } from 'react-native' import { Link } from '../navigation/Link' import { Image } from '../components/Image' +import { healthCheckFetcher, HealthCheckQueryResult } from '../resolvers/healthCheck.query' /* --- --------------------------------------------------------------------------- */ const HomeScreen = () => { + // State + const [serverHealth, setServerHealth] = React.useState(null) + + // -- Effects -- + + React.useEffect(() => { + const fetchServerHealth = async () => { + try { + const healthCheckData = await healthCheckFetcher({ echo: 'Hello from the client!' }) + setServerHealth(healthCheckData) + } catch (error) { + console.error(error) + } + } + fetchServerHealth() + }, []) + + // -- Render -- + return ( @@ -13,6 +33,11 @@ const HomeScreen = () => { Open HomeScreen.tsx in features/app-core/screens to start working on your app Test navigation Test images + {serverHealth ? ( + Test GraphQL + ) : ( + {'Loading server health...'} + )} Docs ) diff --git a/features/app-core/tsconfig.json b/features/app-core/tsconfig.json index 023446e..8693c08 100644 --- a/features/app-core/tsconfig.json +++ b/features/app-core/tsconfig.json @@ -19,7 +19,7 @@ "plugins": [ { "name": "@0no-co/graphqlsp", - "schema": "http://localhost:3000/api/graphql", + "schema": "./graphql/schema.graphql", "tadaOutputLocation": "./graphql-env.d.ts" } ] diff --git a/package-lock.json b/package-lock.json index a8254d6..8392e90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,6 +61,7 @@ }, "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", + "ts-node": "^10.9.2", "typescript": "5.3.3" } }, @@ -2375,6 +2376,28 @@ "node": ">=6.9.0" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@expo/bunyan": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", @@ -6960,6 +6983,30 @@ "tslib": "^2.4.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -7423,6 +7470,15 @@ "acorn": "^8" } }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -8778,6 +8834,12 @@ "node": ">=4" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-fetch": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", @@ -9113,6 +9175,15 @@ "node": ">=0.10" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -12280,6 +12351,12 @@ "semver": "bin/semver" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -15801,6 +15878,55 @@ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -16166,6 +16292,12 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "node_modules/valid-url": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", @@ -16676,6 +16808,15 @@ "node": ">=12" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 6ce6bfc..2796778 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ }, "scripts": { "dev": "npm run dev:web & npm run dev:mobile", - "dev:web": "npm -w @app/next run dev", + "dev:web": "npm -w @app/core run build:schema && npm -w @app/next run dev", "dev:mobile": "npm -w @app/expo run dev", "android": "npm -w @app/expo run android", "ios": "npm -w @app/expo run ios", From 6129c896a9509e76d9df76d2816b478e96a4e0d5 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sun, 21 Apr 2024 23:26:45 +0200 Subject: [PATCH 011/126] feat: Add Turborepo setup --- .gitignore | 2 + package-lock.json | 100 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 24 ++++++----- turbo.json | 33 +++++++++++++++ 4 files changed, 149 insertions(+), 10 deletions(-) create mode 100644 turbo.json diff --git a/.gitignore b/.gitignore index ef95438..43127d9 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,5 @@ yarn-error.log* .pnp.js # -- @end @expo/next-adapter -- + +.turbo diff --git a/package-lock.json b/package-lock.json index 2babd0b..ad5e062 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,10 @@ "apps/*", "features/*", "packages/*" - ] + ], + "devDependencies": { + "turbo": "^1.13.2" + } }, "apps/expo": { "name": "@app/expo", @@ -14026,6 +14029,101 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/turbo": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.13.2.tgz", + "integrity": "sha512-rX/d9f4MgRT3yK6cERPAkfavIxbpBZowDQpgvkYwGMGDQ0Nvw1nc0NVjruE76GrzXQqoxR1UpnmEP54vBARFHQ==", + "dev": true, + "bin": { + "turbo": "bin/turbo" + }, + "optionalDependencies": { + "turbo-darwin-64": "1.13.2", + "turbo-darwin-arm64": "1.13.2", + "turbo-linux-64": "1.13.2", + "turbo-linux-arm64": "1.13.2", + "turbo-windows-64": "1.13.2", + "turbo-windows-arm64": "1.13.2" + } + }, + "node_modules/turbo-darwin-64": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.13.2.tgz", + "integrity": "sha512-CCSuD8CfmtncpohCuIgq7eAzUas0IwSbHfI8/Q3vKObTdXyN8vAo01gwqXjDGpzG9bTEVedD0GmLbD23dR0MLA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/turbo-darwin-arm64": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.13.2.tgz", + "integrity": "sha512-0HySm06/D2N91rJJ89FbiI/AodmY8B3WDSFTVEpu2+8spUw7hOJ8okWOT0e5iGlyayUP9gr31eOeL3VFZkpfCw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/turbo-linux-64": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.13.2.tgz", + "integrity": "sha512-7HnibgbqZrjn4lcfIouzlPu8ZHSBtURG4c7Bedu7WJUDeZo+RE1crlrQm8wuwO54S0siYqUqo7GNHxu4IXbioQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-linux-arm64": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.13.2.tgz", + "integrity": "sha512-sUq4dbpk6SNKg/Hkwn256Vj2AEYSQdG96repio894h5/LEfauIK2QYiC/xxAeW3WBMc6BngmvNyURIg7ltrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-windows-64": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.13.2.tgz", + "integrity": "sha512-DqzhcrciWq3dpzllJR2VVIyOhSlXYCo4mNEWl98DJ3FZ08PEzcI3ceudlH6F0t/nIcfSItK1bDP39cs7YoZHEA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/turbo-windows-arm64": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.13.2.tgz", + "integrity": "sha512-WnPMrwfCXxK69CdDfS1/j2DlzcKxSmycgDAqV0XCYpK/812KB0KlvsVAt5PjEbZGXkY88pCJ1BLZHAjF5FcbqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", diff --git a/package.json b/package.json index 5bb894c..88ba992 100644 --- a/package.json +++ b/package.json @@ -8,14 +8,20 @@ "packages/*" ], "scripts": { - "dev": "npm run dev:web & npm run dev:mobile", - "dev:web": "npm -w @app/next run dev", - "dev:mobile": "npm -w @app/expo run dev", - "android": "npm -w @app/expo run android", - "ios": "npm -w @app/expo run ios", - "expo:web": "npm -w @app/expo run web", - "build": "npm -w @app/next run build", - "add-dependencies": "npm -w @app/expo run add-dependencies", - "env:local": "npm -w @app/next run env:local & npm -w @app/expo run env:local" + "dev": "npx turbo run dev", + "dev:web": "npx turbo run @app/next#dev", + "dev:mobile": "npx turbo run @app/expo#dev", + "android": "npx turbo run android", + "ios": "npx turbo run ios", + "expo:web": "npx turbo run @app/expo#web", + "build": "npx turbo run build", + "add-dependencies": "npx turbo run @app-expo#add-dependencies", + "env:local": "npx turbo run env:local", + "turbo:login": "npx turbo login", + "turbo:link": "npx turbo link", + "turbo:unlink": "npx turbo unlink" + }, + "devDependencies": { + "turbo": "^1.13.2" } } diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..4eed894 --- /dev/null +++ b/turbo.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://turbo.build/schema.json", + "pipeline": { + "build": { + "outputs": [".next/**", "!.next/cache/**"], + "cache": true + }, + "dev": { + "cache": false + }, + "@app/next#dev": { + "cache": false + }, + "@app/expo#dev": { + "cache": false + }, + "android": { + "cache": false + }, + "ios": { + "cache": false + }, + "@app/expo#web": { + "cache": false + }, + "@app-expo#add-dependencies": { + "cache": false + }, + "env:local": { + "cache": false + } + } +} \ No newline at end of file From 08e32011b44f3660aa946c9968184955f8ea30b0 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 19 Apr 2024 01:53:19 +0200 Subject: [PATCH 012/126] feat: Add UniversalRouteScreen data fetching with react-query --- apps/expo/app/(main)/index.tsx | 2 +- apps/next/app/(main)/page.tsx | 2 +- .../context/UniversalQueryClientProvider.tsx | 46 +++++++ .../UniversalRouteScreen.helpers.ts | 59 +++++++++ .../navigation/UniversalRouteScreen.tsx | 45 +++++++ .../navigation/UniversalRouteScreen.web.tsx | 116 ++++++++++++++++++ features/app-core/package.json | 4 +- .../app-core/resolvers/healthCheck.fetcher.ts | 15 +++ .../resolvers/healthCheck.fetcher.web.ts | 35 ++++++ features/app-core/resolvers/healthCheck.ts | 32 ++++- features/app-core/routes/index.tsx | 12 ++ features/app-core/screens/HomeScreen.tsx | 27 +++- .../screens/UniversalAppProviders.tsx | 5 +- package-lock.json | 27 ++++ 14 files changed, 419 insertions(+), 8 deletions(-) create mode 100644 features/app-core/context/UniversalQueryClientProvider.tsx create mode 100644 features/app-core/navigation/UniversalRouteScreen.helpers.ts create mode 100644 features/app-core/navigation/UniversalRouteScreen.tsx create mode 100644 features/app-core/navigation/UniversalRouteScreen.web.tsx create mode 100644 features/app-core/resolvers/healthCheck.fetcher.ts create mode 100644 features/app-core/resolvers/healthCheck.fetcher.web.ts create mode 100644 features/app-core/routes/index.tsx diff --git a/apps/expo/app/(main)/index.tsx b/apps/expo/app/(main)/index.tsx index 03d5802..d9bf212 100644 --- a/apps/expo/app/(main)/index.tsx +++ b/apps/expo/app/(main)/index.tsx @@ -1,3 +1,3 @@ -import HomeScreen from '@app/core/screens/HomeScreen' +import HomeScreen from '@app/core/routes/index' export default HomeScreen diff --git a/apps/next/app/(main)/page.tsx b/apps/next/app/(main)/page.tsx index ee45166..12f90ec 100644 --- a/apps/next/app/(main)/page.tsx +++ b/apps/next/app/(main)/page.tsx @@ -1,4 +1,4 @@ 'use client' -import HomeScreen from '@app/core/screens/HomeScreen' +import HomeScreen from '@app/core/routes/index' export default HomeScreen diff --git a/features/app-core/context/UniversalQueryClientProvider.tsx b/features/app-core/context/UniversalQueryClientProvider.tsx new file mode 100644 index 0000000..b078be0 --- /dev/null +++ b/features/app-core/context/UniversalQueryClientProvider.tsx @@ -0,0 +1,46 @@ +'use client' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' + +/* --- Constants ------------------------------------------------------------------------------- */ + +let clientSideQueryClient: QueryClient | undefined = undefined + +/** --- makeQueryClient() ---------------------------------------------------------------------- */ +/** -i- Build a queryclient to be used either client-side or server-side */ +export const makeQueryClient = () => { + const oneMinute = 1000 * 60 + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + // With SSR, we usually want to set some default staleTime + // above 0 to avoid refetching immediately on the client + staleTime: oneMinute, + }, + }, + }) + return queryClient +} + +/** --- getQueryClient() ----------------------------------------------------------------------- */ +/** -i- Always makes a new query client on the server, but reuses an existing client if found in browser or mobile */ +export const getQueryClient = () => { + // Always create a new query client on the server, so no caching is shared between requests + const isServer = typeof window === 'undefined' + if (isServer) return makeQueryClient() + // On the browser or mobile, make a new client if we don't already have one + // This is important so we don't re-make a new client if React suspends during initial render. + // Might not be needed if we have a suspense boundary below the creation of the query client though. + if (!clientSideQueryClient) clientSideQueryClient = makeQueryClient() + return clientSideQueryClient +} + +/** --- ----------------------------------------------------------------- */ +/** -i- Provides a universal queryclient to be used either client-side or server-side */ +export const UniversalQueryClientProvider = ({ children }: { children: React.ReactNode }) => { + const queryClient = getQueryClient() + return ( + + {children} + + ) +} diff --git a/features/app-core/navigation/UniversalRouteScreen.helpers.ts b/features/app-core/navigation/UniversalRouteScreen.helpers.ts new file mode 100644 index 0000000..2e86c22 --- /dev/null +++ b/features/app-core/navigation/UniversalRouteScreen.helpers.ts @@ -0,0 +1,59 @@ +'use client' +import type { Query, QueryKey } from '@tanstack/react-query' +import { queryBridge } from '../screens/HomeScreen' + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type QueryFn = (args: Record) => Promise> + +export type QueryBridgeConfig = { + /** -i- Function to turn any route params into the query key for the `routeDataFetcher()` query */ + routeParamsToQueryKey: (routeParams: Partial[0]>) => QueryKey + /** -i- Function to turn any route params into the input args for the `routeDataFetcher()` query */ + routeParamsToQueryInput: (routeParams: Partial[0]>) => Parameters[0] + /** -i- Fetcher to prefetch data for the Page and QueryClient during SSR, or fetch it clientside if browser / mobile */ + routeDataFetcher: Fetcher + /** -i- Function transform fetcher data into props */ + fetcherDataToProps?: (data: Awaited>) => Record + /** -i- Initial data provided to the QueryClient */ + initialData?: ReturnType +} + +export type UniversalRouteProps = { + /** -i- Optional params passed by the Next.js app router, in Expo we get these from `useRouteParams()` */ + params?: Partial[0]> + /** -i- Optional search params passed by the Next.js app router, in Expo we get these from `useRouteParams()` */ + searchParams?: Partial[0]> + /** -i- Configuration for the query bridge */ + queryBridge: QueryBridgeConfig + /** -i- The screen to render for this route */ + routeScreen: React.ComponentType +} + +export type HydratedRouteProps< + QueryBridge extends QueryBridgeConfig +> = ReturnType & { + /** -i- The route key for the query */ + queryKey: QueryKey + /** -i- The input args for the query */ + queryInput: Parameters[0] + /** -i- The route params passed by the Next.js app router, in Expo we get these from `useRouteParams()` */ + params: Partial[0]> + /** -i- The search params passed by the Next.js app router, in Expo we get these from `useRouteParams()` */ + searchParams: Partial[0]> +} + +/** --- createQueryBridge() -------------------------------------------------------------------- */ +/** -i- Util to create a typed bridge between a fetcher and a route's props */ +export const createQueryBridge = >( + queryBridge: QueryBridge +) => { + type FetcherData = Awaited> + type ReturnTypeOfFunction = F extends ((args: A) => infer R) ? R : FetcherData + type RoutePropsFromFetcher = ReturnTypeOfFunction + const fetcherDataToProps = queryBridge.fetcherDataToProps || ((data: FetcherData) => data) + return { + ...queryBridge, + fetcherDataToProps: fetcherDataToProps as ((data: FetcherData) => RoutePropsFromFetcher), + } +} diff --git a/features/app-core/navigation/UniversalRouteScreen.tsx b/features/app-core/navigation/UniversalRouteScreen.tsx new file mode 100644 index 0000000..cf55b60 --- /dev/null +++ b/features/app-core/navigation/UniversalRouteScreen.tsx @@ -0,0 +1,45 @@ +'use client' +import { useQuery } from '@tanstack/react-query' +import type { UniversalRouteProps, QueryFn } from './UniversalRouteScreen.helpers' +import { useRouteParams } from './useRouteParams' + +/** --- -------------------------------------------------------------------- */ +/** -i- Universal Route Wrapper to provide query data on mobile, the browser and during server rendering */ +export const UniversalRouteScreen = (props: UniversalRouteProps) => { + // Props + const { params: routeParams, searchParams, queryBridge, routeScreen: RouteScreen, ...screenProps } = props + const { routeParamsToQueryKey, routeParamsToQueryInput, routeDataFetcher } = queryBridge + const fetcherDataToProps = queryBridge.fetcherDataToProps || ((data: ReturnType) => data) + + // Hooks + const expoRouterParams = useRouteParams(props) + + // Vars + const queryParams = { ...routeParams, ...searchParams, ...expoRouterParams } + const queryKey = routeParamsToQueryKey(queryParams) + const queryInput = routeParamsToQueryInput(queryParams) + + // -- Query -- + + const queryConfig = { + queryKey, + queryFn: async () => await routeDataFetcher(queryInput), + initialData: queryBridge.initialData, + } + + // -- Mobile -- + + const { data: fetcherData } = useQuery(queryConfig) + const routeDataProps = fetcherDataToProps(fetcherData) as Record + + return ( + + ) +} diff --git a/features/app-core/navigation/UniversalRouteScreen.web.tsx b/features/app-core/navigation/UniversalRouteScreen.web.tsx new file mode 100644 index 0000000..551900e --- /dev/null +++ b/features/app-core/navigation/UniversalRouteScreen.web.tsx @@ -0,0 +1,116 @@ +'use client' +import { use, useState, useEffect } from 'react' +import { useQueryClient, useQuery, dehydrate, HydrationBoundary } from '@tanstack/react-query' +import type { UniversalRouteProps, QueryFn } from './UniversalRouteScreen.helpers' +import { useRouteParams } from './useRouteParams' + +/* --- Helpers --------------------------------------------------------------------------------- */ + +const getSSRData = () => { + const $ssrData = document.getElementById('ssr-data') + const ssrDataText = $ssrData?.getAttribute('data-ssr') + const ssrData = ssrDataText ? (JSON.parse(ssrDataText) as Record) : null + return ssrData +} + +const getDehydratedSSRState = () => { + const $ssrHydrationState = document.getElementById('ssr-hydration-state') + const ssrHydrationStateText = $ssrHydrationState?.getAttribute('data-ssr') + const ssrHydrationState = ssrHydrationStateText ? (JSON.parse(ssrHydrationStateText) as Record) : null + return ssrHydrationState +} + +/** --- ---------------------------------------------------------------- */ +/** -i- Universal Route Wrapper to provide query data on mobile, the browser and during server rendering */ +export const UniversalRouteScreen = (props: UniversalRouteProps) => { + // Props + const { params: routeParams, searchParams, queryBridge, routeScreen: RouteScreen, ...screenProps } = props + const { routeParamsToQueryKey, routeParamsToQueryInput, routeDataFetcher } = queryBridge + const fetcherDataToProps = queryBridge.fetcherDataToProps || ((data: ReturnType) => data) + + // Hooks + const nextRouterParams = useRouteParams(props) + + // Context + const queryClient = useQueryClient() + + // State + const [hydratedData, setHydratedData] = useState | null>(null) + const [hydratedQueries, setHydratedQueries] = useState | null>(null) + + // Vars + const isBrowser = typeof window !== 'undefined' + const queryParams = { ...routeParams, ...searchParams, ...nextRouterParams } + const queryKey = routeParamsToQueryKey(queryParams) + const queryInput = routeParamsToQueryInput(queryParams) + + // -- Effects -- + + useEffect(() => { + const ssrData = getSSRData() + if (ssrData) setHydratedData(ssrData) // Save the SSR data to state, removing the SSR data from the DOM + const hydratedQueyClientState = getDehydratedSSRState() + if (hydratedQueyClientState) setHydratedQueries(hydratedQueyClientState) // Save the hydrated state to state, removing the hydrated state from the DOM + }, []) + + // -- Query -- + + const queryConfig = { + queryKey, + queryFn: async () => await routeDataFetcher(queryInput), + initialData: queryBridge.initialData, + } + + // -- Browser -- + + if (isBrowser) { + const hydrationData = hydratedData || getSSRData() + const hydrationState = hydratedQueries || getDehydratedSSRState() + const renderHydrationData = !!hydrationData && !hydratedData // Only render the hydration data if it's not already in state + + const { data: fetcherData } = useQuery({ + ...queryConfig, + initialData: { + ...queryConfig.initialData, + ...hydrationData, + }, + }) + const routeDataProps = fetcherDataToProps(fetcherData as Awaited>) as Record // prettier-ignore + + return ( + + {renderHydrationData &&
} + {renderHydrationData &&
} + + + ) + } + + // -- Server -- + + const fetcherData = use(queryClient.fetchQuery(queryConfig)) as Awaited> + const routeDataProps = fetcherDataToProps(fetcherData) as Record + const dehydratedState = dehydrate(queryClient) + + return ( + + {!!fetcherData &&
} + {!!dehydratedState &&
} + + + ) +} diff --git a/features/app-core/package.json b/features/app-core/package.json index e04b339..7f8672e 100644 --- a/features/app-core/package.json +++ b/features/app-core/package.json @@ -2,7 +2,9 @@ "name": "@app/core", "version": "1.0.0", "private": true, - "dependencies": {}, + "dependencies": { + "@tanstack/react-query": "^5.29.2" + }, "devDependencies": { "typescript": "5.3.3" }, diff --git a/features/app-core/resolvers/healthCheck.fetcher.ts b/features/app-core/resolvers/healthCheck.fetcher.ts new file mode 100644 index 0000000..60f6fae --- /dev/null +++ b/features/app-core/resolvers/healthCheck.fetcher.ts @@ -0,0 +1,15 @@ +import type { HealthCheckArgs, HealthCheckResponse } from './healthCheck' +import { appConfig } from '../appConfig' + +/** --- healthCheckFetcher() ------------------------------------------------------------------- */ +/** -i- Isomorphic fetcher for our healthCheck() resolver at '/api/health' */ +export const healthCheckFetcher = async (args: HealthCheckArgs) => { + const response = await fetch(`${appConfig.backendURL}/api/health?echo=${args.echo}`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + }) + const data = await response.json() + return data as HealthCheckResponse +} diff --git a/features/app-core/resolvers/healthCheck.fetcher.web.ts b/features/app-core/resolvers/healthCheck.fetcher.web.ts new file mode 100644 index 0000000..ff29138 --- /dev/null +++ b/features/app-core/resolvers/healthCheck.fetcher.web.ts @@ -0,0 +1,35 @@ +import type { NextRequest, NextResponse } from 'next/server' +import type { HealthCheckArgs, HealthCheckResponse } from './healthCheck' +import { appConfig } from '../appConfig' + +/** --- healthCheckFetcher() ------------------------------------------------------------------- */ +/** -i- Isomorphic fetcher for our healthCheck() resolver at '/api/health' */ +export const healthCheckFetcher = async (args: HealthCheckArgs) => { + // Vars + const isServer = typeof window === 'undefined' + + // -- Browser -- + + if (!isServer) { + const response = await fetch(`${appConfig.backendURL}/api/health?echo=${args.echo}`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + }) + const data = await response.json() + return data as HealthCheckResponse + } + + // -- Server -- + + const { healthCheck } = await import('./healthCheck') + const data = await healthCheck({ + args, + context: { + req: {} as NextRequest, + res: {} as NextResponse, + }, + }) + return data as HealthCheckResponse +} diff --git a/features/app-core/resolvers/healthCheck.ts b/features/app-core/resolvers/healthCheck.ts index 14a2dc8..56cd6a4 100644 --- a/features/app-core/resolvers/healthCheck.ts +++ b/features/app-core/resolvers/healthCheck.ts @@ -9,15 +9,43 @@ const ALIVE_SINCE = new Date() /* --- Types ----------------------------------------------------------------------------------- */ -type HealthCheckArgs = { +export type HealthCheckArgs = { echo?: string } -type HealthCheckInputs = { +export type HealthCheckInputs = { args: HealthCheckArgs, context: RequestContext } +export type HealthCheckResponse = { + echo?: string + status: 'OK' + alive: boolean + kicking: boolean + now: string + aliveTime: number + aliveSince: string + serverTimezone: string + requestHost: string + requestProtocol: string + requestURL: string + baseURL: string + backendURL: string + apiURL: string + graphURL: string + port: number | null + debugPort: number | null + nodeVersion: string + v8Version: string + systemArch: string + systemPlatform: string + systemRelease: string + systemFreeMemory: number + systemTotalMemory: number + systemLoadAverage: number[] +} + /** --- healthCheck() -------------------------------------------------------------------------- */ /** -i- Check the health status of the server. Includes relevant urls, server time(zone), versions and more */ export const healthCheck = async ({ args, context }: HealthCheckInputs) => { diff --git a/features/app-core/routes/index.tsx b/features/app-core/routes/index.tsx new file mode 100644 index 0000000..f5e7ded --- /dev/null +++ b/features/app-core/routes/index.tsx @@ -0,0 +1,12 @@ +import { UniversalRouteScreen } from '../navigation/UniversalRouteScreen' +import HomeScreen, { queryBridge } from '../screens/HomeScreen' + +/* --- / --------------------------------------------------------------------------------------- */ + +export default (props: any) => ( + +) diff --git a/features/app-core/screens/HomeScreen.tsx b/features/app-core/screens/HomeScreen.tsx index 7db3255..73502d4 100644 --- a/features/app-core/screens/HomeScreen.tsx +++ b/features/app-core/screens/HomeScreen.tsx @@ -2,10 +2,30 @@ import React from 'react' import { StyleSheet, Text, View } from 'react-native' import { Link } from '../navigation/Link' import { Image } from '../components/Image' +import { healthCheckFetcher } from '../resolvers/healthCheck.fetcher' +import { HydratedRouteProps, createQueryBridge } from '../navigation/UniversalRouteScreen.helpers' + +/* --- Data Fetching --------------------------------------------------------------------------- */ + +export const queryBridge = createQueryBridge({ + routeParamsToQueryKey: (routeParams: { echo: string }) => ['healthCheck', routeParams.echo], + routeParamsToQueryInput: (routeParams: { echo: string }) => ({ echo: routeParams.echo }), + routeDataFetcher: healthCheckFetcher, + fetcherDataToProps: (fetcherData: Awaited>) => ({ + serverHealth: fetcherData + }), +}) + +queryBridge['fetcherDataToProps'] /* --- --------------------------------------------------------------------------- */ -const HomeScreen = () => { +const HomeScreen = (props: HydratedRouteProps) => { + // Props + const { serverHealth } = props + + // -- Render -- + return ( @@ -13,6 +33,11 @@ const HomeScreen = () => { Open HomeScreen.tsx in features/app-core/screens to start working on your app Test navigation Test images + {serverHealth ? ( + Test API + ) : ( + {'Loading server health...'} + )} Docs ) diff --git a/features/app-core/screens/UniversalAppProviders.tsx b/features/app-core/screens/UniversalAppProviders.tsx index 770f906..1054c5a 100644 --- a/features/app-core/screens/UniversalAppProviders.tsx +++ b/features/app-core/screens/UniversalAppProviders.tsx @@ -1,5 +1,6 @@ 'use client' import React from 'react' +import { UniversalQueryClientProvider } from '../context/UniversalQueryClientProvider' // -i- This is a regular react client component // -i- Use this file for adding universal app providers @@ -15,9 +16,9 @@ type UniversalAppProvidersProps = { /* --- ---------------------------------------------------------------- */ const UniversalAppProviders = ({ children }: UniversalAppProvidersProps) => ( - <> + {children} - + ) /* --- Exports --------------------------------------------------------------------------------- */ diff --git a/package-lock.json b/package-lock.json index 2babd0b..ee2b4be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,6 +49,9 @@ "features/app-core": { "name": "@app/core", "version": "1.0.0", + "dependencies": { + "@tanstack/react-query": "^5.29.2" + }, "devDependencies": { "typescript": "5.3.3" } @@ -6347,6 +6350,30 @@ "tslib": "^2.4.0" } }, + "node_modules/@tanstack/query-core": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.29.0.tgz", + "integrity": "sha512-WgPTRs58hm9CMzEr5jpISe8HXa3qKQ8CxewdYZeVnA54JrPY9B1CZiwsCoLpLkf0dGRZq+LcX5OiJb0bEsOFww==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.29.2.tgz", + "integrity": "sha512-nyuWILR4u7H5moLGSiifLh8kIqQDLNOHGuSz0rcp+J75fNc8aQLyr5+I2JCHU3n+nJrTTW1ssgAD8HiKD7IFBQ==", + "dependencies": { + "@tanstack/query-core": "5.29.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, "node_modules/@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", From fc16c4924941e49544d8dbfc48de49f17b3f7e33 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Wed, 8 May 2024 09:59:57 +0200 Subject: [PATCH 013/126] chore: Move core files to '@green-stack/core' package workspace --- apps/expo/.env.example | 50 ++++++++++++++++-- apps/expo/app/ExpoRootLayout.tsx | 8 +-- apps/expo/tailwind.config.js | 2 +- apps/expo/tsconfig.json | 6 ++- apps/next/.env.example | 43 +++++++++++++++ apps/next/app/NextClientRootLayout.tsx | 8 +-- apps/next/tailwind.config.js | 2 +- apps/next/tsconfig.json | 6 ++- features/{app-core => @app-core}/appConfig.ts | 23 ++++++-- .../assets/green-stack-logo.png} | Bin .../components/styled.tsx | 4 +- .../{app-core => @app-core}/graphql-env.d.ts | 0 .../graphql/graphqlQuery.ts | 0 .../graphql/graphqlQuery.types.ts | 0 .../graphql/graphqlQuery.web.ts | 5 ++ .../graphql/graphqlServer.ts | 0 .../graphql/schema.graphql | 4 +- .../{app-core => @app-core}/graphql/schema.ts | 5 ++ .../graphql/typeDefs.ts | 4 +- .../middleware/createRequestContext.ts | 0 features/{app-core => @app-core}/package.json | 6 +-- .../resolvers/healthCheck.fetcher.ts | 0 .../resolvers/healthCheck.fetcher.web.ts | 0 .../resolvers/healthCheck.graphql | 0 .../resolvers/healthCheck.query.ts | 0 .../resolvers/healthCheck.ts | 0 .../{app-core => @app-core}/routes/index.tsx | 2 +- .../screens/HomeScreen.tsx | 10 ++-- .../screens/ImagesScreen.tsx | 6 +-- .../screens/SlugScreen.tsx | 6 +-- .../screens/UniversalAppProviders.tsx | 4 +- .../screens/UniversalRootLayout.tsx | 0 .../tailwind.config.js | 0 .../tailwind.theme.js} | 0 .../{app-core => @app-core}/tsconfig.json | 3 -- package-lock.json | 40 +++++++++++++- package.json | 2 +- .../components/Image.expo.tsx | 2 +- .../components/Image.next.tsx | 4 +- .../@green-stack-core}/components/Image.tsx | 2 +- .../components/Image.types.tsx | 0 .../context/CoreContext.tsx | 4 +- .../context/UniversalQueryClientProvider.tsx | 0 .../navigation/Link.expo.tsx | 2 +- .../navigation/Link.next.tsx | 2 +- .../@green-stack-core}/navigation/Link.tsx | 0 .../navigation/Link.types.ts | 0 .../UniversalRouteScreen.helpers.ts | 3 +- .../navigation/UniversalRouteScreen.tsx | 0 .../navigation/UniversalRouteScreen.web.tsx | 2 +- .../navigation/useRouteParams.expo.ts | 0 .../navigation/useRouteParams.next.ts | 0 .../navigation/useRouteParams.ts | 0 .../navigation/useRouteParams.types.ts | 1 + .../navigation/useRouter.expo.ts | 0 .../navigation/useRouter.next.ts | 0 .../navigation/useRouter.ts | 0 .../navigation/useRouter.types.ts | 0 packages/@green-stack-core/package.json | 15 ++++++ .../scripts/build-graphql-schema.ts | 14 ++--- .../styles}/parseNativeWindStyles.ts | 0 packages/@green-stack-core/tsconfig.json | 9 ++++ turbo.json | 12 ++--- 63 files changed, 249 insertions(+), 72 deletions(-) rename features/{app-core => @app-core}/appConfig.ts (60%) rename features/{app-core/assets/aetherspaceLogo.png => @app-core/assets/green-stack-logo.png} (100%) rename features/{app-core => @app-core}/components/styled.tsx (89%) rename features/{app-core => @app-core}/graphql-env.d.ts (100%) rename features/{app-core => @app-core}/graphql/graphqlQuery.ts (100%) rename features/{app-core => @app-core}/graphql/graphqlQuery.types.ts (100%) rename features/{app-core => @app-core}/graphql/graphqlQuery.web.ts (85%) rename features/{app-core => @app-core}/graphql/graphqlServer.ts (100%) rename features/{app-core => @app-core}/graphql/schema.graphql (87%) rename features/{app-core => @app-core}/graphql/schema.ts (86%) rename features/{app-core => @app-core}/graphql/typeDefs.ts (87%) rename features/{app-core => @app-core}/middleware/createRequestContext.ts (100%) rename features/{app-core => @app-core}/package.json (66%) rename features/{app-core => @app-core}/resolvers/healthCheck.fetcher.ts (100%) rename features/{app-core => @app-core}/resolvers/healthCheck.fetcher.web.ts (100%) rename features/{app-core => @app-core}/resolvers/healthCheck.graphql (100%) rename features/{app-core => @app-core}/resolvers/healthCheck.query.ts (100%) rename features/{app-core => @app-core}/resolvers/healthCheck.ts (100%) rename features/{app-core => @app-core}/routes/index.tsx (74%) rename features/{app-core => @app-core}/screens/HomeScreen.tsx (80%) rename features/{app-core => @app-core}/screens/ImagesScreen.tsx (85%) rename features/{app-core => @app-core}/screens/SlugScreen.tsx (90%) rename features/{app-core => @app-core}/screens/UniversalAppProviders.tsx (87%) rename features/{app-core => @app-core}/screens/UniversalRootLayout.tsx (100%) rename features/{app-core => @app-core}/tailwind.config.js (100%) rename features/{app-core/tailwind.theme.cjs => @app-core/tailwind.theme.js} (100%) rename features/{app-core => @app-core}/tsconfig.json (82%) rename {features/app-core => packages/@green-stack-core}/components/Image.expo.tsx (97%) rename {features/app-core => packages/@green-stack-core}/components/Image.next.tsx (94%) rename {features/app-core => packages/@green-stack-core}/components/Image.tsx (100%) rename {features/app-core => packages/@green-stack-core}/components/Image.types.tsx (100%) rename {features/app-core => packages/@green-stack-core}/context/CoreContext.tsx (90%) rename {features/app-core => packages/@green-stack-core}/context/UniversalQueryClientProvider.tsx (100%) rename {features/app-core => packages/@green-stack-core}/navigation/Link.expo.tsx (94%) rename {features/app-core => packages/@green-stack-core}/navigation/Link.next.tsx (94%) rename {features/app-core => packages/@green-stack-core}/navigation/Link.tsx (100%) rename {features/app-core => packages/@green-stack-core}/navigation/Link.types.ts (100%) rename {features/app-core => packages/@green-stack-core}/navigation/UniversalRouteScreen.helpers.ts (96%) rename {features/app-core => packages/@green-stack-core}/navigation/UniversalRouteScreen.tsx (100%) rename {features/app-core => packages/@green-stack-core}/navigation/UniversalRouteScreen.web.tsx (98%) rename {features/app-core => packages/@green-stack-core}/navigation/useRouteParams.expo.ts (100%) rename {features/app-core => packages/@green-stack-core}/navigation/useRouteParams.next.ts (100%) rename {features/app-core => packages/@green-stack-core}/navigation/useRouteParams.ts (100%) rename {features/app-core => packages/@green-stack-core}/navigation/useRouteParams.types.ts (99%) rename {features/app-core => packages/@green-stack-core}/navigation/useRouter.expo.ts (100%) rename {features/app-core => packages/@green-stack-core}/navigation/useRouter.next.ts (100%) rename {features/app-core => packages/@green-stack-core}/navigation/useRouter.ts (100%) rename {features/app-core => packages/@green-stack-core}/navigation/useRouter.types.ts (100%) create mode 100644 packages/@green-stack-core/package.json rename features/app-core/graphql/buildSchema.ts => packages/@green-stack-core/scripts/build-graphql-schema.ts (64%) rename {features/app-core/utils => packages/@green-stack-core/styles}/parseNativeWindStyles.ts (100%) create mode 100644 packages/@green-stack-core/tsconfig.json diff --git a/apps/expo/.env.example b/apps/expo/.env.example index 9646681..b6ab6b6 100644 --- a/apps/expo/.env.example +++ b/apps/expo/.env.example @@ -1,4 +1,46 @@ -EXPO_PUBLIC_BASE_URL= -EXPO_PUBLIC_BACKEND_URL= -EXPO_PUBLIC_API_URL= -EXPO_PUBLIC_GRAPH_URL= +## --- Notes ----------------------------------------------------------------------------------- */ + +## -i- The `.env.example` file can be copied into `.env.local` using `npx turbo env:local` +## -i- For more info, development, staging & production environments, check the expo docs: +## -i- https://docs.expo.dev/guides/environment-variables/ + +## -i- Note that Expo will inline environment variables in your bundle during builds & deployments +## -i- This means dynamically retrieving environment variables from e.g. `process.env[someKey]` will not work +## -i- It also means that you should never include sensitive / private keys + +## -i- We suggest that for each environment variable you add here, you also add an entry in `appConfig.ts` +## -i- There, you can add logic like ```envValue: process.env.EXPO_PUBLIC_ENV_KEY || process.env.NEXT_PUBLIC_ENV_KEY``` +## -i- Where you would only define the EXPO_PUBLIC_ prefixed versions here in `.env.local` locally and using Expo UI for deployed envs + +## --- General --------------------------------------------------------------------------------- */ +## -i- Env vars that should always be present & the same locally, independent of the simulated environment +## --------------------------------------------------------------------------------------------- */ + +EXPO_PUBLIC_BASE_URL= # Keep empty in `.env.local` for maximum local testability, `appConfig.ts` will figure out back-end URL from expo-config +EXPO_PUBLIC_BACKEND_URL= # Keep empty in `.env.local` for maximum local testability, `appConfig.ts` will figure out back-end URL from expo-config +EXPO_PUBLIC_API_URL= # Keep empty in `.env.local` for maximum local testability, `appConfig.ts` will figure out back-end URL from expo-config +EXPO_PUBLIC_GRAPH_URL= # Keep empty in `.env.local` for maximum local testability, `appConfig.ts` will figure out back-end URL from expo-config + +## --- LOCAL ----------------------------------------------------------------------------------- */ +## -i- Defaults you might want to switch out for local development by commenting / uncommenting +## --------------------------------------------------------------------------------------------- */ + +# EXAMPLE= # ... + +## --- DEV ------------------------------------------------------------------------------------- */ +# -i- Uncomment while on development branch to simulate the dev environment +## --------------------------------------------------------------------------------------------- */ + +# EXAMPLE= # ... + +## --- STAGE ----------------------------------------------------------------------------------- */ +# -i- Uncomment while on staging branch to simulate the stage environment +## --------------------------------------------------------------------------------------------- */ + +# EXAMPLE= # ... + +## --- PROD ------------------------------------------------------------------------------------ */ +# -i- Uncomment while on main branch to simulate the production environment +## --------------------------------------------------------------------------------------------- */ + +# EXAMPLE= # ... diff --git a/apps/expo/app/ExpoRootLayout.tsx b/apps/expo/app/ExpoRootLayout.tsx index f861fd5..e1aa757 100644 --- a/apps/expo/app/ExpoRootLayout.tsx +++ b/apps/expo/app/ExpoRootLayout.tsx @@ -1,10 +1,10 @@ import { Stack } from 'expo-router' import UniversalAppProviders from '@app/core/screens/UniversalAppProviders' import UniversalRootLayout from '@app/core/screens/UniversalRootLayout' -import { Image as ExpoContextImage } from '@app/core/components/Image.expo' -import { Link as ExpoContextLink } from '@app/core/navigation/Link.expo' -import { useRouter as useExpoContextRouter } from '@app/core/navigation/useRouter.expo' -import { useRouteParams as useExpoRouteParams } from '@app/core/navigation/useRouteParams.expo' +import { Image as ExpoContextImage } from '@green-stack/core/components/Image.expo' +import { Link as ExpoContextLink } from '@green-stack/core/navigation/Link.expo' +import { useRouter as useExpoContextRouter } from '@green-stack/core/navigation/useRouter.expo' +import { useRouteParams as useExpoRouteParams } from '@green-stack/core/navigation/useRouteParams.expo' import { NativeWindStyleSheet } from 'nativewind' // -i- Expo Router's layout setup is much simpler than Next.js's layout setup diff --git a/apps/expo/tailwind.config.js b/apps/expo/tailwind.config.js index dba185b..cff6b7f 100644 --- a/apps/expo/tailwind.config.js +++ b/apps/expo/tailwind.config.js @@ -1,4 +1,4 @@ -const { universalTheme } = require('@app/core/tailwind.theme.cjs') +const { universalTheme } = require('@app/core/tailwind.theme.js') /** @type {import('tailwindcss').Config} */ module.exports = { diff --git a/apps/expo/tsconfig.json b/apps/expo/tsconfig.json index fcf18a6..68bd55f 100644 --- a/apps/expo/tsconfig.json +++ b/apps/expo/tsconfig.json @@ -3,7 +3,11 @@ "include": [ "**/*.ts", "**/*.tsx", - "../../features/app-core/graphql-env.d.ts" + "../../features/app-core/graphql-env.d.ts", + "../../features/**/*.tsx", + "../../features/**/*.ts", + "../../packages/**/*.tsx", + "../../packages/**/*.ts" ], "exclude": ["node_modules"] } diff --git a/apps/next/.env.example b/apps/next/.env.example index 14e33b4..64eaca3 100644 --- a/apps/next/.env.example +++ b/apps/next/.env.example @@ -1,4 +1,47 @@ +## --- Notes ----------------------------------------------------------------------------------- */ + +## -i- The `.env.example` file can be copied into `.env.local` using `npx turbo env:local` +## -i- For development, staging & production environments, check the next.js docs: +## -i- https://nextjs.org/docs/app/building-your-application/configuring/environment-variables + +## -i- Note that you should treat environment variables as if they could be inlined in your bundle during builds & deployments +## -i- This means dynamically retrieving environment variables from e.g. `process.env[someKey]` might not work +## -i- It also means that you should never prefix with `NEXT_PUBLIC_` for sensitive / private keys + +## -i- We suggest that for each environment variable you add here, you also add an entry in `appConfig.ts` +## -i- There, you can add logic like ```envValue: process.env.NEXT_PUBLIC_ENV_KEY || process.env.EXPO_PUBLIC_ENV_KEY``` +## -i- Where you would only define the NEXT_PUBLIC_ prefixed versions here in `.env.local` locally and using Next.js UI for deployed envs +## -i- For environment variables you only be available server-side, you can omit `NEXT_PUBLIC_` + +## --- General --------------------------------------------------------------------------------- */ +## -i- Env vars that should always be present & the same locally, independent of the simulated environment +## --------------------------------------------------------------------------------------------- */ + NEXT_PUBLIC_BASE_URL=http://localhost:3000 NEXT_PUBLIC_BACKEND_URL=http://localhost:3000 NEXT_PUBLIC_API_URL=http://localhost:3000/api NEXT_PUBLIC_GRAPH_URL=http://localhost:3000/api/graphql + +## --- LOCAL ----------------------------------------------------------------------------------- */ +## -i- Defaults you might want to switch out for local development by commenting / uncommenting +## --------------------------------------------------------------------------------------------- */ + +# DB_URL= # TODO: Add DB layer connection for full local dev... + +## --- DEV ------------------------------------------------------------------------------------- */ +# -i- Uncomment while on development branch to simulate the dev environment +## --------------------------------------------------------------------------------------------- */ + +# DB_URL= # TODO: Add DB layer connection for the dev environment... + +## --- STAGE ----------------------------------------------------------------------------------- */ +# -i- Uncomment while on staging branch to simulate the stage environment +## --------------------------------------------------------------------------------------------- */ + +# DB_URL= # TODO: Add DB layer connection for the stage environment... + +## --- PROD ------------------------------------------------------------------------------------ */ +# -i- Uncomment while on main branch to simulate the production environment +## --------------------------------------------------------------------------------------------- */ + +# DB_URL= # TODO: Add DB layer connection for the production environment... diff --git a/apps/next/app/NextClientRootLayout.tsx b/apps/next/app/NextClientRootLayout.tsx index 15800dd..5eb390e 100644 --- a/apps/next/app/NextClientRootLayout.tsx +++ b/apps/next/app/NextClientRootLayout.tsx @@ -1,10 +1,10 @@ 'use client' import React from 'react' import UniversalAppProviders from '@app/core/screens/UniversalAppProviders' -import { Image as NextContextImage } from '@app/core/components/Image.next' -import { Link as NextContextLink } from '@app/core/navigation/Link.next' -import { useRouter as useNextContextRouter } from '@app/core/navigation/useRouter.next' -import { useRouteParams as useNextRouteParams } from '@app/core/navigation/useRouteParams.next' +import { Image as NextContextImage } from '@green-stack/core/components/Image.next' +import { Link as NextContextLink } from '@green-stack/core/navigation/Link.next' +import { useRouter as useNextContextRouter } from '@green-stack/core/navigation/useRouter.next' +import { useRouteParams as useNextRouteParams } from '@green-stack/core/navigation/useRouteParams.next' // -i- This is a regular react client component // -i- It's still rendered on the server during SSR, but it also hydrates on the client diff --git a/apps/next/tailwind.config.js b/apps/next/tailwind.config.js index 405f994..f9402da 100644 --- a/apps/next/tailwind.config.js +++ b/apps/next/tailwind.config.js @@ -1,4 +1,4 @@ -const { universalTheme } = require('@app/core/tailwind.theme.cjs') +const { universalTheme } = require('@app/core/tailwind.theme.js') /** @type {import('tailwindcss').Config} */ module.exports = { diff --git a/apps/next/tsconfig.json b/apps/next/tsconfig.json index e833924..0a734e2 100644 --- a/apps/next/tsconfig.json +++ b/apps/next/tsconfig.json @@ -4,7 +4,11 @@ "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", - "../../features/app-core/graphql-env.d.ts" + "../../features/app-core/graphql-env.d.ts", + "../../features/**/*.tsx", + "../../features/**/*.ts", + "../../packages/**/*.tsx", + "../../packages/**/*.ts" ], "exclude": [ "node_modules" diff --git a/features/app-core/appConfig.ts b/features/@app-core/appConfig.ts similarity index 60% rename from features/app-core/appConfig.ts rename to features/@app-core/appConfig.ts index 871f7bd..1e70e6a 100644 --- a/features/app-core/appConfig.ts +++ b/features/@app-core/appConfig.ts @@ -1,19 +1,32 @@ import Constants from 'expo-constants' import { Platform } from 'react-native' -export const isLocalhost = Platform.OS === 'web' && globalThis?.location?.hostname === 'localhost' -export const isExpoWebLocal = isLocalhost && globalThis?.location?.port === '8081' -export const fallbackExpoWebHost = isExpoWebLocal ? "localhost" : '' +/* --- Notes ----------------------------------------------------------------------------------- */ + +// -i- Workpacke package '@green-stack/core' expects this file to be at '/features/app-core/appConfig.ts' +// -i- Please keep it here to avoid issues + +/* --- Computed Fallbacks ---------------------------------------------------------------------- */ + +export const isWebLocalhost = Platform.OS === 'web' && globalThis?.location?.hostname === 'localhost' +export const isExpoWebLocal = isWebLocalhost && globalThis?.location?.port === '8081' +export const fallbackExpoWebHost = isExpoWebLocal ? 'localhost' : '' export const expoDebuggerHost = Constants?.expoGoConfig?.debuggerHost || Constants.manifest2?.extra?.expoGo?.debuggerHost // prettier-ignore export const localURL = expoDebuggerHost?.split?.(':').shift() || fallbackExpoWebHost +export const isExpoMobileLocal = !!expoDebuggerHost export const fallbackBaseURL = localURL ? `http://${localURL}:3000` : '' /** --- appConfig ------------------------------------------------------------------------------ */ /** -i- App config variables powered by env vars universally, and including some expo contants config on mobile */ export const appConfig = { - isExpoWebLocal: isExpoWebLocal, + // -i- Flags -i- + isLocal: isWebLocalhost || isExpoMobileLocal, + isWebLocalhost, + isExpoWebLocal, + isExpoMobileLocal, + // -i- Server URLs -i- baseURL: process.env.NEXT_PUBLIC_BASE_URL || process.env.EXPO_PUBLIC_BASE_URL || `${fallbackBaseURL}`, // prettier-ignore backendURL: process.env.NEXT_PUBLIC_BACKEND_URL || process.env.EXPO_PUBLIC_BACKEND_URL || `${fallbackBaseURL}`, // prettier-ignore apiURL: process.env.NEXT_PUBLIC_API_URL || process.env.EXPO_PUBLIC_API_URL || `${fallbackBaseURL}/api`, // prettier-ignore @@ -23,5 +36,5 @@ export const appConfig = { /* --- Debug ----------------------------------------------------------------------------------- */ if (Platform.OS !== 'web') { - if (appConfig.baseURL === '') console.warn('appConfig.baseURL is empty, check your environment variables') + if (appConfig.baseURL === '') console.warn('appConfig.baseURL is empty, you may be missing some environment variables') } diff --git a/features/app-core/assets/aetherspaceLogo.png b/features/@app-core/assets/green-stack-logo.png similarity index 100% rename from features/app-core/assets/aetherspaceLogo.png rename to features/@app-core/assets/green-stack-logo.png diff --git a/features/app-core/components/styled.tsx b/features/@app-core/components/styled.tsx similarity index 89% rename from features/app-core/components/styled.tsx rename to features/@app-core/components/styled.tsx index 4a503f1..429cf8b 100644 --- a/features/app-core/components/styled.tsx +++ b/features/@app-core/components/styled.tsx @@ -1,7 +1,7 @@ import { styled } from 'nativewind' import { Text as RNText, View as RNView } from 'react-native' -import { Link as UniversalLink } from '../navigation/Link' -import { Image as UniversalImage } from './Image' +import { Link as UniversalLink } from '@green-stack/core/navigation/Link' +import { Image as UniversalImage } from '@green-stack/core/components/Image' /* --- Primitives ------------------------------------------------------------------------------ */ diff --git a/features/app-core/graphql-env.d.ts b/features/@app-core/graphql-env.d.ts similarity index 100% rename from features/app-core/graphql-env.d.ts rename to features/@app-core/graphql-env.d.ts diff --git a/features/app-core/graphql/graphqlQuery.ts b/features/@app-core/graphql/graphqlQuery.ts similarity index 100% rename from features/app-core/graphql/graphqlQuery.ts rename to features/@app-core/graphql/graphqlQuery.ts diff --git a/features/app-core/graphql/graphqlQuery.types.ts b/features/@app-core/graphql/graphqlQuery.types.ts similarity index 100% rename from features/app-core/graphql/graphqlQuery.types.ts rename to features/@app-core/graphql/graphqlQuery.types.ts diff --git a/features/app-core/graphql/graphqlQuery.web.ts b/features/@app-core/graphql/graphqlQuery.web.ts similarity index 85% rename from features/app-core/graphql/graphqlQuery.web.ts rename to features/@app-core/graphql/graphqlQuery.web.ts index 1bbf29e..d7c1305 100644 --- a/features/app-core/graphql/graphqlQuery.web.ts +++ b/features/@app-core/graphql/graphqlQuery.web.ts @@ -19,6 +19,7 @@ export const graphqlQuery = async >( if (isServer) { try { + // Lazy imports to avoid build issues const [ { graphql }, { executableSchema }, @@ -26,11 +27,15 @@ export const graphqlQuery = async >( import('graphql'), import('./schema'), ]) + // 💡 You might want to build the server-only request context here + console.log('-i- graphqlQuery() called serverside without request context set up.') + // Execute query with the executable schema const { data } = await graphql({ schema: executableSchema, source: queryString, variableValues: variables, }) as { data: R } + // Return resolver response return data } catch (error) { throw new Error(error) diff --git a/features/app-core/graphql/graphqlServer.ts b/features/@app-core/graphql/graphqlServer.ts similarity index 100% rename from features/app-core/graphql/graphqlServer.ts rename to features/@app-core/graphql/graphqlServer.ts diff --git a/features/app-core/graphql/schema.graphql b/features/@app-core/graphql/schema.graphql similarity index 87% rename from features/app-core/graphql/schema.graphql rename to features/@app-core/graphql/schema.graphql index 5502771..e2ea09b 100644 --- a/features/app-core/graphql/schema.graphql +++ b/features/@app-core/graphql/schema.graphql @@ -1,3 +1,5 @@ +## -i- This file was generated by the 'build-graphql-schema' script. Don't modify it manually. + type Query { healthCheck(args: HealthCheckArgs): HealthCheckData! } @@ -36,4 +38,4 @@ type HealthCheckData { schema { query: Query -} \ No newline at end of file +} diff --git a/features/app-core/graphql/schema.ts b/features/@app-core/graphql/schema.ts similarity index 86% rename from features/app-core/graphql/schema.ts rename to features/@app-core/graphql/schema.ts index 4fea6fc..4697658 100644 --- a/features/app-core/graphql/schema.ts +++ b/features/@app-core/graphql/schema.ts @@ -5,6 +5,11 @@ import type { RequestContext } from '../middleware/createRequestContext' import { typeDefs } from './typeDefs' import { healthCheck } from '../resolvers/healthCheck' +/* --- Notes ----------------------------------------------------------------------------------- */ + +// -i- Workspace package '@green-stack/core' expects this file to be at '/features/app-core/graphql/schema.ts' +// -i- Please keep it here to avoid issues + /** --- createResolver() ----------------------------------------------------------------------- */ /** -i- Helper to wrap a resolver function and map context and args to it */ export const createResolver = (resolver: (input: { args: T, context: RequestContext }) => Promise) => { diff --git a/features/app-core/graphql/typeDefs.ts b/features/@app-core/graphql/typeDefs.ts similarity index 87% rename from features/app-core/graphql/typeDefs.ts rename to features/@app-core/graphql/typeDefs.ts index 0c8edfe..49acf0e 100644 --- a/features/app-core/graphql/typeDefs.ts +++ b/features/@app-core/graphql/typeDefs.ts @@ -1,3 +1,5 @@ +// -i- This file was generated by the 'build-graphql-schema' script. Don't modify it manually. + export const typeDefs = `type Query { healthCheck(args: HealthCheckArgs): HealthCheckData! } @@ -36,4 +38,4 @@ type HealthCheckData { schema { query: Query -}` \ No newline at end of file +}` diff --git a/features/app-core/middleware/createRequestContext.ts b/features/@app-core/middleware/createRequestContext.ts similarity index 100% rename from features/app-core/middleware/createRequestContext.ts rename to features/@app-core/middleware/createRequestContext.ts diff --git a/features/app-core/package.json b/features/@app-core/package.json similarity index 66% rename from features/app-core/package.json rename to features/@app-core/package.json index 07fdaa4..871682d 100644 --- a/features/app-core/package.json +++ b/features/@app-core/package.json @@ -2,12 +2,10 @@ "name": "@app/core", "version": "1.0.0", "private": true, - "type": "module", "dependencies": { "@apollo/server": "^4.10.2", "@as-integrations/next": "^3.0.0", "@tanstack/react-query": "^5.29.2", - "@graphql-tools/load-files": "^7.0.0", "gql.tada": "^1.4.3", "graphql-tag": "^2.12.6", "nativewind": "^2.0.11" @@ -18,7 +16,5 @@ "ts-node": "^10.9.2", "typescript": "5.3.3" }, - "scripts": { - "build:schema": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./graphql/buildSchema.ts" - } + "scripts": {} } diff --git a/features/app-core/resolvers/healthCheck.fetcher.ts b/features/@app-core/resolvers/healthCheck.fetcher.ts similarity index 100% rename from features/app-core/resolvers/healthCheck.fetcher.ts rename to features/@app-core/resolvers/healthCheck.fetcher.ts diff --git a/features/app-core/resolvers/healthCheck.fetcher.web.ts b/features/@app-core/resolvers/healthCheck.fetcher.web.ts similarity index 100% rename from features/app-core/resolvers/healthCheck.fetcher.web.ts rename to features/@app-core/resolvers/healthCheck.fetcher.web.ts diff --git a/features/app-core/resolvers/healthCheck.graphql b/features/@app-core/resolvers/healthCheck.graphql similarity index 100% rename from features/app-core/resolvers/healthCheck.graphql rename to features/@app-core/resolvers/healthCheck.graphql diff --git a/features/app-core/resolvers/healthCheck.query.ts b/features/@app-core/resolvers/healthCheck.query.ts similarity index 100% rename from features/app-core/resolvers/healthCheck.query.ts rename to features/@app-core/resolvers/healthCheck.query.ts diff --git a/features/app-core/resolvers/healthCheck.ts b/features/@app-core/resolvers/healthCheck.ts similarity index 100% rename from features/app-core/resolvers/healthCheck.ts rename to features/@app-core/resolvers/healthCheck.ts diff --git a/features/app-core/routes/index.tsx b/features/@app-core/routes/index.tsx similarity index 74% rename from features/app-core/routes/index.tsx rename to features/@app-core/routes/index.tsx index f5e7ded..34d1370 100644 --- a/features/app-core/routes/index.tsx +++ b/features/@app-core/routes/index.tsx @@ -1,4 +1,4 @@ -import { UniversalRouteScreen } from '../navigation/UniversalRouteScreen' +import { UniversalRouteScreen } from '../../../packages/@green-stack-core/navigation/UniversalRouteScreen' import HomeScreen, { queryBridge } from '../screens/HomeScreen' /* --- / --------------------------------------------------------------------------------------- */ diff --git a/features/app-core/screens/HomeScreen.tsx b/features/@app-core/screens/HomeScreen.tsx similarity index 80% rename from features/app-core/screens/HomeScreen.tsx rename to features/@app-core/screens/HomeScreen.tsx index 9d27bdd..30b695d 100644 --- a/features/app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/HomeScreen.tsx @@ -1,7 +1,7 @@ import React from 'react' import { View, Link, Image, P, H3 } from '../components/styled' import { healthCheckFetcher } from '../resolvers/healthCheck.query' -import { HydratedRouteProps, createQueryBridge } from '../navigation/UniversalRouteScreen.helpers' +import { HydratedRouteProps, createQueryBridge } from '@green-stack/core/navigation/UniversalRouteScreen.helpers' /* --- Data Fetching --------------------------------------------------------------------------- */ @@ -23,11 +23,11 @@ const HomeScreen = (props: HydratedRouteProps) => { // -- Render -- return ( - - + +

Expo + Next.js app routing 🚀

-

Open HomeScreen.tsx in features/app-core/screens to start working on your app

- +

Open HomeScreen.tsx in features/@app-core/screens to start working on your app

+ Test navigation diff --git a/features/app-core/screens/ImagesScreen.tsx b/features/@app-core/screens/ImagesScreen.tsx similarity index 85% rename from features/app-core/screens/ImagesScreen.tsx rename to features/@app-core/screens/ImagesScreen.tsx index 06a1e6e..965d2aa 100644 --- a/features/app-core/screens/ImagesScreen.tsx +++ b/features/@app-core/screens/ImagesScreen.tsx @@ -13,19 +13,19 @@ const ImagesScreen = () => { {`< Back`} {/* - 1 - */} - + src=static-require | width: 60 | height: 60 {/* - 2 - */} src=external-url | width: 60 | height: 60 {/* - 3 - */} - + wrapper=50x80, relative | fill=true {/* - 4 - */} - + wrapper=80x60, relative | fill | contentFit=contain
diff --git a/features/app-core/screens/SlugScreen.tsx b/features/@app-core/screens/SlugScreen.tsx similarity index 90% rename from features/app-core/screens/SlugScreen.tsx rename to features/@app-core/screens/SlugScreen.tsx index 0ae8b3c..1e9994a 100644 --- a/features/app-core/screens/SlugScreen.tsx +++ b/features/@app-core/screens/SlugScreen.tsx @@ -1,7 +1,7 @@ import React from 'react' -import { useRouteParams } from '@app/core/navigation/useRouteParams' +import { useRouteParams } from '@green-stack/core/navigation/useRouteParams' import { View, Text, H3, P, Link } from '../components/styled' -import { useRouter } from '../navigation/useRouter' +import { useRouter } from '@green-stack/core/navigation/useRouter' /* --- --------------------------------------------------------------------------- */ @@ -26,7 +26,7 @@ const SlugScreen = (props) => { )}

- Page slug: {slug} + Page slug: {decodeURIComponent(slug as string)} {!!count && ` | count: ${count}`}

diff --git a/features/app-core/screens/UniversalAppProviders.tsx b/features/@app-core/screens/UniversalAppProviders.tsx similarity index 87% rename from features/app-core/screens/UniversalAppProviders.tsx rename to features/@app-core/screens/UniversalAppProviders.tsx index 88c4402..f37ed0e 100644 --- a/features/app-core/screens/UniversalAppProviders.tsx +++ b/features/@app-core/screens/UniversalAppProviders.tsx @@ -1,7 +1,7 @@ 'use client' import React from 'react' -import { CoreContext, CoreContextType } from '../context/CoreContext' -import { UniversalQueryClientProvider } from '../context/UniversalQueryClientProvider' +import { CoreContext, CoreContextType } from '@green-stack/core/context/CoreContext' +import { UniversalQueryClientProvider } from '@green-stack/core/context/UniversalQueryClientProvider' // -i- This is a regular react client component // -i- Use this file for adding universal app providers that work in both Expo and Next.js diff --git a/features/app-core/screens/UniversalRootLayout.tsx b/features/@app-core/screens/UniversalRootLayout.tsx similarity index 100% rename from features/app-core/screens/UniversalRootLayout.tsx rename to features/@app-core/screens/UniversalRootLayout.tsx diff --git a/features/app-core/tailwind.config.js b/features/@app-core/tailwind.config.js similarity index 100% rename from features/app-core/tailwind.config.js rename to features/@app-core/tailwind.config.js diff --git a/features/app-core/tailwind.theme.cjs b/features/@app-core/tailwind.theme.js similarity index 100% rename from features/app-core/tailwind.theme.cjs rename to features/@app-core/tailwind.theme.js diff --git a/features/app-core/tsconfig.json b/features/@app-core/tsconfig.json similarity index 82% rename from features/app-core/tsconfig.json rename to features/@app-core/tsconfig.json index 8693c08..09624a1 100644 --- a/features/app-core/tsconfig.json +++ b/features/@app-core/tsconfig.json @@ -29,9 +29,6 @@ "appConfig.ts", "**/*.ts", "**/*.tsx", - "../../apps/expo/app/ExpoRootLayout.tsx", - "../../apps/next/app/NextRootLayout.tsx", - "../../apps/next/app/ServerStylesProvider.tsx.tsx", ], "exclude": [ "node_modules" diff --git a/package-lock.json b/package-lock.json index 54508ea..4e0dc78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,9 +53,28 @@ "postcss": "8.4.23" } }, + "features/@app-core": { + "name": "@app/core", + "version": "1.0.0", + "dependencies": { + "@apollo/server": "^4.10.2", + "@as-integrations/next": "^3.0.0", + "@tanstack/react-query": "^5.29.2", + "gql.tada": "^1.4.3", + "graphql-tag": "^2.12.6", + "nativewind": "^2.0.11" + }, + "devDependencies": { + "@0no-co/graphqlsp": "^1.9.1", + "tailwindcss": "3.3.2", + "ts-node": "^10.9.2", + "typescript": "5.3.3" + } + }, "features/app-core": { "name": "@app/core", "version": "1.0.0", + "extraneous": true, "dependencies": { "@apollo/server": "^4.10.2", "@as-integrations/next": "^3.0.0", @@ -373,7 +392,7 @@ } }, "node_modules/@app/core": { - "resolved": "features/app-core", + "resolved": "features/@app-core", "link": true }, "node_modules/@app/expo": { @@ -3591,6 +3610,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@graphql-tools/load-files/-/load-files-7.0.0.tgz", "integrity": "sha512-P98amERIwI7FD8Bsq6xUbz9Mj63W8qucfrE/WQjad5jFMZYdFFt46a99FFdfx8S/ZYgpAlj/AZbaTtWLitMgNQ==", + "dev": true, "dependencies": { "globby": "11.1.0", "tslib": "^2.4.0", @@ -3648,6 +3668,10 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, + "node_modules/@green-stack/core": { + "resolved": "packages/@green-stack-core", + "link": true + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "license": "BSD-3-Clause" @@ -13626,7 +13650,8 @@ "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true }, "node_modules/remove-trailing-slash": { "version": "0.1.1", @@ -15072,6 +15097,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "dev": true, "dependencies": { "normalize-path": "^2.1.1" }, @@ -15083,6 +15109,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -15661,6 +15688,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "packages/@green-stack-core": { + "name": "@green-stack/core", + "version": "0.0.1", + "devDependencies": { + "@graphql-tools/load-files": "^7.0.0", + "ts-node": "^10.9.2", + "typescript": "5.3.3" + } } } } diff --git a/package.json b/package.json index c4e2f5b..d009409 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "ios": "npx turbo run ios", "expo:web": "npx turbo run @app/expo#web", "build": "npx turbo run build", - "build:schema": "npx turbo run @app/core#build:schema", + "build:schema": "npx turbo run @green-stack/core#build:schema", "add-dependencies": "npx turbo run @app-expo#add-dependencies", "env:local": "npx turbo run env:local", "turbo:login": "npx turbo login", diff --git a/features/app-core/components/Image.expo.tsx b/packages/@green-stack-core/components/Image.expo.tsx similarity index 97% rename from features/app-core/components/Image.expo.tsx rename to packages/@green-stack-core/components/Image.expo.tsx index 5157e4b..447869c 100644 --- a/features/app-core/components/Image.expo.tsx +++ b/packages/@green-stack-core/components/Image.expo.tsx @@ -1,6 +1,6 @@ import { Image as ExpoImage } from 'expo-image' import { Platform } from 'react-native' -import { parseNativeWindStyles } from '../utils/parseNativeWindStyles' +import { parseNativeWindStyles } from '../styles/parseNativeWindStyles' import type { UniversalImageProps, UniversalImageMethods } from './Image.types' /* --- -------------------------------------------------------------------------------- */ diff --git a/features/app-core/components/Image.next.tsx b/packages/@green-stack-core/components/Image.next.tsx similarity index 94% rename from features/app-core/components/Image.next.tsx rename to packages/@green-stack-core/components/Image.next.tsx index 6bcc6ee..0edd336 100644 --- a/features/app-core/components/Image.next.tsx +++ b/packages/@green-stack-core/components/Image.next.tsx @@ -1,6 +1,6 @@ import NextImage from 'next/image' -import { UniversalImageProps, UniversalImageMethods } from './Image.types' -import { parseNativeWindStyles } from '../utils/parseNativeWindStyles' +import { parseNativeWindStyles } from '../styles/parseNativeWindStyles' +import type { UniversalImageProps, UniversalImageMethods } from './Image.types' /* --- -------------------------------------------------------------------------------- */ diff --git a/features/app-core/components/Image.tsx b/packages/@green-stack-core/components/Image.tsx similarity index 100% rename from features/app-core/components/Image.tsx rename to packages/@green-stack-core/components/Image.tsx index a4ac6d0..4675527 100644 --- a/features/app-core/components/Image.tsx +++ b/packages/@green-stack-core/components/Image.tsx @@ -1,6 +1,6 @@ import React from 'react' -import type { UniversalImageProps, UniversalImageMethods } from './Image.types' import { CoreContext } from '../context/CoreContext' +import type { UniversalImageProps, UniversalImageMethods } from './Image.types' /* --- --------------------------------------------------------------------------------- */ diff --git a/features/app-core/components/Image.types.tsx b/packages/@green-stack-core/components/Image.types.tsx similarity index 100% rename from features/app-core/components/Image.types.tsx rename to packages/@green-stack-core/components/Image.types.tsx diff --git a/features/app-core/context/CoreContext.tsx b/packages/@green-stack-core/context/CoreContext.tsx similarity index 90% rename from features/app-core/context/CoreContext.tsx rename to packages/@green-stack-core/context/CoreContext.tsx index 57d3bf9..0dbc9ee 100644 --- a/features/app-core/context/CoreContext.tsx +++ b/packages/@green-stack-core/context/CoreContext.tsx @@ -3,7 +3,9 @@ import { UniversalLinkProps } from '../navigation/Link.types' import { UniversalRouterMethods } from '../navigation/useRouter.types' import { UniversalRouteScreenProps } from '../navigation/useRouteParams.types' import type { useLocalSearchParams } from 'expo-router' -import { UniversalImageMethods, UniversalImageProps } from '../components/Image.types' +import type { UniversalImageMethods, UniversalImageProps } from '../components/Image.types' + +/* --- Notes ----------------------------------------------------------------------------------- */ // -i- This context's only aim is to provide React Portability & Framework Ejection patterns if required // -i- By allowing you to provide your own custom Link and Router overrides, you could e.g.: diff --git a/features/app-core/context/UniversalQueryClientProvider.tsx b/packages/@green-stack-core/context/UniversalQueryClientProvider.tsx similarity index 100% rename from features/app-core/context/UniversalQueryClientProvider.tsx rename to packages/@green-stack-core/context/UniversalQueryClientProvider.tsx diff --git a/features/app-core/navigation/Link.expo.tsx b/packages/@green-stack-core/navigation/Link.expo.tsx similarity index 94% rename from features/app-core/navigation/Link.expo.tsx rename to packages/@green-stack-core/navigation/Link.expo.tsx index f6aa092..d90bb6e 100644 --- a/features/app-core/navigation/Link.expo.tsx +++ b/packages/@green-stack-core/navigation/Link.expo.tsx @@ -1,5 +1,5 @@ import { Link as ExpoLink } from 'expo-router' -import { parseNativeWindStyles } from '../utils/parseNativeWindStyles' +import { parseNativeWindStyles } from '../styles/parseNativeWindStyles' import type { UniversalLinkProps } from './Link.types' /* --- --------------------------------------------------------------------------------- */ diff --git a/features/app-core/navigation/Link.next.tsx b/packages/@green-stack-core/navigation/Link.next.tsx similarity index 94% rename from features/app-core/navigation/Link.next.tsx rename to packages/@green-stack-core/navigation/Link.next.tsx index 3d4cf57..6c04a71 100644 --- a/features/app-core/navigation/Link.next.tsx +++ b/packages/@green-stack-core/navigation/Link.next.tsx @@ -1,7 +1,7 @@ import NextLink from 'next/link' import type { ComponentProps } from 'react' import type { UniversalLinkProps } from './Link.types' -import { parseNativeWindStyles } from '../utils/parseNativeWindStyles' +import { parseNativeWindStyles } from '../styles/parseNativeWindStyles' /* --- --------------------------------------------------------------------------------- */ diff --git a/features/app-core/navigation/Link.tsx b/packages/@green-stack-core/navigation/Link.tsx similarity index 100% rename from features/app-core/navigation/Link.tsx rename to packages/@green-stack-core/navigation/Link.tsx diff --git a/features/app-core/navigation/Link.types.ts b/packages/@green-stack-core/navigation/Link.types.ts similarity index 100% rename from features/app-core/navigation/Link.types.ts rename to packages/@green-stack-core/navigation/Link.types.ts diff --git a/features/app-core/navigation/UniversalRouteScreen.helpers.ts b/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts similarity index 96% rename from features/app-core/navigation/UniversalRouteScreen.helpers.ts rename to packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts index 2e86c22..4f4173e 100644 --- a/features/app-core/navigation/UniversalRouteScreen.helpers.ts +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts @@ -1,6 +1,5 @@ 'use client' -import type { Query, QueryKey } from '@tanstack/react-query' -import { queryBridge } from '../screens/HomeScreen' +import type { QueryKey } from '@tanstack/react-query' /* --- Types ----------------------------------------------------------------------------------- */ diff --git a/features/app-core/navigation/UniversalRouteScreen.tsx b/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx similarity index 100% rename from features/app-core/navigation/UniversalRouteScreen.tsx rename to packages/@green-stack-core/navigation/UniversalRouteScreen.tsx diff --git a/features/app-core/navigation/UniversalRouteScreen.web.tsx b/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx similarity index 98% rename from features/app-core/navigation/UniversalRouteScreen.web.tsx rename to packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx index d596f2e..b0a5018 100644 --- a/features/app-core/navigation/UniversalRouteScreen.web.tsx +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx @@ -3,7 +3,7 @@ import { use, useState, useEffect } from 'react' import { useQueryClient, useQuery, dehydrate, HydrationBoundary } from '@tanstack/react-query' import type { UniversalRouteProps, QueryFn } from './UniversalRouteScreen.helpers' import { useRouteParams } from './useRouteParams' -import { isExpoWebLocal } from '../appConfig' +import { isExpoWebLocal } from '../../../features/@app-core/appConfig' /* --- Helpers --------------------------------------------------------------------------------- */ diff --git a/features/app-core/navigation/useRouteParams.expo.ts b/packages/@green-stack-core/navigation/useRouteParams.expo.ts similarity index 100% rename from features/app-core/navigation/useRouteParams.expo.ts rename to packages/@green-stack-core/navigation/useRouteParams.expo.ts diff --git a/features/app-core/navigation/useRouteParams.next.ts b/packages/@green-stack-core/navigation/useRouteParams.next.ts similarity index 100% rename from features/app-core/navigation/useRouteParams.next.ts rename to packages/@green-stack-core/navigation/useRouteParams.next.ts diff --git a/features/app-core/navigation/useRouteParams.ts b/packages/@green-stack-core/navigation/useRouteParams.ts similarity index 100% rename from features/app-core/navigation/useRouteParams.ts rename to packages/@green-stack-core/navigation/useRouteParams.ts diff --git a/features/app-core/navigation/useRouteParams.types.ts b/packages/@green-stack-core/navigation/useRouteParams.types.ts similarity index 99% rename from features/app-core/navigation/useRouteParams.types.ts rename to packages/@green-stack-core/navigation/useRouteParams.types.ts index 20b904a..0ddab70 100644 --- a/features/app-core/navigation/useRouteParams.types.ts +++ b/packages/@green-stack-core/navigation/useRouteParams.types.ts @@ -1,3 +1,4 @@ + export type UniversalRouteScreenProps = Record & { params?: Record searchParams?: Record diff --git a/features/app-core/navigation/useRouter.expo.ts b/packages/@green-stack-core/navigation/useRouter.expo.ts similarity index 100% rename from features/app-core/navigation/useRouter.expo.ts rename to packages/@green-stack-core/navigation/useRouter.expo.ts diff --git a/features/app-core/navigation/useRouter.next.ts b/packages/@green-stack-core/navigation/useRouter.next.ts similarity index 100% rename from features/app-core/navigation/useRouter.next.ts rename to packages/@green-stack-core/navigation/useRouter.next.ts diff --git a/features/app-core/navigation/useRouter.ts b/packages/@green-stack-core/navigation/useRouter.ts similarity index 100% rename from features/app-core/navigation/useRouter.ts rename to packages/@green-stack-core/navigation/useRouter.ts diff --git a/features/app-core/navigation/useRouter.types.ts b/packages/@green-stack-core/navigation/useRouter.types.ts similarity index 100% rename from features/app-core/navigation/useRouter.types.ts rename to packages/@green-stack-core/navigation/useRouter.types.ts diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json new file mode 100644 index 0000000..61cd32e --- /dev/null +++ b/packages/@green-stack-core/package.json @@ -0,0 +1,15 @@ +{ + "name": "@green-stack/core", + "version": "0.0.1", + "private": true, + "type": "module", + "dependencies": {}, + "devDependencies": { + "@graphql-tools/load-files": "^7.0.0", + "ts-node": "^10.9.2", + "typescript": "5.3.3" + }, + "scripts": { + "build:schema": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./scripts/build-graphql-schema.ts" + } +} \ No newline at end of file diff --git a/features/app-core/graphql/buildSchema.ts b/packages/@green-stack-core/scripts/build-graphql-schema.ts similarity index 64% rename from features/app-core/graphql/buildSchema.ts rename to packages/@green-stack-core/scripts/build-graphql-schema.ts index f408f9f..89e3028 100644 --- a/features/app-core/graphql/buildSchema.ts +++ b/packages/@green-stack-core/scripts/build-graphql-schema.ts @@ -9,18 +9,20 @@ import { print } from 'graphql' /* --- Constants ------------------------------------------------------------------------------- */ const currentDir = path.dirname(fileURLToPath(import.meta.url)) -const schemaPath = path.resolve(currentDir, 'schema.graphql') -const typeDefsPath = path.resolve(currentDir, 'typeDefs.ts') +const schemaPath = path.resolve(currentDir, '../../../features/@app-core/graphql', 'schema.graphql') +const typeDefsPath = path.resolve(currentDir, '../../../features/@app-core/graphql', 'typeDefs.ts') + +const disclaimer = `-i- This file was generated by the 'build-graphql-schema' script. Don't modify it manually.\n` /** --- createSchemaDefinitions() -------------------------------------------------------------- */ -/** -i- Combine all custom and other (e.g. generated) graphql schema definitions */ +/** -i- Combine all custom and other (e.g. generated) .graphql schema definitions */ export const createSchemaDefinitions = () => { const rootDir = path.resolve(currentDir, '../../..') const schemaPathPattern = `${rootDir}/(features|packages)/**/!(schema).graphql` const customGraphQLDefinitions = loadFilesSync(schemaPathPattern) return mergeTypeDefs([ ...customGraphQLDefinitions, - /* other typedefs? */ + /* TODO: Support other custom typedefs? */ ]) } @@ -29,8 +31,8 @@ export const createSchemaDefinitions = () => { const buildSchemaDefinitions = async () => { const schemaDefinitions = createSchemaDefinitions() const typeDefsString = print(schemaDefinitions) - fs.writeFileSync(schemaPath, typeDefsString) - fs.writeFileSync(typeDefsPath, `export const typeDefs = \`${typeDefsString}\``) + fs.writeFileSync(schemaPath, `## ${disclaimer}\n${typeDefsString}\n`) + fs.writeFileSync(typeDefsPath, `// ${disclaimer}\nexport const typeDefs = \`${typeDefsString}\`\n`) } buildSchemaDefinitions() diff --git a/features/app-core/utils/parseNativeWindStyles.ts b/packages/@green-stack-core/styles/parseNativeWindStyles.ts similarity index 100% rename from features/app-core/utils/parseNativeWindStyles.ts rename to packages/@green-stack-core/styles/parseNativeWindStyles.ts diff --git a/packages/@green-stack-core/tsconfig.json b/packages/@green-stack-core/tsconfig.json new file mode 100644 index 0000000..fcf18a6 --- /dev/null +++ b/packages/@green-stack-core/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@app/core/tsconfig", + "include": [ + "**/*.ts", + "**/*.tsx", + "../../features/app-core/graphql-env.d.ts" + ], + "exclude": ["node_modules"] +} diff --git a/turbo.json b/turbo.json index 4f3ea8f..49b292d 100644 --- a/turbo.json +++ b/turbo.json @@ -2,20 +2,20 @@ "$schema": "https://turbo.build/schema.json", "pipeline": { "build": { - "dependsOn": ["@app/core#build:schema"], + "dependsOn": ["@green-stack/core#build:schema"], "outputs": [".next/**", "!.next/cache/**"], "cache": true }, "dev": { - "dependsOn": ["@app/core#build:schema"], + "dependsOn": ["@green-stack/core#build:schema"], "cache": false }, "@app/next#dev": { - "dependsOn": ["@app/core#build:schema"], + "dependsOn": ["@green-stack/core#build:schema"], "cache": false }, "@app/expo#dev": { - "dependsOn": ["@app/core#build:schema"], + "dependsOn": ["@green-stack/core#build:schema"], "cache": false }, "android": { @@ -25,13 +25,13 @@ "cache": false }, "@app/expo#web": { - "dependsOn": ["@app/core#build:schema"], + "dependsOn": ["@green-stack/core#build:schema"], "cache": false }, "@app-expo#add-dependencies": { "cache": false }, - "@app/core#build:schema": { + "@green-stack/core#build:schema": { "outputs": ["**/schema.graphql", "**/schema.ts", "**/graphql-env.d.ts"], "inputs": ["**/*.ts", "**/*.graphql"], "cache": true From 5232f9b00fab81abb4e6e98eb66c9c89e7ea4736 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Mon, 13 May 2024 00:43:36 +0200 Subject: [PATCH 014/126] feat: Add Zod schemas as Source of Truth basis --- features/@app-core/package.json | 4 +- package-lock.json | 12 +- .../navigation/useRouteParams.next.ts | 2 +- packages/@green-stack-core/package.json | 9 +- packages/@green-stack-core/schemas/index.ts | 434 ++++++++++++++++++ 5 files changed, 453 insertions(+), 8 deletions(-) create mode 100644 packages/@green-stack-core/schemas/index.ts diff --git a/features/@app-core/package.json b/features/@app-core/package.json index 871682d..5a01ba5 100644 --- a/features/@app-core/package.json +++ b/features/@app-core/package.json @@ -13,8 +13,6 @@ "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", "tailwindcss": "3.3.2", - "ts-node": "^10.9.2", "typescript": "5.3.3" - }, - "scripts": {} + } } diff --git a/package-lock.json b/package-lock.json index 4e0dc78..fac293f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,7 +67,6 @@ "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", "tailwindcss": "3.3.2", - "ts-node": "^10.9.2", "typescript": "5.3.3" } }, @@ -15689,9 +15688,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "3.23.7", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.7.tgz", + "integrity": "sha512-NBeIoqbtOiUMomACV/y+V3Qfs9+Okr18vR5c/5pHClPpufWOrsx8TENboDPe265lFdfewX2yBtNTLPvnmCxwog==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "packages/@green-stack-core": { "name": "@green-stack/core", "version": "0.0.1", + "dependencies": { + "zod": "^3.23.7" + }, "devDependencies": { "@graphql-tools/load-files": "^7.0.0", "ts-node": "^10.9.2", diff --git a/packages/@green-stack-core/navigation/useRouteParams.next.ts b/packages/@green-stack-core/navigation/useRouteParams.next.ts index 043041c..ae9cf24 100644 --- a/packages/@green-stack-core/navigation/useRouteParams.next.ts +++ b/packages/@green-stack-core/navigation/useRouteParams.next.ts @@ -1,5 +1,5 @@ -import type { UniversalRouteScreenProps } from './useRouteParams.types' import type { useLocalSearchParams } from 'expo-router' +import type { UniversalRouteScreenProps } from './useRouteParams.types' /** --- useRouteParams() ----------------------------------------------------------------------- */ /** -i- Gets the route search and query params on both web and mobile */ diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index 61cd32e..f9ffd3f 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -3,13 +3,16 @@ "version": "0.0.1", "private": true, "type": "module", - "dependencies": {}, + "dependencies": { + "zod": "^3.23.7" + }, "devDependencies": { "@graphql-tools/load-files": "^7.0.0", "ts-node": "^10.9.2", "typescript": "5.3.3" }, "scripts": { - "build:schema": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./scripts/build-graphql-schema.ts" + "build:schema": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./scripts/build-graphql-schema.ts", + "test:schemas": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./schemas/index.ts" } -} \ No newline at end of file +} diff --git a/packages/@green-stack-core/schemas/index.ts b/packages/@green-stack-core/schemas/index.ts new file mode 100644 index 0000000..cdea369 --- /dev/null +++ b/packages/@green-stack-core/schemas/index.ts @@ -0,0 +1,434 @@ +import { z, ZodObject, ZodType } from 'zod' + +/* --- Types ----------------------------------------------------------------------------------- */ + +export const BASE_TYPE_MAP = { + // - Primitives - + ZodString: 'String', + ZodNumber: 'Number', + ZodBoolean: 'Boolean', + ZodDate: 'Date', + // - Advanced & Objectlikes - + ZodEnum: 'String', + ZodArray: 'Array', + ZodObject: 'Object', + ZodRecord: 'Object', + // - Mostly Supported, Experimental - + ZodNull: 'Null', // Serialised as null + ZodUndefined: 'Undefined', // Omitted unless combined + ZodAny: 'Any', // Serialised as JSON + ZodTuple: 'Any', // Serialised as JSON + ZodUnion: 'Any', // Serialised as JSON + ZodLiteral: 'Any', // We'll attempt to narrow down based on literal value, serialised as JSON as fallback + // - Might Work, Not Advised - + ZodUnknown: 'Any', // Serialised as JSON, can break if value is not JSON serializable + ZodBigInt: 'Number', // Cannot be JSON serialized, use at own risk + ZodSymbol: 'String', // Very experimental + ZodIntersection: 'Any', // Unsure how to handle, will attempt to serialize as JSON + ZodNativeEnum: 'Any', // Technically 'String' or 'Number', but we can't really know which one + ZodDiscriminatedUnion: 'Any', // Technically 'Object' + ZodMap: 'Any', // Technically 'Object', but JSON serialization is tricky + ZodSet: 'Array', // Technically 'Array', but JSON serialization is tricky + // - Avoid in Schemas - + ZodVoid: 'Undefined', // Not sure when or where you'd use this outside of functions + ZodFunction: 'Function', // Cannot be JSON serialized + ZodPromise: 'Promise', // Cannot be JSON serialized + ZodLazy: 'Any', // Unsure how to handle, attempted to serialize as JSON + ZodEffects: 'Any', // Unsure how to handle, attempted to serialize as JSON +} as const + +export type ZOD_TYPE = keyof typeof BASE_TYPE_MAP +export type BASE_TYPE = typeof BASE_TYPE_MAP[ZOD_TYPE] +export type SCHEMA_TYPE = (ZOD_TYPE | BASE_TYPE) & {} + +/* --- Zod extensions -------------------------------------------------------------------------- */ + +declare module 'zod' { + interface ZodType { + metadata(): Record, + addMeta(meta: Record): this + example(exampleValue: T): this + eg(exampleValue: T): this + ex(exampleValue: T): this + introspect(): Record + } + + interface ZodObject< + T extends z.ZodRawShape, + UnknownKeys extends z.UnknownKeysParam = z.UnknownKeysParam, + Catchall extends z.ZodTypeAny = z.ZodTypeAny, + Output = z.objectOutputType, + Input = z.objectInputType + > { + nameSchema(name: string): this + extendSchema(name: string, shape: S): ZodObject + pickSchema>( + schemaName: string, + mask: Mask + ): z.ZodObject>, UnknownKeys, Catchall> + omitSchema>( + schemaName: string, + mask: Mask + ): z.ZodObject, UnknownKeys, Catchall> + applyDefaults = Record>( + data: D, + logErrors?: boolean + ): D & Output + } +} + +// -i- Apply extensions if not added yet + +if (!ZodType.prototype.metadata) { + + ZodType.prototype.metadata = function () { + return this._def.metadata || {} + } + + ZodType.prototype.addMeta = function (meta: Record) { + const This = (this as any).constructor + return new This({ + ...this._def, + metadata: { ...this._def.metadata, ...meta } + }) + } + + ZodType.prototype.example = function (exampleValue) { + return this.addMeta({ exampleValue }) + } + ZodType.prototype.eg = ZodType.prototype.example + ZodType.prototype.ex = ZodType.prototype.example + + const getStackedMeta = (zodType: Z, stackedMeta = []) => { + // Start with actual metadata + const meta = { ...zodType.metadata() } + // Include the type in the stack, we'll remove it again later + meta.zodType = zodType + const typeName = zodType._def.typeName + // Check optionality + if (typeName === 'ZodOptional') meta.isOptional = true + if (typeName === 'ZodDefault') meta.isOptional = true + if (typeName === 'ZodNullable') meta.isNullable = true + // Figure out the default & example values if there are any + if (zodType._def.defaultValue) meta.defaultValue = zodType._def.defaultValue() + if (meta.defaultValue instanceof Set) meta.defaultValue = Array.from(meta.defaultValue) + if (meta.exampleValue instanceof Set) meta.exampleValue = Array.from(meta.exampleValue) + if (meta.defaultValue instanceof Map) meta.defaultValue = Object.fromEntries(meta.defaultValue) + if (meta.exampleValue instanceof Map) meta.exampleValue = Object.fromEntries(meta.exampleValue) + // Add the description if there is one + if (zodType._def.description) meta.description = zodType._def.description + // Add array metadata if present + if (zodType._def.minLength) meta.minLength = zodType._def.minLength.value + if (zodType._def.maxLength) meta.maxLength = zodType._def.maxLength.value + if (zodType._def.exactLength) meta.exactLength = zodType._def.exactLength.value + // Add string metadata if present + const stringType = zodType as unknown as z.ZodString + if (stringType.minLength) meta.minLength = stringType.minLength + if (stringType.maxLength) meta.maxLength = stringType.maxLength + // Add number metadata if present + const numberType = zodType as unknown as z.ZodNumber + if (numberType.minValue) meta.minValue = numberType.minValue + if (numberType.maxValue) meta.maxValue = numberType.maxValue + if (numberType.isInt) meta.isInt = numberType.isInt + // Literals + if (typeName === 'ZodLiteral') { + const _zodType = zodType as unknown as z.ZodLiteral + meta.literalValue = _zodType.value + if (typeof meta.literalValue === 'string') meta.baseType = 'String' + if (typeof meta.literalValue === 'number') meta.baseType = 'Number' + if (typeof meta.literalValue === 'boolean') meta.baseType = 'Boolean' + if (typeof meta.literalValue === 'object') meta.baseType = 'Object' + if (meta.literalValue instanceof Date) meta.baseType = 'Date' + if (Array.isArray(meta.literalValue)) meta.baseType = 'Array' + } + // Enums + if (typeName === 'ZodEnum') { + const _zodType = zodType as unknown as z.ZodEnum + meta.schema = _zodType.options?.reduce((acc, value) => { + return { ...acc, [value]: value } + }, {}) + } + // Tuples + if (typeName === 'ZodTuple') { + const _zodType = zodType as unknown as z.ZodTuple + meta.schema = _zodType.items.map((item) => item.introspect?.()).filter(Boolean) + } + // Unions + if (typeName === 'ZodUnion') { + const _zodType = zodType as unknown as z.ZodUnion + meta.schema = _zodType.options.map((option) => option.introspect?.()).filter(Boolean) + } + // Intersections + if (typeName === 'ZodIntersection') { + const _zodType = zodType as unknown as z.ZodIntersection + meta.schema = { + left: _zodType._def.left.introspect?.(), + right: _zodType._def.right.introspect?.(), + } + } + // Discriminated Unions + if (typeName === 'ZodDiscriminatedUnion') { + const _zodType = zodType as unknown as z.ZodDiscriminatedUnion + meta.schema = _zodType.options.reduce((acc, option, i) => { + return { ...acc, types: [...acc.types, option.introspect?.()] } + }, { discriminator: _zodType._def.discriminator, types: [] }) + } + // Arrays + if (typeName === 'ZodArray') { + const _zodType = zodType as unknown as z.ZodArray + meta.schema = _zodType._def.type.introspect?.() + } + // Schemas & Objects + if (typeName === 'ZodObject') { + const _zodType = zodType as unknown as z.ZodObject + meta.schema = Object.entries(_zodType.shape).reduce((acc, [key, fieldType]) => { + // @ts-ignore + return { ...acc, [key]: fieldType.introspect?.() } + }, {}) + } + // Records + if (typeName === 'ZodRecord') { + const _zodType = zodType as unknown as z.ZodRecord + meta.schema = _zodType._def.valueType.introspect?.() + } + // Sets + if (typeName === 'ZodSet') { + const _zodType = zodType as unknown as z.ZodSet + meta.schema = _zodType._def.valueType.introspect?.() + } + // Maps + if (typeName === 'ZodMap') { + const _zodType = zodType as unknown as z.ZodMap + meta.schema = { + key: _zodType._def.keyType.introspect?.(), + value: _zodType._def.valueType.introspect?.(), + } + } + // Functions + if (typeName === 'ZodFunction') { + const _zodType = zodType as unknown as z.ZodFunction + meta.schema = { + input: _zodType._def.args.introspect?.(), + output: _zodType._def.returns.introspect?.(), + } + } + // Promises + if (typeName === 'ZodPromise') { + const _zodType = zodType as unknown as z.ZodPromise + meta.schema = _zodType._def.type.introspect?.() + } + // Add the metadata for the current type + const currentMetaStack = [...stackedMeta, meta] + // If we've reached the innermost type, end recursion, return all metadata + if (!zodType._def.innerType) return currentMetaStack + // If there's another inner layer, unwrap it, add to the stack + return getStackedMeta(zodType._def.innerType, currentMetaStack) + } + + ZodType.prototype.introspect = function () { + // Figure out nested metadata + const stackedMeta = getStackedMeta(this) + const reversedMeta = [...stackedMeta].reverse() + const [innermostMeta] = reversedMeta + const typeName = innermostMeta.zodType._def.typeName + const baseType = BASE_TYPE_MAP[typeName as ZOD_TYPE] + const flatMeta = reversedMeta.reduce((acc, { zodType: _, ...meta }) => ({ + ...acc, + ...meta, + }), {}) + // Return all introspected metadata + const meta = { ...flatMeta, typeName, baseType } + return meta + } + + ZodObject.prototype.nameSchema = function (name: string) { + return this.addMeta({ name }) + } + + ZodObject.prototype.extendSchema = function (name: string, shape) { + return this.extend(shape).nameSchema(name) + } + + ZodObject.prototype.pickSchema = function (schemaName, picks) { + return this.pick(picks).nameSchema(schemaName) + } + + ZodObject.prototype.omitSchema = function (schemaName, picks) { + return this.omit(picks).nameSchema(schemaName) + } + + ZodObject.prototype.applyDefaults = function (data, logErrors = false) { + const thisSchema = this.extend({}) + const result = thisSchema.safeParse(data) + if (!result.success && logErrors) console.warn(JSON.stringify(result.error, null, 2)) // @ts-ignore + return { ...data, ...result.data } as D & (typeof thisSchema)['_type'] + } +} + +/* --- Schema Definitions ---------------------------------------------------------------------- */ + +export const schema = (name: string, shape: S) => { + return z.object(shape).nameSchema(name) +} + +/* --- Test Primitives ------------------------------------------------------------------------- */ + +// const Primitives = schema('Primitives', { +// str: z.string().min(1).max(5).nullish().default('test').example('hello').describe('String'), +// num: z.number().min(1).max(50).nullable().default(1).example(42).describe('Number'), +// bln: z.boolean().optional().default(false).example(true).describe('Boolean'), +// date: z.date().default(new Date()).example(new Date('2021-01-01')).describe('Date'), +// }) + +// type Primitives = z.infer +// // ^? + +// Log out the introspection result +// console.log(JSON.stringify(Primitives.introspect(), null, 4)) + +/* --- Test Advanced Types --------------------------------------------------------------------- */ + +// const AdvancedTypes = schema('AdvancedTypes', { +// enum: z.enum(['A', 'B', 'C']).default('A').example('B'), +// tuple: z.tuple([z.string(), z.number()]).default(['hello', 42]).example(['world', 24]), +// union: z.union([z.string(), z.number()]).default('hello').example(42), +// array: z.array(z.string()).min(0).max(5).length(1).default([]).example(['world']), +// }) + +// type AdvancedTypes = z.infer +// // ^? + +// // Log out the introspection result +// console.log(JSON.stringify(AdvancedTypes.introspect(), null, 4)) + +/* --- Test Objectlike Types ------------------------------------------------------------------- */ + +// const Objectlikes = schema('Objectlikes', { +// obj: z.object({ +// str: z.string().default('test').example('hello'), +// num: z.number().default(0).example(42), +// }) +// .nameSchema('SomeObject') +// .default({ str: 'hello', num: 42 }) +// .example({ str: 'world', num: 24 }), +// rec: z.record(z.string(), z.number()).default({}).example({ key: 5 }), +// }) + +// type Objectlikes = z.infer +// // ^? + +// Log out the introspection result +// console.log(JSON.stringify(Objectlikes.introspect(), null, 4)) + +/* --- Test Experimental Types ----------------------------------------------------------------- */ + +// enum TestEnum { D = 'D', E = 'E' } + +// const map = new Map() +// map.set('key', 5) + +// const ExperimentalTypes = schema('ExperimentalTypes', { +// bigInt: z.bigint(), +// symbol: z.symbol(), +// null: z.null(), +// undefined: z.undefined(), +// void: z.void(), +// any: z.any(), +// unknown: z.unknown(), +// literal: z.literal('test'), +// intersection: z.intersection(z.union([z.number(), z.string()]), z.union([z.number(), z.boolean()])), +// nativeEnum: z.nativeEnum(TestEnum).default(TestEnum.D).example(TestEnum.E), +// discriminatedUnion: z.discriminatedUnion('type', [ +// z.object({ type: z.literal('A'), a: z.string() }), +// z.object({ type: z.literal('B'), b: z.number() }), +// ]), +// set: z.set(z.string()).default(new Set([])).example(new Set(['world'])), +// map: z.map(z.string(), z.number()).default(map).example(map), +// instanceof: z.instanceof(Date).default(new Date()).example(new Date('2021-01-01')), +// custom: z.custom((data) => data), +// }) + +// type ExperimentalTypes = z.infer +// // ^? + +// // Log out the introspection result +// console.log(JSON.stringify(ExperimentalTypes.introspect(), null, 4)) + +/* --- Test Executables ------------------------------------------------------------------------ */ + +// const Executables = schema('Executables', { +// func: z.function(z.tuple([z.string()]), z.number()).default(() => 42).example(() => 24), +// promise: z.promise(z.string()).default(Promise.resolve('hello')).example(Promise.resolve('world')), +// lazy: z.lazy(() => z.string()).default('hello').example('world'), +// }) + +// type Executables = z.infer +// // ^? + +// // Log out the introspection result +// console.log(JSON.stringify(Executables.introspect(), null, 4)) + +/* --- Test Defaults --------------------------------------------------------------------------- */ + +// const Defaults = schema('Defaults', { +// str: z.string().default('test'), +// num: z.number().default(1), +// bln: z.boolean().default(false), +// date: z.date().default(new Date()), +// enum: z.enum(['A', 'B', 'C']).default('A'), +// tuple: z.tuple([z.string(), z.number()]).default(['hello', 42]), +// union: z.union([z.string(), z.number()]).default('hello'), +// array: z.array(z.string()).default([]), +// }) + +// type Defaults = z.infer +// // ^? + +// // Log out the defaults +// console.log(Defaults.applyDefaults({ str: 'hello defaults' })) + +/* --- Test Derived Schemas -------------------------------------------------------------------- */ + +// const PrimitiveSchema = schema('PrimitiveSchema', { +// str: z.string(), +// num: z.number(), +// bln: z.boolean(), +// }) + +// const ExtendedSchema = PrimitiveSchema.extendSchema('ExtendedSchema', { +// date: z.date(), +// }) + +// type ExtendedSchema = z.infer +// // ^? + +// // Log out the introspection result +// console.log(JSON.stringify(ExtendedSchema.introspect(), null, 4)) + +// // - + +// const OmittedSchema = PrimitiveSchema.omitSchema('OmittedSchema', { +// num: true, +// }) + +// type OmittedSchema = z.infer +// // ^? + +// // Log out the introspection result +// console.log(JSON.stringify(OmittedSchema.introspect(), null, 4)) + +// // - + +// const PickedSchema = PrimitiveSchema.pickSchema('PickedSchema', { +// num: true, +// }) + +// type PickedSchema = z.infer +// // ^? + +// // Log out the introspection result +// console.log(JSON.stringify(PickedSchema.introspect(), null, 4)) + +/* --- Reexports ------------------------------------------------------------------------------- */ + +export { z } from 'zod' From 3385aae4201a95e694c0dbcd88d4515a052e568c Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sat, 18 May 2024 12:50:33 +0200 Subject: [PATCH 015/126] switch to strict typing --- features/@app-core/graphql/schema.ts | 4 +- features/@app-core/resolvers/healthCheck.ts | 2 +- features/@app-core/screens/HomeScreen.tsx | 8 +-- features/@app-core/screens/SlugScreen.tsx | 2 +- features/@app-core/tsconfig.json | 2 +- .../components/Image.next.tsx | 6 +- .../components/Image.types.tsx | 4 +- .../@green-stack-core/context/CoreContext.tsx | 2 +- .../UniversalRouteScreen.helpers.ts | 67 ++++++++++++++----- .../navigation/UniversalRouteScreen.tsx | 10 ++- .../navigation/UniversalRouteScreen.web.tsx | 12 ++-- .../navigation/useRouter.next.ts | 2 +- packages/@green-stack-core/schemas/index.ts | 43 +++++++++--- packages/@green-stack-core/tsconfig.json | 3 +- packages/@green-stack-core/types.ts | 25 +++++++ 15 files changed, 141 insertions(+), 51 deletions(-) create mode 100644 packages/@green-stack-core/types.ts diff --git a/features/@app-core/graphql/schema.ts b/features/@app-core/graphql/schema.ts index 4697658..2d2374a 100644 --- a/features/@app-core/graphql/schema.ts +++ b/features/@app-core/graphql/schema.ts @@ -12,8 +12,8 @@ import { healthCheck } from '../resolvers/healthCheck' /** --- createResolver() ----------------------------------------------------------------------- */ /** -i- Helper to wrap a resolver function and map context and args to it */ -export const createResolver = (resolver: (input: { args: T, context: RequestContext }) => Promise) => { - return async (parent: unknown, { args }: { args: T }, context: RequestContext, info: unknown) => { +export const createResolver = (resolver: (input: { args: A, context: RequestContext }) => Promise) => { + return async (parent: unknown, { args }: { args: A }, context: RequestContext, info: unknown) => { return resolver({ args, context: { ...context, parent, info } }) } } diff --git a/features/@app-core/resolvers/healthCheck.ts b/features/@app-core/resolvers/healthCheck.ts index 56cd6a4..79117dd 100644 --- a/features/@app-core/resolvers/healthCheck.ts +++ b/features/@app-core/resolvers/healthCheck.ts @@ -61,7 +61,7 @@ export const healthCheck = async ({ args, context }: HealthCheckInputs) => { const r = req as Request const rn = req as NextRequest const requestHost = rn?.headers?.get?.('host') - const requestProtocol = rn?.headers?.get?.['x-forwarded-proto'] ?? 'http' + const requestProtocol = rn?.headers?.get?.('x-forwarded-proto') ?? 'http' const requestURL = r?.url || `${requestProtocol}://${requestHost}/api/health` const { baseURL, backendURL, apiURL, graphURL } = appConfig diff --git a/features/@app-core/screens/HomeScreen.tsx b/features/@app-core/screens/HomeScreen.tsx index 30b695d..7bbc559 100644 --- a/features/@app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/HomeScreen.tsx @@ -6,12 +6,10 @@ import { HydratedRouteProps, createQueryBridge } from '@green-stack/core/navigat /* --- Data Fetching --------------------------------------------------------------------------- */ export const queryBridge = createQueryBridge({ - routeParamsToQueryKey: (routeParams: { echo: string }) => ['healthCheck', routeParams.echo], - routeParamsToQueryInput: (routeParams: { echo: string }) => ({ echo: routeParams.echo }), routeDataFetcher: healthCheckFetcher, - fetcherDataToProps: (fetcherData: Awaited>) => ({ - serverHealth: fetcherData - }), + routeParamsToQueryKey: (routeParams) => ['healthCheck', routeParams?.echo], + routeParamsToQueryInput: (routeParams) => ({ echo: routeParams?.echo }), + fetcherDataToProps: (fetcherData) => ({ serverHealth: fetcherData }), }) /* --- --------------------------------------------------------------------------- */ diff --git a/features/@app-core/screens/SlugScreen.tsx b/features/@app-core/screens/SlugScreen.tsx index 1e9994a..73e548f 100644 --- a/features/@app-core/screens/SlugScreen.tsx +++ b/features/@app-core/screens/SlugScreen.tsx @@ -5,7 +5,7 @@ import { useRouter } from '@green-stack/core/navigation/useRouter' /* --- --------------------------------------------------------------------------- */ -const SlugScreen = (props) => { +const SlugScreen = (props: { slug?: string, count?: string }) => { // Routing const { slug, count = '' } = useRouteParams(props) const { canGoBack, back, push, navigate, replace, setParams } = useRouter() diff --git a/features/@app-core/tsconfig.json b/features/@app-core/tsconfig.json index 09624a1..6c46490 100644 --- a/features/@app-core/tsconfig.json +++ b/features/@app-core/tsconfig.json @@ -7,7 +7,7 @@ ], "allowJs": true, "skipLibCheck": true, - "strict": false, + "strict": true, "noEmit": true, "incremental": true, "esModuleInterop": true, diff --git a/packages/@green-stack-core/components/Image.next.tsx b/packages/@green-stack-core/components/Image.next.tsx index 0edd336..373c62f 100644 --- a/packages/@green-stack-core/components/Image.next.tsx +++ b/packages/@green-stack-core/components/Image.next.tsx @@ -50,9 +50,9 @@ const Image = (props: UniversalImageProps): JSX.Element => { (props: any) => { export const CoreContext = React.createContext({ contextImage: createDummyComponent('contextImage') as any, contextLink: createDummyComponent('contextLink'), - contextRouter: null, + contextRouter: null as unknown as UniversalRouterMethods, useContextRouteParams: () => ({}), }) diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts b/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts index 4f4173e..8b3a3b6 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts @@ -3,35 +3,60 @@ import type { QueryKey } from '@tanstack/react-query' /* --- Types ----------------------------------------------------------------------------------- */ -export type QueryFn = (args: Record) => Promise> +export type QueryFn< + ARGS extends Record = Record, + RES extends Record = Record +> = (args: ARGS) => Promise -export type QueryBridgeConfig = { +export type QueryBridgeConfig< + ARGS extends Record = Record, + RES extends Record = Record, + Fetcher extends QueryFn = QueryFn, + FetcherArgs = Parameters[0], + FetcherToProps extends (data: Awaited>) => unknown = (data: Awaited>) => Awaited>, + ParamsToQueryKey extends (routeParams: Partial) => QueryKey = (routeParams: Partial) => QueryKey, + ParamsToQueryInput extends (routeParams: Partial) => FetcherArgs = (routeParams: Partial) => FetcherArgs +> = { /** -i- Function to turn any route params into the query key for the `routeDataFetcher()` query */ - routeParamsToQueryKey: (routeParams: Partial[0]>) => QueryKey + routeParamsToQueryKey: ParamsToQueryKey /** -i- Function to turn any route params into the input args for the `routeDataFetcher()` query */ - routeParamsToQueryInput: (routeParams: Partial[0]>) => Parameters[0] + routeParamsToQueryInput: ParamsToQueryInput /** -i- Fetcher to prefetch data for the Page and QueryClient during SSR, or fetch it clientside if browser / mobile */ routeDataFetcher: Fetcher /** -i- Function transform fetcher data into props */ - fetcherDataToProps?: (data: Awaited>) => Record + fetcherDataToProps?: FetcherToProps /** -i- Initial data provided to the QueryClient */ initialData?: ReturnType } -export type UniversalRouteProps = { +export type UniversalRouteProps< + ARGS extends Record = Record, + RES extends Record = Record, + Fetcher extends QueryFn = QueryFn, + FetcherArgs = Parameters[0], + FetcherToProps extends (data: Awaited>) => unknown = (data: Awaited>) => Awaited>, + ParamsToQueryKey extends (routeParams: Partial) => QueryKey = (routeParams: Partial) => QueryKey, + ParamsToQueryInput extends (routeParams: Partial) => FetcherArgs = (routeParams: Partial) => FetcherArgs +> = { /** -i- Optional params passed by the Next.js app router, in Expo we get these from `useRouteParams()` */ - params?: Partial[0]> + params?: Partial /** -i- Optional search params passed by the Next.js app router, in Expo we get these from `useRouteParams()` */ - searchParams?: Partial[0]> + searchParams?: Partial /** -i- Configuration for the query bridge */ - queryBridge: QueryBridgeConfig + queryBridge: QueryBridgeConfig /** -i- The screen to render for this route */ routeScreen: React.ComponentType } export type HydratedRouteProps< - QueryBridge extends QueryBridgeConfig -> = ReturnType & { + QueryBridge extends { + fetcherDataToProps: (fetcherData: any) => any, + routeDataFetcher: (...args: any[]) => Promise, + routeParamsToQueryKey: any, + routeParamsToQueryInput: any + initialData?: any + } +> = ReturnType> & { /** -i- The route key for the query */ queryKey: QueryKey /** -i- The input args for the query */ @@ -44,15 +69,21 @@ export type HydratedRouteProps< /** --- createQueryBridge() -------------------------------------------------------------------- */ /** -i- Util to create a typed bridge between a fetcher and a route's props */ -export const createQueryBridge = >( - queryBridge: QueryBridge +export const createQueryBridge = < + ARGS extends Record = Record, + RES extends Record = Record, + Fetcher extends QueryFn = QueryFn, + FetcherArgs = Parameters[0], + FetcherData = Awaited['routeDataFetcher']>>, + FetcherToProps extends (fetcherData: Awaited>) => unknown = (fetcherData: Awaited>) => Awaited>, + ParamsToQueryKey extends (routeParams: Partial) => QueryKey = (routeParams: Partial) => QueryKey, + ParamsToQueryInput extends (routeParams: Partial) => FetcherArgs = (routeParams: Partial) => FetcherArgs +>( + queryBridge: QueryBridgeConfig ) => { - type FetcherData = Awaited> - type ReturnTypeOfFunction = F extends ((args: A) => infer R) ? R : FetcherData - type RoutePropsFromFetcher = ReturnTypeOfFunction - const fetcherDataToProps = queryBridge.fetcherDataToProps || ((data: FetcherData) => data) + const fetcherDataToProps = queryBridge.fetcherDataToProps || ((fetcherData: FetcherData) => fetcherData) return { ...queryBridge, - fetcherDataToProps: fetcherDataToProps as ((data: FetcherData) => RoutePropsFromFetcher), + fetcherDataToProps: fetcherDataToProps as FetcherToProps, } } diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx b/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx index cf55b60..9b42490 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx @@ -5,7 +5,11 @@ import { useRouteParams } from './useRouteParams' /** --- -------------------------------------------------------------------- */ /** -i- Universal Route Wrapper to provide query data on mobile, the browser and during server rendering */ -export const UniversalRouteScreen = (props: UniversalRouteProps) => { +export const UniversalRouteScreen = < + ARGS extends Record = Record, + RES extends Record = Record, + Fetcher extends QueryFn = QueryFn +>(props: UniversalRouteProps) => { // Props const { params: routeParams, searchParams, queryBridge, routeScreen: RouteScreen, ...screenProps } = props const { routeParamsToQueryKey, routeParamsToQueryInput, routeDataFetcher } = queryBridge @@ -16,8 +20,8 @@ export const UniversalRouteScreen = (props: UniversalRo // Vars const queryParams = { ...routeParams, ...searchParams, ...expoRouterParams } - const queryKey = routeParamsToQueryKey(queryParams) - const queryInput = routeParamsToQueryInput(queryParams) + const queryKey = routeParamsToQueryKey(queryParams as any) + const queryInput = routeParamsToQueryInput(queryParams as any) // -- Query -- diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx b/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx index b0a5018..631e15b 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx @@ -23,7 +23,11 @@ const getDehydratedSSRState = () => { /** --- ---------------------------------------------------------------- */ /** -i- Universal Route Wrapper to provide query data on mobile, the browser and during server rendering */ -export const UniversalRouteScreen = (props: UniversalRouteProps) => { +export const UniversalRouteScreen = < + ARGS extends Record = Record, + RES extends Record = Record, + Fetcher extends QueryFn = QueryFn +>(props: UniversalRouteProps) => { // Props const { params: routeParams, searchParams, queryBridge, routeScreen: RouteScreen, ...screenProps } = props const { routeParamsToQueryKey, routeParamsToQueryInput, routeDataFetcher } = queryBridge @@ -42,8 +46,8 @@ export const UniversalRouteScreen = (props: UniversalRo // Vars const isBrowser = typeof window !== 'undefined' const queryParams = { ...routeParams, ...searchParams, ...nextRouterParams } - const queryKey = routeParamsToQueryKey(queryParams) - const queryInput = routeParamsToQueryInput(queryParams) + const queryKey = routeParamsToQueryKey(queryParams as any) + const queryInput = routeParamsToQueryInput(queryParams as any) // -- Effects -- @@ -70,7 +74,7 @@ export const UniversalRouteScreen = (props: UniversalRo const renderHydrationData = !!hydrationData && !hydratedData // Only render the hydration data if it's not already in state const { data: fetcherData } = useQuery({ - ...queryConfig, + ...queryConfig, // @ts-ignore initialData: isExpoWebLocal ? undefined : { ...queryConfig.initialData, ...hydrationData, diff --git a/packages/@green-stack-core/navigation/useRouter.next.ts b/packages/@green-stack-core/navigation/useRouter.next.ts index 429c5db..5cbc193 100644 --- a/packages/@green-stack-core/navigation/useRouter.next.ts +++ b/packages/@green-stack-core/navigation/useRouter.next.ts @@ -20,7 +20,7 @@ export const useRouter = () => { return window.history.length > 1 } - const setParams = (params?: Record) => { + const setParams = (params: Record = {}) => { if (typeof window === 'undefined') return const url = new URL(window.location.href) const search = new URLSearchParams(url.search) diff --git a/packages/@green-stack-core/schemas/index.ts b/packages/@green-stack-core/schemas/index.ts index cdea369..19a6fe7 100644 --- a/packages/@green-stack-core/schemas/index.ts +++ b/packages/@green-stack-core/schemas/index.ts @@ -41,6 +41,29 @@ export type ZOD_TYPE = keyof typeof BASE_TYPE_MAP export type BASE_TYPE = typeof BASE_TYPE_MAP[ZOD_TYPE] export type SCHEMA_TYPE = (ZOD_TYPE | BASE_TYPE) & {} +export type Metadata | any[]> = { + typeName: ZOD_TYPE, + baseType: BASE_TYPE, + schemaName?: string, + isOptional?: boolean, + isNullable?: boolean, + defaultValue?: any, + exampleValue?: any, + description?: string, + minLength?: number, + maxLength?: number, + exactLength?: number, + minValue?: number, + maxValue?: number, + isInt?: boolean, + literalValue?: any, + schema?: S, +} + +type StackedMeta = Metadata & { + zodType?: z.ZodType & { _def: z.ZodTypeDef & { typeName: ZOD_TYPE } }, +} + /* --- Zod extensions -------------------------------------------------------------------------- */ declare module 'zod' { @@ -50,7 +73,7 @@ declare module 'zod' { example(exampleValue: T): this eg(exampleValue: T): this ex(exampleValue: T): this - introspect(): Record + introspect(): Metadata & Record } interface ZodObject< @@ -99,7 +122,10 @@ if (!ZodType.prototype.metadata) { ZodType.prototype.eg = ZodType.prototype.example ZodType.prototype.ex = ZodType.prototype.example - const getStackedMeta = (zodType: Z, stackedMeta = []) => { + const getStackedMeta = ( + zodType: Z, + stackedMeta = [] as StackedMeta[] + ): StackedMeta[] => { // Start with actual metadata const meta = { ...zodType.metadata() } // Include the type in the stack, we'll remove it again later @@ -144,19 +170,19 @@ if (!ZodType.prototype.metadata) { // Enums if (typeName === 'ZodEnum') { const _zodType = zodType as unknown as z.ZodEnum - meta.schema = _zodType.options?.reduce((acc, value) => { + meta.schema = _zodType.options?.reduce((acc: Record, value: any) => { return { ...acc, [value]: value } }, {}) } // Tuples if (typeName === 'ZodTuple') { const _zodType = zodType as unknown as z.ZodTuple - meta.schema = _zodType.items.map((item) => item.introspect?.()).filter(Boolean) + meta.schema = _zodType.items.map((item: any) => item.introspect?.()).filter(Boolean) } // Unions if (typeName === 'ZodUnion') { const _zodType = zodType as unknown as z.ZodUnion - meta.schema = _zodType.options.map((option) => option.introspect?.()).filter(Boolean) + meta.schema = _zodType.options.map((option: any) => option.introspect?.()).filter(Boolean) } // Intersections if (typeName === 'ZodIntersection') { @@ -169,7 +195,7 @@ if (!ZodType.prototype.metadata) { // Discriminated Unions if (typeName === 'ZodDiscriminatedUnion') { const _zodType = zodType as unknown as z.ZodDiscriminatedUnion - meta.schema = _zodType.options.reduce((acc, option, i) => { + meta.schema = _zodType.options.reduce((acc: any, option: any) => { return { ...acc, types: [...acc.types, option.introspect?.()] } }, { discriminator: _zodType._def.discriminator, types: [] }) } @@ -218,7 +244,7 @@ if (!ZodType.prototype.metadata) { meta.schema = _zodType._def.type.introspect?.() } // Add the metadata for the current type - const currentMetaStack = [...stackedMeta, meta] + const currentMetaStack = [...stackedMeta, meta as Metadata] // If we've reached the innermost type, end recursion, return all metadata if (!zodType._def.innerType) return currentMetaStack // If there's another inner layer, unwrap it, add to the stack @@ -230,8 +256,9 @@ if (!ZodType.prototype.metadata) { const stackedMeta = getStackedMeta(this) const reversedMeta = [...stackedMeta].reverse() const [innermostMeta] = reversedMeta - const typeName = innermostMeta.zodType._def.typeName + const typeName = innermostMeta.zodType!._def.typeName as unknown as ZOD_TYPE const baseType = BASE_TYPE_MAP[typeName as ZOD_TYPE] + // Flatten stacked metadata in reverse order const flatMeta = reversedMeta.reduce((acc, { zodType: _, ...meta }) => ({ ...acc, ...meta, diff --git a/packages/@green-stack-core/tsconfig.json b/packages/@green-stack-core/tsconfig.json index fcf18a6..e44a101 100644 --- a/packages/@green-stack-core/tsconfig.json +++ b/packages/@green-stack-core/tsconfig.json @@ -3,7 +3,8 @@ "include": [ "**/*.ts", "**/*.tsx", - "../../features/app-core/graphql-env.d.ts" + "../../features/app-core/graphql-env.d.ts", + "types.ts" ], "exclude": ["node_modules"] } diff --git a/packages/@green-stack-core/types.ts b/packages/@green-stack-core/types.ts new file mode 100644 index 0000000..b04604d --- /dev/null +++ b/packages/@green-stack-core/types.ts @@ -0,0 +1,25 @@ +export type Overwrite = Omit & U + +export type FlattenIfArray = T extends (infer R)[] ? R : T +export type Unpromisify = T extends Promise ? R : T + +export type HintedKeys = string & {} // eslint-disable-line @typescript-eslint/ban-types + +export type DeepPartial = { + [P in keyof T]?: T[P] extends Array + ? Array> + : T[P] extends ReadonlyArray + ? ReadonlyArray> + : T[P] extends object + ? DeepPartial + : T[P] +} + +export type Prettify = { + [K in keyof T]: T[K] extends Object ? Prettify : T[K] +} + +export type any$Todo = any +export type any$Unknown = any +export type any$FixMe = any +export type any$TooComplex = any From a2a6fa59da6a9d92ce98299e772b500316133dea Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sat, 18 May 2024 20:38:20 +0200 Subject: [PATCH 016/126] feat: Update to Expo SDK 51 --- README.md | 2 +- apps/expo/package.json | 22 +- apps/next/app/(main)/api/health/route.ts | 2 +- apps/next/next.config.js | 3 + features/@app-core/graphql-env.d.ts | 2 +- features/@app-core/graphql/graphqlQuery.ts | 2 +- features/@app-core/screens/ImagesScreen.tsx | 12 +- features/@app-core/screens/SlugScreen.tsx | 3 +- package-lock.json | 8226 ++++++++++------- package.json | 3 +- .../navigation/UniversalRouteScreen.web.tsx | 7 +- 11 files changed, 5101 insertions(+), 3183 deletions(-) diff --git a/README.md b/README.md index 55ea484..6d5492c 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ npm run dev Open [http://localhost:3000](http://localhost:3000) with your browser to see your **Next.js 14** app on web. -Install and/or open the [Expo Go](https://expo.io/client) app on your phone and scan the QR code to test your **Expo SDK 50** app on mobile. +Install and/or open the [Expo Go](https://expo.io/client) app on your phone and scan the QR code to test your **Expo SDK 51** app on mobile. ## Documentation diff --git a/apps/expo/package.json b/apps/expo/package.json index 451d58a..ed38c73 100644 --- a/apps/expo/package.json +++ b/apps/expo/package.json @@ -4,19 +4,19 @@ "private": true, "main": "index.js", "dependencies": { - "@expo/metro-runtime": "^3.1.1", - "expo": "^50.0.1", - "expo-constants": "~15.4.5", - "expo-linking": "~6.2.2", - "expo-router": "~3.4.4", - "expo-status-bar": "~1.11.1", + "@expo/metro-runtime": "^3.2.1", + "expo": "^51.0.8", + "expo-constants": "~16.0.1", + "expo-linking": "~6.3.1", + "expo-router": "~3.5.14", + "expo-status-bar": "~1.12.1", "react": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.2", - "react-native-safe-area-context": "4.8.2", - "react-native-screens": "~3.29.0", - "react-native-web": "~0.19.6", - "expo-image": "~1.10.6" + "react-native": "0.74.1", + "react-native-safe-area-context": "4.10.1", + "react-native-screens": "~3.31.1", + "react-native-web": "~0.19.11", + "expo-image": "~1.12.9" }, "devDependencies": { "@babel/core": "^7.19.3", diff --git a/apps/next/app/(main)/api/health/route.ts b/apps/next/app/(main)/api/health/route.ts index bf0ebcc..0dcf551 100644 --- a/apps/next/app/(main)/api/health/route.ts +++ b/apps/next/app/(main)/api/health/route.ts @@ -13,7 +13,7 @@ type NextRequestContext> = { const handler = async (req: NextRequest, nextRequestContext: NextRequestContext) => { // Input const searchParams = req.nextUrl.searchParams - const echo = searchParams.get('echo') || null + const echo = searchParams.get('echo') || undefined // Build Context const context = await createRequestContext({ req, ...nextRequestContext }) diff --git a/apps/next/next.config.js b/apps/next/next.config.js index 9dfdbde..af744a6 100644 --- a/apps/next/next.config.js +++ b/apps/next/next.config.js @@ -11,6 +11,9 @@ const nextConfig = withExpo({ "nativewind", // Add more React Native / Expo packages here... ], + typescript: { + ignoreBuildErrors: true, + }, experimental: { forceSwcTransforms: true, }, diff --git a/features/@app-core/graphql-env.d.ts b/features/@app-core/graphql-env.d.ts index b93f1f2..9b23bef 100644 --- a/features/@app-core/graphql-env.d.ts +++ b/features/@app-core/graphql-env.d.ts @@ -17,7 +17,7 @@ export type introspection = { types: { 'Boolean': unknown; 'Float': unknown; - 'HealthCheckArgs': { kind: 'INPUT_OBJECT'; name: 'HealthCheckArgs'; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; + 'HealthCheckArgs': { kind: 'INPUT_OBJECT'; name: 'HealthCheckArgs'; isOneOf: false; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; 'HealthCheckData': { kind: 'OBJECT'; name: 'HealthCheckData'; fields: { 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'backendURL': { name: 'backendURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'graphURL': { name: 'graphURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; 'Int': unknown; 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'healthCheck': { name: 'healthCheck'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'HealthCheckData'; ofType: null; }; } }; }; }; diff --git a/features/@app-core/graphql/graphqlQuery.ts b/features/@app-core/graphql/graphqlQuery.ts index 0ce4f57..8a860a7 100644 --- a/features/@app-core/graphql/graphqlQuery.ts +++ b/features/@app-core/graphql/graphqlQuery.ts @@ -28,7 +28,7 @@ export const graphqlQuery = async >( const { data, errors } = await res.json() if (errors) throw new Error(errors[0].message) return data as R - } catch (error) { + } catch (error: any) { throw new Error(error) } } diff --git a/features/@app-core/screens/ImagesScreen.tsx b/features/@app-core/screens/ImagesScreen.tsx index 965d2aa..8a03cc0 100644 --- a/features/@app-core/screens/ImagesScreen.tsx +++ b/features/@app-core/screens/ImagesScreen.tsx @@ -1,7 +1,11 @@ import React from 'react' import { View, Text, Image, Link } from '../components/styled' -/* --- --------------------------------------------------------------------------- */ +/* --- Images ---------------------------------------------------------------------------------- */ + +const greenStackLogo = require('../assets/green-stack-logo.png') + +/* --- ------------------------------------------------------------------------- */ const ImagesScreen = () => { return ( @@ -13,19 +17,19 @@ const ImagesScreen = () => { {`< Back`} {/* - 1 - */} - + src=static-require | width: 60 | height: 60 {/* - 2 - */} src=external-url | width: 60 | height: 60 {/* - 3 - */} - + wrapper=50x80, relative | fill=true {/* - 4 - */} - + wrapper=80x60, relative | fill | contentFit=contain diff --git a/features/@app-core/screens/SlugScreen.tsx b/features/@app-core/screens/SlugScreen.tsx index 73e548f..f8ebd38 100644 --- a/features/@app-core/screens/SlugScreen.tsx +++ b/features/@app-core/screens/SlugScreen.tsx @@ -2,10 +2,11 @@ import React from 'react' import { useRouteParams } from '@green-stack/core/navigation/useRouteParams' import { View, Text, H3, P, Link } from '../components/styled' import { useRouter } from '@green-stack/core/navigation/useRouter' +import type { UniversalRouteScreenProps } from '@green-stack/core/navigation/useRouteParams.types' /* --- --------------------------------------------------------------------------- */ -const SlugScreen = (props: { slug?: string, count?: string }) => { +const SlugScreen = (props: UniversalRouteScreenProps) => { // Routing const { slug, count = '' } = useRouteParams(props) const { canGoBack, back, push, navigate, replace, setParams } = useRouter() diff --git a/package-lock.json b/package-lock.json index fac293f..9f6d9db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,19 +21,19 @@ "name": "@app/expo", "version": "1.0.0", "dependencies": { - "@expo/metro-runtime": "^3.1.1", - "expo": "^50.0.1", - "expo-constants": "~15.4.5", - "expo-image": "~1.10.6", - "expo-linking": "~6.2.2", - "expo-router": "~3.4.4", - "expo-status-bar": "~1.11.1", + "@expo/metro-runtime": "^3.2.1", + "expo": "^51.0.8", + "expo-constants": "~16.0.1", + "expo-image": "~1.12.9", + "expo-linking": "~6.3.1", + "expo-router": "~3.5.14", + "expo-status-bar": "~1.12.1", "react": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.2", - "react-native-safe-area-context": "4.8.2", - "react-native-screens": "~3.29.0", - "react-native-web": "~0.19.6" + "react-native": "0.74.1", + "react-native-safe-area-context": "4.10.1", + "react-native-screens": "~3.31.1", + "react-native-web": "~0.19.11" }, "devDependencies": { "@babel/core": "^7.19.3", @@ -42,6 +42,19 @@ "typescript": "5.3.3" } }, + "apps/expo/node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "apps/next": { "name": "@app/next", "version": "1.0.0", @@ -53,31 +66,40 @@ "postcss": "8.4.23" } }, - "features/@app-core": { - "name": "@app/core", - "version": "1.0.0", + "apps/next/node_modules/postcss": { + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "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": { - "@apollo/server": "^4.10.2", - "@as-integrations/next": "^3.0.0", - "@tanstack/react-query": "^5.29.2", - "gql.tada": "^1.4.3", - "graphql-tag": "^2.12.6", - "nativewind": "^2.0.11" + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, - "devDependencies": { - "@0no-co/graphqlsp": "^1.9.1", - "tailwindcss": "3.3.2", - "typescript": "5.3.3" + "engines": { + "node": "^10 || ^12 || >=14" } }, - "features/app-core": { + "features/@app-core": { "name": "@app/core", "version": "1.0.0", - "extraneous": true, "dependencies": { "@apollo/server": "^4.10.2", "@as-integrations/next": "^3.0.0", - "@graphql-tools/load-files": "^7.0.0", "@tanstack/react-query": "^5.29.2", "gql.tada": "^1.4.3", "graphql-tag": "^2.12.6", @@ -86,10 +108,22 @@ "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", "tailwindcss": "3.3.2", - "ts-node": "^10.9.2", "typescript": "5.3.3" } }, + "features/@app-core/node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/@0no-co/graphql.web": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.7.tgz", @@ -104,21 +138,22 @@ } }, "node_modules/@0no-co/graphqlsp": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.1.tgz", - "integrity": "sha512-KHMs1a9qXoiwA4aUKGgcsyM38SXH6ddQFwu4Hf2p8XjUOkRKHy38pd4qYM0hgA1vpkUf8WSj5GyDAbezhApfpw==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.3.tgz", + "integrity": "sha512-U0hV/FmFgm2perV+mrXKe/7Z5F4/9rmOziHJYYQgKLwzUVuN5LQG0qs3cLBGxAqoosG0HfTi2cQkgMKY1CMbYQ==", "dependencies": { - "@gql.tada/internal": "^0.3.0", - "graphql": "^16.8.1", - "node-fetch": "^2.0.0" + "@gql.tada/internal": "^1.0.0", + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0" }, "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", "typescript": "^5.0.0" } }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", "engines": { "node": ">=10" }, @@ -128,7 +163,8 @@ }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -221,26 +257,6 @@ "graphql": "14.x || 15.x || 16.x" } }, - "node_modules/@apollo/server/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/@apollo/server/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@apollo/usage-reporting-protobuf": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz", @@ -300,14 +316,6 @@ "node": ">=14" } }, - "node_modules/@apollo/utils.keyvaluecache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" - } - }, "node_modules/@apollo/utils.logger": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-2.0.1.tgz", @@ -416,7 +424,8 @@ }, "node_modules/@babel/code-frame": { "version": "7.24.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { "@babel/highlight": "^7.24.2", "picocolors": "^1.0.0" @@ -427,25 +436,27 @@ }, "node_modules/@babel/compat-data": { "version": "7.24.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.4", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.4", + "@babel/generator": "^7.24.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.4", - "@babel/parser": "^7.24.4", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -461,10 +472,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.4", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "dependencies": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.24.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -475,7 +487,8 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dependencies": { "@babel/types": "^7.22.5" }, @@ -485,7 +498,9 @@ }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.15", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "peer": true, "dependencies": { "@babel/types": "^7.22.15" }, @@ -495,7 +510,8 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.23.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -507,18 +523,32 @@ "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==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "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==" + }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.4", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", + "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.24.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-split-export-declaration": "^7.24.5", "semver": "^6.3.1" }, "engines": { @@ -530,7 +560,8 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.22.15", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", @@ -544,8 +575,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.1", - "license": "MIT", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -559,14 +591,16 @@ }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.23.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -577,7 +611,8 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { "@babel/types": "^7.22.5" }, @@ -586,10 +621,11 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", + "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", "dependencies": { - "@babel/types": "^7.23.0" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -597,7 +633,8 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.24.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dependencies": { "@babel/types": "^7.24.0" }, @@ -606,14 +643,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "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" + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -624,7 +662,8 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.22.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dependencies": { "@babel/types": "^7.22.5" }, @@ -633,15 +672,17 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.22.20", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", @@ -656,7 +697,8 @@ }, "node_modules/@babel/helper-replace-supers": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-member-expression-to-functions": "^7.23.0", @@ -670,10 +712,11 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -681,7 +724,8 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dependencies": { "@babel/types": "^7.22.5" }, @@ -690,10 +734,11 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -701,54 +746,60 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.23.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz", + "integrity": "sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==", "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/helper-function-name": "^7.23.0", + "@babel/template": "^7.24.0", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.4", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "dependencies": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.2", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", + "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.5", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -758,8 +809,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.4", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -768,11 +820,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.4", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", + "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", + "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -783,7 +837,9 @@ }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -796,7 +852,9 @@ }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -811,7 +869,9 @@ }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.24.0" @@ -825,7 +885,9 @@ }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.20.2", @@ -841,7 +903,9 @@ }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -855,7 +919,8 @@ }, "node_modules/@babel/plugin-proposal-decorators": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.1.tgz", + "integrity": "sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.1", "@babel/helper-plugin-utils": "^7.24.0", @@ -870,7 +935,8 @@ }, "node_modules/@babel/plugin-proposal-export-default-from": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.1.tgz", + "integrity": "sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-default-from": "^7.24.1" @@ -884,8 +950,9 @@ }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.20.7", - "license": "MIT", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -899,7 +966,9 @@ }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -913,7 +982,9 @@ }, "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -927,7 +998,9 @@ }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-compilation-targets": "^7.20.7", @@ -944,7 +1017,9 @@ }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -958,7 +1033,9 @@ }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -973,7 +1050,9 @@ }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "peer": true, "engines": { "node": ">=6.9.0" }, @@ -983,7 +1062,8 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -993,7 +1073,9 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1003,7 +1085,9 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1016,7 +1100,8 @@ }, "node_modules/@babel/plugin-syntax-decorators": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz", + "integrity": "sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1029,7 +1114,8 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1039,7 +1125,8 @@ }, "node_modules/@babel/plugin-syntax-export-default-from": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.1.tgz", + "integrity": "sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1052,7 +1139,8 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1062,7 +1150,8 @@ }, "node_modules/@babel/plugin-syntax-flow": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", + "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1075,7 +1164,9 @@ }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1088,7 +1179,9 @@ }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1101,7 +1194,9 @@ }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", - "license": "MIT", + "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1111,7 +1206,9 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1121,7 +1218,8 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1134,7 +1232,8 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "license": "MIT", + "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==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1144,7 +1243,8 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "license": "MIT", + "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==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1154,7 +1254,8 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "license": "MIT", + "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==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1164,7 +1265,8 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "license": "MIT", + "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==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1174,7 +1276,8 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "license": "MIT", + "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==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1184,7 +1287,8 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1194,7 +1298,8 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1207,7 +1312,9 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "license": "MIT", + "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1220,7 +1327,8 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1233,7 +1341,9 @@ }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1247,7 +1357,8 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1260,7 +1371,9 @@ }, "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.24.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", + "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.24.0", @@ -1276,7 +1389,8 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", "dependencies": { "@babel/helper-module-imports": "^7.24.1", "@babel/helper-plugin-utils": "^7.24.0", @@ -1291,7 +1405,9 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1303,10 +1419,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.4", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", + "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1317,7 +1434,9 @@ }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.1", "@babel/helper-plugin-utils": "^7.24.0" @@ -1331,7 +1450,9 @@ }, "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.24.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", + "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.4", "@babel/helper-plugin-utils": "^7.24.0", @@ -1345,16 +1466,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.1", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", + "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-split-export-declaration": "^7.24.5", "globals": "^11.1.0" }, "engines": { @@ -1366,7 +1488,8 @@ }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/template": "^7.24.0" @@ -1379,10 +1502,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.1", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", + "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1393,7 +1517,9 @@ }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.24.0" @@ -1407,7 +1533,9 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1420,7 +1548,9 @@ }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -1434,7 +1564,9 @@ }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "peer": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.24.0" @@ -1448,7 +1580,8 @@ }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -1462,7 +1595,8 @@ }, "node_modules/@babel/plugin-transform-flow-strip-types": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz", + "integrity": "sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-flow": "^7.24.1" @@ -1476,7 +1610,9 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -1490,7 +1626,8 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "dependencies": { "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-function-name": "^7.23.0", @@ -1505,7 +1642,9 @@ }, "node_modules/@babel/plugin-transform-json-strings": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1519,7 +1658,8 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1532,7 +1672,9 @@ }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1546,7 +1688,9 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1559,7 +1703,9 @@ }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "peer": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.24.0" @@ -1573,7 +1719,8 @@ }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.24.0", @@ -1588,7 +1735,9 @@ }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "peer": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", @@ -1604,7 +1753,9 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "peer": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.24.0" @@ -1618,7 +1769,8 @@ }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.22.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1632,7 +1784,9 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1645,7 +1799,9 @@ }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1659,7 +1815,9 @@ }, "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1672,13 +1830,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.1", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", + "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", "dependencies": { "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.1" + "@babel/plugin-transform-parameters": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1689,7 +1848,9 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-replace-supers": "^7.24.1" @@ -1703,7 +1864,9 @@ }, "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -1716,10 +1879,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.1", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", + "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1731,10 +1896,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.1", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", + "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1745,7 +1911,8 @@ }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.1", "@babel/helper-plugin-utils": "^7.24.0" @@ -1758,12 +1925,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.1", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", + "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.5", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1775,7 +1943,9 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1788,7 +1958,8 @@ }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", + "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1801,7 +1972,8 @@ }, "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.23.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", @@ -1818,7 +1990,8 @@ }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.22.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.22.5" }, @@ -1830,10 +2003,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.1", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.5.tgz", + "integrity": "sha512-RtCJoUO2oYrYwFPtR1/jkoBEcFuI1ae9a9IMxeyAVa3a1Ap4AnxmyIKG2b2FaJKqkidw/0cxRbWN+HOs6ZWd1w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1844,7 +2018,8 @@ }, "node_modules/@babel/plugin-transform-react-jsx-source": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1857,7 +2032,8 @@ }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz", + "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-plugin-utils": "^7.24.0" @@ -1871,7 +2047,9 @@ }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "regenerator-transform": "^0.15.2" @@ -1885,7 +2063,9 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1898,7 +2078,8 @@ }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.24.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", "dependencies": { "@babel/helper-module-imports": "^7.24.3", "@babel/helper-plugin-utils": "^7.24.0", @@ -1916,7 +2097,8 @@ }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1929,7 +2111,8 @@ }, "node_modules/@babel/plugin-transform-spread": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -1943,7 +2126,8 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1956,7 +2140,9 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -1968,10 +2154,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.1", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", + "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1981,12 +2169,13 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.4", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.5.tgz", + "integrity": "sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.4", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.5", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-typescript": "^7.24.1" }, "engines": { @@ -1998,7 +2187,9 @@ }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" }, @@ -2011,7 +2202,9 @@ }, "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.24.0" @@ -2025,7 +2218,8 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.24.0" @@ -2039,7 +2233,9 @@ }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.24.0" @@ -2052,14 +2248,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.4", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", + "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", + "peer": true, "dependencies": { "@babel/compat-data": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", @@ -2086,12 +2284,12 @@ "@babel/plugin-transform-async-generator-functions": "^7.24.3", "@babel/plugin-transform-async-to-generator": "^7.24.1", "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.4", + "@babel/plugin-transform-block-scoping": "^7.24.5", "@babel/plugin-transform-class-properties": "^7.24.1", "@babel/plugin-transform-class-static-block": "^7.24.4", - "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-classes": "^7.24.5", "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.5", "@babel/plugin-transform-dotall-regex": "^7.24.1", "@babel/plugin-transform-duplicate-keys": "^7.24.1", "@babel/plugin-transform-dynamic-import": "^7.24.1", @@ -2111,13 +2309,13 @@ "@babel/plugin-transform-new-target": "^7.24.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.5", "@babel/plugin-transform-object-super": "^7.24.1", "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.1", - "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.5", + "@babel/plugin-transform-parameters": "^7.24.5", "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.5", "@babel/plugin-transform-property-literals": "^7.24.1", "@babel/plugin-transform-regenerator": "^7.24.1", "@babel/plugin-transform-reserved-words": "^7.24.1", @@ -2125,7 +2323,7 @@ "@babel/plugin-transform-spread": "^7.24.1", "@babel/plugin-transform-sticky-regex": "^7.24.1", "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.5", "@babel/plugin-transform-unicode-escapes": "^7.24.1", "@babel/plugin-transform-unicode-property-regex": "^7.24.1", "@babel/plugin-transform-unicode-regex": "^7.24.1", @@ -2146,7 +2344,8 @@ }, "node_modules/@babel/preset-flow": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.1.tgz", + "integrity": "sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", @@ -2161,7 +2360,9 @@ }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -2173,7 +2374,8 @@ }, "node_modules/@babel/preset-react": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz", + "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", @@ -2191,7 +2393,8 @@ }, "node_modules/@babel/preset-typescript": { "version": "7.24.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", + "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", @@ -2208,7 +2411,8 @@ }, "node_modules/@babel/register": { "version": "7.23.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz", + "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==", "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -2225,11 +2429,13 @@ }, "node_modules/@babel/regjsgen": { "version": "0.8.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.24.4", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", + "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2239,7 +2445,8 @@ }, "node_modules/@babel/template": { "version": "7.24.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dependencies": { "@babel/code-frame": "^7.23.5", "@babel/parser": "^7.24.0", @@ -2250,17 +2457,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.1", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", "@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.24.1", - "@babel/types": "^7.24.0", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2269,11 +2477,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "license": "MIT", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2304,10 +2513,11 @@ }, "node_modules/@expo/bunyan": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", + "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", "engines": [ "node >=0.10.0" ], - "license": "MIT", "dependencies": { "uuid": "^8.0.0" }, @@ -2316,39 +2526,49 @@ "safe-json-stringify": "~1" } }, + "node_modules/@expo/bunyan/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/@expo/cli": { - "version": "0.17.8", - "license": "MIT", + "version": "0.18.13", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.13.tgz", + "integrity": "sha512-ZO1fpDK8z6mLeQGuFP6e3cZyCHV55ohZY7/tEyhpft3bwysS680eyFg5SFe+tWNFesnziFrbtI8JaUyhyjqovA==", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/code-signing-certificates": "0.0.5", - "@expo/config": "~8.5.0", - "@expo/config-plugins": "~7.8.0", - "@expo/devcert": "^1.0.0", - "@expo/env": "~0.2.2", - "@expo/image-utils": "^0.4.0", - "@expo/json-file": "^8.2.37", - "@expo/metro-config": "~0.17.0", + "@expo/config": "~9.0.0", + "@expo/config-plugins": "~8.0.0", + "@expo/devcert": "^1.1.2", + "@expo/env": "~0.3.0", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@expo/metro-config": "~0.18.0", "@expo/osascript": "^2.0.31", - "@expo/package-manager": "^1.1.1", + "@expo/package-manager": "^1.5.0", "@expo/plist": "^0.1.0", - "@expo/prebuild-config": "6.7.4", + "@expo/prebuild-config": "7.0.4", "@expo/rudder-sdk-node": "1.1.1", - "@expo/spawn-async": "1.5.0", + "@expo/spawn-async": "^1.7.2", "@expo/xcpretty": "^4.3.0", - "@react-native/dev-middleware": "^0.73.6", + "@react-native/dev-middleware": "~0.74.75", "@urql/core": "2.3.6", "@urql/exchange-retry": "0.3.0", "accepts": "^1.3.8", "arg": "5.0.2", "better-opn": "~3.0.2", "bplist-parser": "^0.3.1", - "cacache": "^15.3.0", + "cacache": "^18.0.2", "chalk": "^4.0.0", "ci-info": "^3.3.0", "connect": "^3.7.0", "debug": "^4.3.4", "env-editor": "^0.4.1", + "fast-glob": "^3.3.2", "find-yarn-workspace-root": "~2.0.0", "form-data": "^3.0.1", "freeport-async": "2.0.0", @@ -2366,7 +2586,6 @@ "lodash.debounce": "^4.0.8", "md5hex": "^1.0.0", "minimatch": "^3.0.4", - "minipass": "3.3.6", "node-fetch": "^2.6.7", "node-forge": "^1.3.1", "npm-package-arg": "^7.0.0", @@ -2382,7 +2601,7 @@ "resolve": "^1.22.2", "resolve-from": "^5.0.0", "resolve.exports": "^2.0.2", - "semver": "^7.5.3", + "semver": "^7.6.0", "send": "^0.18.0", "slugify": "^1.3.4", "source-map-support": "~0.5.21", @@ -2403,7 +2622,8 @@ }, "node_modules/@expo/cli/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -2416,7 +2636,8 @@ }, "node_modules/@expo/cli/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2430,7 +2651,8 @@ }, "node_modules/@expo/cli/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -2440,31 +2662,34 @@ }, "node_modules/@expo/cli/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@expo/cli/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", + "node_modules/@expo/cli/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/@expo/cli/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/@expo/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=10" + "node": ">=8" } }, "node_modules/@expo/cli/node_modules/semver": { - "version": "7.6.0", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -2474,7 +2699,8 @@ }, "node_modules/@expo/cli/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -2482,52 +2708,49 @@ "node": ">=8" } }, - "node_modules/@expo/cli/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@expo/code-signing-certificates": { "version": "0.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", + "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", "dependencies": { "node-forge": "^1.2.1", "nullthrows": "^1.1.1" } }, "node_modules/@expo/config": { - "version": "8.5.4", - "license": "MIT", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.2.tgz", + "integrity": "sha512-BKQ4/qBf3OLT8hHp5kjObk2vxwoRQ1yYQBbG/OM9Jdz32yYtrU8opTbKRAxfZEWH5i3ZHdLrPdC1rO0I6WxtTw==", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.8.2", - "@expo/config-types": "^50.0.0", - "@expo/json-file": "^8.2.37", + "@expo/config-plugins": "~8.0.0", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/json-file": "^8.3.0", "getenv": "^1.0.0", "glob": "7.1.6", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0", - "semver": "7.5.3", + "semver": "^7.6.0", "slugify": "^1.3.4", "sucrase": "3.34.0" } }, "node_modules/@expo/config-plugins": { - "version": "7.8.4", - "license": "MIT", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.4.tgz", + "integrity": "sha512-Hi+xuyNWE2LT4LVbGttHJgl9brnsdWAhEB42gWKb5+8ae86Nr/KwUBQJsJppirBYTeLjj5ZlY0glYnAkDa2jqw==", "dependencies": { - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/fingerprint": "^0.6.0", + "@expo/config-types": "^51.0.0-unreleased", "@expo/json-file": "~8.3.0", "@expo/plist": "^0.1.0", "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", "debug": "^4.3.1", "find-up": "~5.0.0", "getenv": "^1.0.0", "glob": "7.1.6", "resolve-from": "^5.0.0", - "semver": "^7.5.3", + "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", @@ -2536,7 +2759,8 @@ }, "node_modules/@expo/config-plugins/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -2549,7 +2773,8 @@ }, "node_modules/@expo/config-plugins/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2563,7 +2788,8 @@ }, "node_modules/@expo/config-plugins/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -2573,11 +2799,13 @@ }, "node_modules/@expo/config-plugins/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@expo/config-plugins/node_modules/glob": { "version": "7.1.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2595,27 +2823,16 @@ }, "node_modules/@expo/config-plugins/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, - "node_modules/@expo/config-plugins/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@expo/config-plugins/node_modules/semver": { - "version": "7.6.0", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -2625,7 +2842,8 @@ }, "node_modules/@expo/config-plugins/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -2633,24 +2851,23 @@ "node": ">=8" } }, - "node_modules/@expo/config-plugins/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@expo/config-types": { - "version": "50.0.0", - "license": "MIT" + "version": "51.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.0.tgz", + "integrity": "sha512-acn03/u8mQvBhdTQtA7CNhevMltUhbSrpI01FYBJwpVntufkU++ncQujWKlgY/OwIajcfygk1AY4xcNZ5ImkRA==" }, "node_modules/@expo/config/node_modules/@babel/code-frame": { "version": "7.10.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dependencies": { "@babel/highlight": "^7.10.4" } }, "node_modules/@expo/config/node_modules/glob": { "version": "7.1.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2666,22 +2883,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@expo/config/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@expo/config/node_modules/semver": { - "version": "7.5.3", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -2689,13 +2894,10 @@ "node": ">=10" } }, - "node_modules/@expo/config/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@expo/devcert": { - "version": "1.1.0", - "license": "MIT", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.2.tgz", + "integrity": "sha512-FyWghLu7rUaZEZSTLt/XNRukm0c9GFfwP0iFaswoDWpV6alvVg+zRAfCLdIVQEz1SVcQ3zo1hMZFDrnKGvkCuQ==", "dependencies": { "application-config-path": "^0.1.0", "command-exists": "^1.2.4", @@ -2703,7 +2905,7 @@ "eol": "^0.9.1", "get-port": "^3.2.0", "glob": "^7.1.2", - "lodash": "^4.17.4", + "lodash": "^4.17.21", "mkdirp": "^0.5.1", "password-prompt": "^1.0.4", "rimraf": "^2.6.2", @@ -2714,25 +2916,28 @@ }, "node_modules/@expo/devcert/node_modules/debug": { "version": "3.2.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { "ms": "^2.1.1" } }, "node_modules/@expo/env": { - "version": "0.2.2", - "license": "MIT", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.3.0.tgz", + "integrity": "sha512-OtB9XVHWaXidLbHvrVDeeXa09yvTl3+IQN884sO6PhIi2/StXfgSH/9zC7IvzrDB8kW3EBJ1PPLuCUJ2hxAT7Q==", "dependencies": { "chalk": "^4.0.0", "debug": "^4.3.4", - "dotenv": "~16.0.3", - "dotenv-expand": "~10.0.0", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", "getenv": "^1.0.0" } }, "node_modules/@expo/env/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -2745,7 +2950,8 @@ }, "node_modules/@expo/env/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2759,7 +2965,8 @@ }, "node_modules/@expo/env/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -2769,18 +2976,21 @@ }, "node_modules/@expo/env/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@expo/env/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@expo/env/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -2788,85 +2998,12 @@ "node": ">=8" } }, - "node_modules/@expo/fingerprint": { - "version": "0.6.0", - "license": "MIT", + "node_modules/@expo/image-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.5.1.tgz", + "integrity": "sha512-U/GsFfFox88lXULmFJ9Shfl2aQGcwoKPF7fawSCLixIKtMCpsI+1r0h+5i0nQnmt9tHuzXZDL8+Dg1z6OhkI9A==", "dependencies": { - "@expo/spawn-async": "^1.5.0", - "chalk": "^4.1.2", - "debug": "^4.3.4", - "find-up": "^5.0.0", - "minimatch": "^3.0.4", - "p-limit": "^3.1.0", - "resolve-from": "^5.0.0" - }, - "bin": { - "fingerprint": "bin/cli.js" - } - }, - "node_modules/@expo/fingerprint/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/fingerprint/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "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/@expo/fingerprint/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@expo/fingerprint/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@expo/fingerprint/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/fingerprint/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/image-utils": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "@expo/spawn-async": "1.5.0", + "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "fs-extra": "9.0.0", "getenv": "^1.0.0", @@ -2874,13 +3011,14 @@ "node-fetch": "^2.6.0", "parse-png": "^2.1.0", "resolve-from": "^5.0.0", - "semver": "7.3.2", + "semver": "^7.6.0", "tempy": "0.3.0" } }, "node_modules/@expo/image-utils/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -2893,7 +3031,8 @@ }, "node_modules/@expo/image-utils/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2907,7 +3046,8 @@ }, "node_modules/@expo/image-utils/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -2917,18 +3057,21 @@ }, "node_modules/@expo/image-utils/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@expo/image-utils/node_modules/crypto-random-string": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", "engines": { "node": ">=4" } }, "node_modules/@expo/image-utils/node_modules/fs-extra": { "version": "9.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -2941,14 +3084,16 @@ }, "node_modules/@expo/image-utils/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@expo/image-utils/node_modules/jsonfile": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { "universalify": "^2.0.0" }, @@ -2958,14 +3103,16 @@ }, "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { "node": ">= 10.0.0" } }, "node_modules/@expo/image-utils/node_modules/semver": { - "version": "7.3.2", - "license": "ISC", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -2975,7 +3122,8 @@ }, "node_modules/@expo/image-utils/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -2985,14 +3133,16 @@ }, "node_modules/@expo/image-utils/node_modules/temp-dir": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "engines": { "node": ">=4" } }, "node_modules/@expo/image-utils/node_modules/tempy": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", "dependencies": { "temp-dir": "^1.0.0", "type-fest": "^0.3.1", @@ -3004,14 +3154,16 @@ }, "node_modules/@expo/image-utils/node_modules/type-fest": { "version": "0.3.1", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "engines": { "node": ">=6" } }, "node_modules/@expo/image-utils/node_modules/unique-string": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "dependencies": { "crypto-random-string": "^1.0.0" }, @@ -3021,14 +3173,16 @@ }, "node_modules/@expo/image-utils/node_modules/universalify": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "engines": { "node": ">= 10.0.0" } }, "node_modules/@expo/json-file": { - "version": "8.3.0", - "license": "MIT", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.2", @@ -3037,24 +3191,25 @@ }, "node_modules/@expo/json-file/node_modules/@babel/code-frame": { "version": "7.10.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dependencies": { "@babel/highlight": "^7.10.4" } }, "node_modules/@expo/metro-config": { - "version": "0.17.6", - "license": "MIT", + "version": "0.18.4", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.4.tgz", + "integrity": "sha512-vh9WDf/SzE+NYCn6gqbzLKiXtENFlFZdAqyj9nI38RvQ4jw6TJIQ8+ExcdLDT3MOG36Ytg44XX9Zb3OWF6LVxw==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "@expo/config": "~8.5.0", - "@expo/env": "~0.2.2", + "@expo/config": "~9.0.0", + "@expo/env": "~0.3.0", "@expo/json-file": "~8.3.0", "@expo/spawn-async": "^1.7.2", - "babel-preset-fbjs": "^3.4.0", "chalk": "^4.1.0", "debug": "^4.3.2", "find-yarn-workspace-root": "~2.0.0", @@ -3064,26 +3219,13 @@ "jsc-safe-url": "^0.2.4", "lightningcss": "~1.19.0", "postcss": "~8.4.32", - "resolve-from": "^5.0.0", - "sucrase": "3.34.0" - }, - "peerDependencies": { - "@react-native/babel-preset": "*" - } - }, - "node_modules/@expo/metro-config/node_modules/@expo/spawn-async": { - "version": "1.7.2", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3" - }, - "engines": { - "node": ">=12" + "resolve-from": "^5.0.0" } }, "node_modules/@expo/metro-config/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -3096,7 +3238,8 @@ }, "node_modules/@expo/metro-config/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3110,7 +3253,8 @@ }, "node_modules/@expo/metro-config/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -3120,23 +3264,13 @@ }, "node_modules/@expo/metro-config/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@expo/metro-config/node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@expo/metro-config/node_modules/fs-extra": { "version": "9.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -3149,14 +3283,16 @@ }, "node_modules/@expo/metro-config/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@expo/metro-config/node_modules/jsonfile": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { "universalify": "^2.0.0" }, @@ -3164,59 +3300,10 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@expo/metro-config/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/metro-config/node_modules/postcss": { - "version": "8.4.38", - "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" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/@expo/metro-config/node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/metro-config/node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@expo/metro-config/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -3226,35 +3313,25 @@ }, "node_modules/@expo/metro-config/node_modules/universalify": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { "node": ">= 10.0.0" } }, - "node_modules/@expo/metro-config/node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@expo/metro-runtime": { - "version": "3.1.3", - "license": "MIT", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.2.1.tgz", + "integrity": "sha512-L7xNo5SmK+rcuXDm/+VBBImpA7FZsVB+m/rNr3fNl5or+1+yrZe99ViF7LZ8DOoVqAqcb4aCAXvGrP2JNYo1/Q==", "peerDependencies": { "react-native": "*" } }, "node_modules/@expo/next-adapter": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@expo/next-adapter/-/next-adapter-6.0.0.tgz", + "integrity": "sha512-hFAcH6OLIOkLeD0oCoozqcTAxcPK1wYsZO40NSWA+Bi25hF9h/Az6SlLSNOtYv+tyCF5iAHT/rwWsDNlUyxDmg==", "dev": true, - "license": "MIT", "peerDependencies": { "expo": ">=46", "react-native-web": "^0.18 || ^0.19", @@ -3262,10 +3339,11 @@ } }, "node_modules/@expo/osascript": { - "version": "2.1.0", - "license": "MIT", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.2.tgz", + "integrity": "sha512-/ugqDG+52uzUiEpggS9GPdp9g0U9EQrXcTdluHDmnlGmR2nV/F83L7c+HCUyPnf77QXwkr8gQk16vQTbxBQ5eA==", "dependencies": { - "@expo/spawn-async": "^1.5.0", + "@expo/spawn-async": "^1.7.2", "exec-async": "^2.2.0" }, "engines": { @@ -3273,11 +3351,12 @@ } }, "node_modules/@expo/package-manager": { - "version": "1.4.2", - "license": "MIT", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.5.2.tgz", + "integrity": "sha512-IuA9XtGBilce0q8cyxtWINqbzMB1Fia0Yrug/O53HNuRSwQguV/iqjV68bsa4z8mYerePhcFgtvISWLAlNEbUA==", "dependencies": { - "@expo/json-file": "^8.2.37", - "@expo/spawn-async": "^1.5.0", + "@expo/json-file": "^8.3.0", + "@expo/spawn-async": "^1.7.2", "ansi-regex": "^5.0.0", "chalk": "^4.0.0", "find-up": "^5.0.0", @@ -3292,7 +3371,8 @@ }, "node_modules/@expo/package-manager/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -3305,7 +3385,8 @@ }, "node_modules/@expo/package-manager/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3319,7 +3400,8 @@ }, "node_modules/@expo/package-manager/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -3329,22 +3411,26 @@ }, "node_modules/@expo/package-manager/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@expo/package-manager/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@expo/package-manager/node_modules/sudo-prompt": { "version": "9.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==" }, "node_modules/@expo/package-manager/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -3353,8 +3439,9 @@ } }, "node_modules/@expo/plist": { - "version": "0.1.0", - "license": "MIT", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", "dependencies": { "@xmldom/xmldom": "~0.7.7", "base64-js": "^1.2.3", @@ -3362,18 +3449,20 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "6.7.4", - "license": "MIT", - "dependencies": { - "@expo/config": "~8.5.0", - "@expo/config-plugins": "~7.8.0", - "@expo/config-types": "^50.0.0-alpha.1", - "@expo/image-utils": "^0.4.0", - "@expo/json-file": "^8.2.37", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.4.tgz", + "integrity": "sha512-E2n3QbwgV8Qa0CBw7BHrWBDWD7l8yw+N/yjvXpSPFFtoZLMSKyegdkJFACh2u+UIRKUSZm8zQwHeZR0rqAxV9g==", + "dependencies": { + "@expo/config": "~9.0.0", + "@expo/config-plugins": "~8.0.0", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@react-native/normalize-colors": "~0.74.83", "debug": "^4.3.1", "fs-extra": "^9.0.0", "resolve-from": "^5.0.0", - "semver": "7.5.3", + "semver": "^7.6.0", "xml2js": "0.6.0" }, "peerDependencies": { @@ -3382,7 +3471,8 @@ }, "node_modules/@expo/prebuild-config/node_modules/fs-extra": { "version": "9.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -3395,7 +3485,8 @@ }, "node_modules/@expo/prebuild-config/node_modules/jsonfile": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { "universalify": "^2.0.0" }, @@ -3403,22 +3494,10 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@expo/prebuild-config/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.5.3", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -3428,18 +3507,16 @@ }, "node_modules/@expo/prebuild-config/node_modules/universalify": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { "node": ">= 10.0.0" } }, - "node_modules/@expo/prebuild-config/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@expo/rudder-sdk-node": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", "dependencies": { "@expo/bunyan": "^4.0.0", "@segment/loosely-validate-event": "^2.0.0", @@ -3453,37 +3530,53 @@ "node": ">=12" } }, + "node_modules/@expo/rudder-sdk-node/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/@expo/sdk-runtime-versions": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==" }, "node_modules/@expo/server": { - "version": "0.3.1", - "license": "MIT", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.4.2.tgz", + "integrity": "sha512-HuXbzXTJh1/JG8FRuxcBqTNEuiriMhNhvh68CNCUXMR/s1f29DmZPBq+/IbG8yk+TkXvKIHjmUGAqqz/ddfyvA==", "dependencies": { - "@remix-run/node": "^1.19.3", + "@remix-run/node": "^2.7.2", "abort-controller": "^3.0.0", "debug": "^4.3.4", "source-map-support": "~0.5.21" } }, "node_modules/@expo/spawn-async": { - "version": "1.5.0", - "license": "MIT", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", "dependencies": { - "cross-spawn": "^6.0.5" + "cross-spawn": "^7.0.3" }, "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/@expo/vector-icons": { - "version": "14.0.0", - "license": "MIT" + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.2.tgz", + "integrity": "sha512-70LpmXQu4xa8cMxjp1fydgRPsalefnHaXLzIwaHMEzcZhnyjw2acZz8azRrZOslPVAWlxItOa2Dd7WtD/kI+CA==", + "dependencies": { + "prop-types": "^15.8.1" + } }, "node_modules/@expo/xcpretty": { "version": "4.3.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.1.tgz", + "integrity": "sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw==", "dependencies": { "@babel/code-frame": "7.10.4", "chalk": "^4.1.0", @@ -3496,14 +3589,16 @@ }, "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { "version": "7.10.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dependencies": { "@babel/highlight": "^7.10.4" } }, "node_modules/@expo/xcpretty/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -3516,11 +3611,13 @@ }, "node_modules/@expo/xcpretty/node_modules/argparse": { "version": "2.0.1", - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@expo/xcpretty/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3534,7 +3631,8 @@ }, "node_modules/@expo/xcpretty/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -3544,18 +3642,21 @@ }, "node_modules/@expo/xcpretty/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@expo/xcpretty/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@expo/xcpretty/node_modules/js-yaml": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { "argparse": "^2.0.1" }, @@ -3565,7 +3666,8 @@ }, "node_modules/@expo/xcpretty/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -3573,35 +3675,32 @@ "node": ">=8" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "license": "MIT" - }, "node_modules/@gql.tada/cli-utils": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@gql.tada/cli-utils/-/cli-utils-1.3.3.tgz", - "integrity": "sha512-XdKhu2xmnFmilOdt/XzF84ld15la9yOVfTn+F464ssXzRJH0FN8Qi+lRpxVogdMii4TYt59YmEh9jnl5z4GN/g==", + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@gql.tada/cli-utils/-/cli-utils-1.3.9.tgz", + "integrity": "sha512-oRb7SG/+csx9CiypSJTI21KaLfulOUnhX1vxg4FXi2snub9XShkGR2XnnlJVTAOZXY9Vcxti1NutAElxdDkycA==", "dependencies": { "@0no-co/graphqlsp": "^1.12.1", - "@gql.tada/internal": "0.3.3", + "@gql.tada/internal": "1.0.0", "@vue/compiler-dom": "^3.4.23", - "@vue/language-core": "^2.0.0", - "graphql": "^16.8.1", + "@vue/language-core": "^2.0.17", + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", "svelte2tsx": "^0.7.6" }, "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", "typescript": "^5.0.0" } }, "node_modules/@gql.tada/internal": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-0.3.3.tgz", - "integrity": "sha512-lBOiN0c/Fx5eY5KGwkzB5+6asUv9IAoD6f5rZjN8r9h4hvSk4V5Kuuu6EfKixF6h5/o/xDRgA/BU3355udnK3g==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-1.0.0.tgz", + "integrity": "sha512-B55aIYyZn5ewdgMqoJciPAwF5DKYX6HBabTU+ap/dpNH3EgJrLomc8Y8w+MCxCyOx+dXL9OduT6eWnVr7J7Eyg==", "dependencies": { "@0no-co/graphql.web": "^1.0.5" }, "peerDependencies": { - "graphql": "^16.8.1", + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", "typescript": "^5.0.0" } }, @@ -3662,7 +3761,8 @@ }, "node_modules/@graphql-typed-document-node/core": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } @@ -3673,25 +3773,118 @@ }, "node_modules/@hapi/hoek": { "version": "9.3.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" }, "node_modules/@hapi/topo": { "version": "5.1.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dependencies": { "@hapi/hoek": "^9.0.0" } }, + "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==", + "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==", + "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==", + "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==" + }, + "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==", + "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==", + "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==", + "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/@isaacs/ttlcache": { "version": "1.4.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", "engines": { "node": ">=12" } }, "node_modules/@jest/create-cache-key-function": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", "dependencies": { "@jest/types": "^29.6.3" }, @@ -3701,7 +3894,8 @@ }, "node_modules/@jest/environment": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -3714,7 +3908,8 @@ }, "node_modules/@jest/fake-timers": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -3729,7 +3924,8 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -3739,7 +3935,8 @@ }, "node_modules/@jest/types": { "version": "29.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -3754,7 +3951,8 @@ }, "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -3767,7 +3965,8 @@ }, "node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3781,7 +3980,8 @@ }, "node_modules/@jest/types/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -3791,18 +3991,21 @@ }, "node_modules/@jest/types/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@jest/types/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -3817,7 +4020,8 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3829,21 +4033,24 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -3851,11 +4058,13 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3863,14 +4072,16 @@ }, "node_modules/@next/env": { "version": "14.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.4.tgz", + "integrity": "sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==" }, "node_modules/@next/swc-darwin-arm64": { "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.4.tgz", + "integrity": "sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -4001,7 +4212,8 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -4012,14 +4224,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -4029,29 +4243,20 @@ } }, "node_modules/@npmcli/fs": { - "version": "1.1.1", - "license": "ISC", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dependencies": { - "@gar/promisify": "^1.0.1", "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/fs/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.6.0", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -4059,42 +4264,13 @@ "node": ">=10" } }, - "node_modules/@npmcli/fs/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, + "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==", + "optional": true, "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=14" } }, "node_modules/@protobufjs/aspromise": { @@ -4153,7 +4329,8 @@ }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", "dependencies": { "@babel/runtime": "^7.13.10" }, @@ -4163,7 +4340,8 @@ }, "node_modules/@radix-ui/react-slot": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-compose-refs": "1.0.0" @@ -4173,18 +4351,18 @@ } }, "node_modules/@react-native-community/cli": { - "version": "12.3.0", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-clean": "12.3.0", - "@react-native-community/cli-config": "12.3.0", - "@react-native-community/cli-debugger-ui": "12.3.0", - "@react-native-community/cli-doctor": "12.3.0", - "@react-native-community/cli-hermes": "12.3.0", - "@react-native-community/cli-plugin-metro": "12.3.0", - "@react-native-community/cli-server-api": "12.3.0", - "@react-native-community/cli-tools": "12.3.0", - "@react-native-community/cli-types": "12.3.0", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.6.tgz", + "integrity": "sha512-IqclB7VQ84ye8Fcs89HOpOscY4284VZg2pojHNl8H0Lzd4DadXJWQoxC7zWm8v2f8eyeX2kdhxp2ETD5tceIgA==", + "dependencies": { + "@react-native-community/cli-clean": "13.6.6", + "@react-native-community/cli-config": "13.6.6", + "@react-native-community/cli-debugger-ui": "13.6.6", + "@react-native-community/cli-doctor": "13.6.6", + "@react-native-community/cli-hermes": "13.6.6", + "@react-native-community/cli-server-api": "13.6.6", + "@react-native-community/cli-tools": "13.6.6", + "@react-native-community/cli-types": "13.6.6", "chalk": "^4.1.2", "commander": "^9.4.1", "deepmerge": "^4.3.0", @@ -4203,17 +4381,20 @@ } }, "node_modules/@react-native-community/cli-clean": { - "version": "12.3.0", - "license": "MIT", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.6.tgz", + "integrity": "sha512-cBwJTwl0NyeA4nyMxbhkWZhxtILYkbU3TW3k8AXLg+iGphe0zikYMGB3T+haTvTc6alTyEFwPbimk9bGIqkjAQ==", "dependencies": { - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", - "execa": "^5.0.0" + "execa": "^5.0.0", + "fast-glob": "^3.3.2" } }, "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -4226,7 +4407,8 @@ }, "node_modules/@react-native-community/cli-clean/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4240,7 +4422,8 @@ }, "node_modules/@react-native-community/cli-clean/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -4250,23 +4433,13 @@ }, "node_modules/@react-native-community/cli-clean/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-clean/node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-clean/node_modules/execa": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -4287,7 +4460,8 @@ }, "node_modules/@react-native-community/cli-clean/node_modules/get-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, @@ -4297,14 +4471,16 @@ }, "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-clean/node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -4314,14 +4490,16 @@ }, "node_modules/@react-native-community/cli-clean/node_modules/mimic-fn": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, "node_modules/@react-native-community/cli-clean/node_modules/npm-run-path": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { "path-key": "^3.0.0" }, @@ -4331,7 +4509,8 @@ }, "node_modules/@react-native-community/cli-clean/node_modules/onetime": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -4342,33 +4521,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-clean/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -4376,34 +4532,23 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-clean/node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@react-native-community/cli-config": { - "version": "12.3.0", - "license": "MIT", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.6.tgz", + "integrity": "sha512-mbG425zCKr8JZhv/j11382arezwS/70juWMsn8j2lmrGTrP1cUdW0MF15CCIFtJsqyK3Qs+FTmqttRpq81QfSg==", "dependencies": { - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", "cosmiconfig": "^5.1.0", "deepmerge": "^4.3.0", - "glob": "^7.1.3", + "fast-glob": "^3.3.2", "joi": "^17.2.1" } }, "node_modules/@react-native-community/cli-config/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -4416,7 +4561,8 @@ }, "node_modules/@react-native-community/cli-config/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4430,7 +4576,8 @@ }, "node_modules/@react-native-community/cli-config/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -4440,18 +4587,21 @@ }, "node_modules/@react-native-community/cli-config/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-config/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-config/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -4460,27 +4610,29 @@ } }, "node_modules/@react-native-community/cli-debugger-ui": { - "version": "12.3.0", - "license": "MIT", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.6.tgz", + "integrity": "sha512-Vv9u6eS4vKSDAvdhA0OiQHoA7y39fiPIgJ6biT32tN4avHDtxlc6TWZGiqv7g98SBvDWvoVAmdPLcRf3kU+c8g==", "dependencies": { "serve-static": "^1.13.1" } }, "node_modules/@react-native-community/cli-doctor": { - "version": "12.3.0", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-config": "12.3.0", - "@react-native-community/cli-platform-android": "12.3.0", - "@react-native-community/cli-platform-ios": "12.3.0", - "@react-native-community/cli-tools": "12.3.0", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.6.tgz", + "integrity": "sha512-TWZb5g6EmQe2Ua2TEWNmyaEayvlWH4GmdD9ZC+p8EpKFpB1NpDGMK6sXbpb42TDvwZg5s4TDRplK0PBEA/SVDg==", + "dependencies": { + "@react-native-community/cli-config": "13.6.6", + "@react-native-community/cli-platform-android": "13.6.6", + "@react-native-community/cli-platform-apple": "13.6.6", + "@react-native-community/cli-platform-ios": "13.6.6", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", "command-exists": "^1.2.8", "deepmerge": "^4.3.0", "envinfo": "^7.10.0", "execa": "^5.0.0", "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5", "node-stream-zip": "^1.9.1", "ora": "^5.4.1", "semver": "^7.5.2", @@ -4491,7 +4643,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -4504,7 +4657,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4518,7 +4672,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/cli-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -4528,7 +4683,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -4538,23 +4694,13 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-doctor/node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-doctor/node_modules/execa": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -4575,7 +4721,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/get-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, @@ -4585,14 +4732,16 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-doctor/node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -4602,7 +4751,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/log-symbols": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -4614,26 +4764,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@react-native-community/cli-doctor/node_modules/mimic-fn": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, "node_modules/@react-native-community/cli-doctor/node_modules/npm-run-path": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { "path-key": "^3.0.0" }, @@ -4643,7 +4785,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/onetime": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -4656,7 +4799,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/ora": { "version": "5.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -4677,7 +4821,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/ora/node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4685,16 +4830,10 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@react-native-community/cli-doctor/node_modules/restore-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -4704,11 +4843,9 @@ } }, "node_modules/@react-native-community/cli-doctor/node_modules/semver": { - "version": "7.6.0", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -4716,26 +4853,10 @@ "node": ">=10" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -4743,37 +4864,21 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@react-native-community/cli-hermes": { - "version": "12.3.0", - "license": "MIT", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.6.tgz", + "integrity": "sha512-La5Ie+NGaRl3klei6WxKoOxmCUSGGxpOk6vU5pEGf0/O7ky+Ay0io+zXYUZqlNMi/cGpO7ZUijakBYOB/uyuFg==", "dependencies": { - "@react-native-community/cli-platform-android": "12.3.0", - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-platform-android": "13.6.6", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" + "hermes-profile-transformer": "^0.0.6" } }, "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -4786,7 +4891,8 @@ }, "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4800,7 +4906,8 @@ }, "node_modules/@react-native-community/cli-hermes/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -4810,18 +4917,21 @@ }, "node_modules/@react-native-community/cli-hermes/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -4830,20 +4940,22 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "12.3.0", - "license": "MIT", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.6.tgz", + "integrity": "sha512-/tMwkBeNxh84syiSwNlYtmUz/Ppc+HfKtdopL/5RB+fd3SV1/5/NPNjMlyLNgFKnpxvKCInQ7dnl6jGHJjeHjg==", "dependencies": { - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", "execa": "^5.0.0", + "fast-glob": "^3.3.2", "fast-xml-parser": "^4.2.4", - "glob": "^7.1.3", "logkitty": "^0.7.1" } }, "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -4856,7 +4968,8 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4870,7 +4983,8 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -4880,23 +4994,13 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-platform-android/node_modules/execa": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -4917,7 +5021,8 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/get-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, @@ -4927,14 +5032,16 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-platform-android/node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -4944,14 +5051,16 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/mimic-fn": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, "node_modules/@react-native-community/cli-platform-android/node_modules/npm-run-path": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { "path-key": "^3.0.0" }, @@ -4961,7 +5070,8 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/onetime": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -4972,33 +5082,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -5006,34 +5093,23 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "12.3.0", - "license": "MIT", + "node_modules/@react-native-community/cli-platform-apple": { + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.6.tgz", + "integrity": "sha512-bOmSSwoqNNT3AmCRZXEMYKz1Jf1l2F86Nhs7qBcXdY/sGiJ+Flng564LOqvdAlVLTbkgz47KjNKCS2pP4Jg0Mg==", "dependencies": { - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", "execa": "^5.0.0", + "fast-glob": "^3.3.2", "fast-xml-parser": "^4.0.12", - "glob": "^7.1.3", "ora": "^5.4.1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -5044,9 +5120,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5058,9 +5135,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/cli-cursor": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/cli-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -5068,9 +5146,10 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -5078,25 +5157,15 @@ "node": ">=7.0.0" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/execa": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/execa": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -5115,9 +5184,10 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/get-stream": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/get-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, @@ -5125,16 +5195,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/is-stream": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -5142,9 +5214,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/log-symbols": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/log-symbols": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -5156,16 +5229,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/mimic-fn": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/mimic-fn": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/npm-run-path": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/npm-run-path": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { "path-key": "^3.0.0" }, @@ -5173,9 +5248,10 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/onetime": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/onetime": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5186,9 +5262,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/ora": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/ora": { "version": "5.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -5207,16 +5284,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/restore-cursor": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/restore-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -5225,26 +5296,10 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/strip-ansi": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5252,9 +5307,10 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -5262,63 +5318,46 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/which": { - "version": "2.0.2", - "license": "ISC", + "node_modules/@react-native-community/cli-platform-ios": { + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.6.tgz", + "integrity": "sha512-vjDnRwhlSN5ryqKTas6/DPkxuouuyFBAqAROH4FR1cspTbn6v78JTZKDmtQy9JMMo7N5vZj1kASU5vbFep9IOQ==", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "@react-native-community/cli-platform-apple": "13.6.6" } }, - "node_modules/@react-native-community/cli-plugin-metro": { - "version": "12.3.0", - "license": "MIT" - }, "node_modules/@react-native-community/cli-server-api": { - "version": "12.3.0", - "license": "MIT", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.6.tgz", + "integrity": "sha512-ZtCXxoFlM7oDv3iZ3wsrT3SamhtUJuIkX2WePLPlN5bcbq7zimbPm2lHyicNJtpcGQ5ymsgpUWPCNZsWQhXBqQ==", "dependencies": { - "@react-native-community/cli-debugger-ui": "12.3.0", - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-debugger-ui": "13.6.6", + "@react-native-community/cli-tools": "13.6.6", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.1", "nocache": "^3.0.1", "pretty-format": "^26.6.2", "serve-static": "^1.13.1", - "ws": "^7.5.1" + "ws": "^6.2.2" } }, "node_modules/@react-native-community/cli-server-api/node_modules/ws": { - "version": "7.5.9", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dependencies": { + "async-limiter": "~1.0.0" } }, "node_modules/@react-native-community/cli-tools": { - "version": "12.3.0", - "license": "MIT", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.6.tgz", + "integrity": "sha512-ptOnn4AJczY5njvbdK91k4hcYazDnGtEPrqIwEI+k/CTBHNdb27Rsm2OZ7ye6f7otLBqF8gj/hK6QzJs8CEMgw==", "dependencies": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", + "execa": "^5.0.0", "find-up": "^5.0.0", "mime": "^2.4.1", "node-fetch": "^2.6.0", @@ -5331,7 +5370,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -5344,7 +5384,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5358,7 +5399,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/cli-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -5368,7 +5410,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -5378,25 +5421,73 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@react-native-community/cli-tools/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "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/@react-native-community/cli-tools/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/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/@react-native-community/cli-tools/node_modules/is-wsl": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", "engines": { "node": ">=4" } }, "node_modules/@react-native-community/cli-tools/node_modules/log-symbols": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -5408,26 +5499,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-tools/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@react-native-community/cli-tools/node_modules/mimic-fn": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, + "node_modules/@react-native-community/cli-tools/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==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-tools/node_modules/onetime": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5440,7 +5534,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/open": { "version": "6.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", "dependencies": { "is-wsl": "^1.1.0" }, @@ -5450,7 +5545,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/ora": { "version": "5.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -5471,7 +5567,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/restore-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -5481,11 +5578,9 @@ } }, "node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.6.0", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -5495,7 +5590,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5505,11 +5601,13 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/sudo-prompt": { "version": "9.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" }, "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -5517,20 +5615,18 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-tools/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@react-native-community/cli-types": { - "version": "12.3.0", - "license": "MIT", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.6.tgz", + "integrity": "sha512-733iaYzlmvNK7XYbnWlMjdE+2k0hlTBJW071af/xb6Bs+hbJqBP9c03FZuYH2hFFwDDntwj05bkri/P7VgSxug==", "dependencies": { "joi": "^17.2.1" } }, "node_modules/@react-native-community/cli/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -5543,7 +5639,8 @@ }, "node_modules/@react-native-community/cli/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5557,7 +5654,8 @@ }, "node_modules/@react-native-community/cli/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -5567,30 +5665,21 @@ }, "node_modules/@react-native-community/cli/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli/node_modules/commander": { "version": "9.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "engines": { "node": "^12.20.0 || >=14" } }, - "node_modules/@react-native-community/cli/node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@react-native-community/cli/node_modules/execa": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -5611,7 +5700,8 @@ }, "node_modules/@react-native-community/cli/node_modules/find-up": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -5622,7 +5712,8 @@ }, "node_modules/@react-native-community/cli/node_modules/get-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, @@ -5632,14 +5723,16 @@ }, "node_modules/@react-native-community/cli/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli/node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -5649,7 +5742,8 @@ }, "node_modules/@react-native-community/cli/node_modules/locate-path": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { "p-locate": "^4.1.0" }, @@ -5657,26 +5751,18 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@react-native-community/cli/node_modules/mimic-fn": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, "node_modules/@react-native-community/cli/node_modules/npm-run-path": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { "path-key": "^3.0.0" }, @@ -5686,7 +5772,8 @@ }, "node_modules/@react-native-community/cli/node_modules/onetime": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5699,7 +5786,8 @@ }, "node_modules/@react-native-community/cli/node_modules/p-limit": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { "p-try": "^2.0.0" }, @@ -5712,7 +5800,8 @@ }, "node_modules/@react-native-community/cli/node_modules/p-locate": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { "p-limit": "^2.2.0" }, @@ -5720,19 +5809,10 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@react-native-community/cli/node_modules/semver": { - "version": "7.6.0", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -5740,26 +5820,10 @@ "node": ">=10" } }, - "node_modules/@react-native-community/cli/node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@react-native-community/cli/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -5767,45 +5831,29 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli/node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@react-native-community/cli/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@react-native/assets-registry": { - "version": "0.73.1", - "license": "MIT", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.83.tgz", + "integrity": "sha512-2vkLMVnp+YTZYTNSDIBZojSsjz8sl5PscP3j4GcV6idD8V978SZfwFlk8K0ti0BzRs11mzL0Pj17km597S/eTQ==", "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.75.0-main", - "license": "MIT", - "peer": true, + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.83.tgz", + "integrity": "sha512-+S0st3t4Ro00bi9gjT1jnK8qTFOU+CwmziA7U9odKyWrCoRJrgmrvogq/Dr1YXlpFxexiGIupGut1VHxr+fxJA==", "dependencies": { - "@react-native/codegen": "0.75.0-main" + "@react-native/codegen": "0.74.83" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.75.0-main", - "license": "MIT", - "peer": true, + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.83.tgz", + "integrity": "sha512-KJuu3XyVh3qgyUer+rEqh9a/JoUxsDOzkJNfRpDyXiAyjDRoVch60X/Xa/NcEQ93iCVHAWs0yQ+XGNGIBCYE6g==", "dependencies": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", @@ -5847,7 +5895,7 @@ "@babel/plugin-transform-typescript": "^7.5.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.75.0-main", + "@react-native/babel-plugin-codegen": "0.74.83", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, @@ -5859,13 +5907,13 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.75.0-main", - "license": "MIT", - "peer": true, + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.83.tgz", + "integrity": "sha512-GgvgHS3Aa2J8/mp1uC/zU8HuTh8ZT5jz7a4mVMWPw7+rGyv70Ba8uOVBq6UH2Q08o617IATYc+0HfyzAfm4n0w==", "dependencies": { "@babel/parser": "^7.20.0", "glob": "^7.1.1", - "hermes-parser": "0.20.1", + "hermes-parser": "0.19.1", "invariant": "^2.2.4", "jscodeshift": "^0.14.0", "mkdirp": "^0.5.1", @@ -5879,47 +5927,31 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.73.12", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-server-api": "12.3.0", - "@react-native-community/cli-tools": "12.3.0", - "@react-native/dev-middleware": "0.73.7", - "@react-native/metro-babel-transformer": "0.73.13", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.83.tgz", + "integrity": "sha512-7GAFjFOg1mFSj8bnFNQS4u8u7+QtrEeflUIDVZGEfBZQ3wMNI5ycBzbBGycsZYiq00Xvoc6eKFC7kvIaqeJpUQ==", + "dependencies": { + "@react-native-community/cli-server-api": "13.6.6", + "@react-native-community/cli-tools": "13.6.6", + "@react-native/dev-middleware": "0.74.83", + "@react-native/metro-babel-transformer": "0.74.83", "chalk": "^4.0.0", "execa": "^5.1.1", "metro": "^0.80.3", "metro-config": "^0.80.3", "metro-core": "^0.80.3", "node-fetch": "^2.2.0", + "querystring": "^0.2.1", "readline": "^1.3.0" }, "engines": { "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { - "version": "0.73.7", - "license": "MIT", - "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.73.3", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^1.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "node-fetch": "^2.2.0", - "open": "^7.0.3", - "serve-static": "^1.13.1", - "temp-dir": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -5932,7 +5964,8 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5946,7 +5979,8 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -5956,30 +5990,13 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native/community-cli-plugin/node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native/community-cli-plugin/node_modules/execa": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -6000,7 +6017,8 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/get-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, @@ -6010,14 +6028,16 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native/community-cli-plugin/node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -6027,18 +6047,16 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/mimic-fn": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, "node_modules/@react-native/community-cli-plugin/node_modules/npm-run-path": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { "path-key": "^3.0.0" }, @@ -6048,7 +6066,8 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/onetime": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -6059,47 +6078,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/open": { - "version": "7.4.2", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -6107,38 +6089,29 @@ "node": ">=8" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@react-native/debugger-frontend": { - "version": "0.73.3", - "license": "BSD-3-Clause", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.83.tgz", + "integrity": "sha512-RGQlVUegBRxAUF9c1ss1ssaHZh6CO+7awgtI9sDeU0PzDZY/40ImoPD5m0o0SI6nXoVzbPtcMGzU+VO590pRfA==", "engines": { "node": ">=18" } }, "node_modules/@react-native/dev-middleware": { - "version": "0.73.8", - "license": "MIT", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.83.tgz", + "integrity": "sha512-UH8iriqnf7N4Hpi20D7M2FdvSANwTVStwFCSD7VMU9agJX88Yk0D1T6Meh2RMhUu4kY2bv8sTkNRm7LmxvZqgA==", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.73.3", + "@react-native/debugger-frontend": "0.74.83", + "@rnx-kit/chromium-edge-launcher": "^1.0.0", "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^1.0.0", "connect": "^3.6.5", "debug": "^2.2.0", "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", "open": "^7.0.3", + "selfsigned": "^2.4.1", "serve-static": "^1.13.1", "temp-dir": "^2.0.0", "ws": "^6.2.2" @@ -6149,18 +6122,21 @@ }, "node_modules/@react-native/dev-middleware/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/@react-native/dev-middleware/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/@react-native/dev-middleware/node_modules/open": { "version": "7.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -6174,32 +6150,36 @@ }, "node_modules/@react-native/dev-middleware/node_modules/ws": { "version": "6.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dependencies": { "async-limiter": "~1.0.0" } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.73.4", - "license": "MIT", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.83.tgz", + "integrity": "sha512-Pw2BWVyOHoBuJVKxGVYF6/GSZRf6+v1Ygc+ULGz5t20N8qzRWPa2fRZWqoxsN7TkNLPsECYY8gooOl7okOcPAQ==", "engines": { "node": ">=18" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.73.1", - "license": "MIT", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.83.tgz", + "integrity": "sha512-/t74n8r6wFhw4JEoOj3bN71N1NDLqaawB75uKAsSjeCwIR9AfCxlzZG0etsXtOexkY9KMeZIQ7YwRPqUdNXuqw==", "engines": { "node": ">=18" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.73.13", - "license": "MIT", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.83.tgz", + "integrity": "sha512-hGdx5N8diu8y+GW/ED39vTZa9Jx1di2ZZ0aapbhH4egN1agIAusj5jXTccfNBwwWF93aJ5oVbRzfteZgjbutKg==", "dependencies": { "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.73.19", - "hermes-parser": "0.15.0", + "@react-native/babel-preset": "0.74.83", + "hermes-parser": "0.19.1", "nullthrows": "^1.1.1" }, "engines": { @@ -6209,118 +6189,15 @@ "@babel/core": "*" } }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": { - "version": "0.73.2", - "license": "MIT", - "dependencies": { - "@react-native/codegen": "0.73.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": { - "version": "0.73.19", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.73.2", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/codegen": { - "version": "0.73.2", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/flow-parser": { - "version": "0.206.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.15.0", - "license": "MIT" - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.15.0", - "license": "MIT", - "dependencies": { - "hermes-estree": "0.15.0" - } - }, - "node_modules/@react-native/normalize-color": { - "version": "2.1.0", - "license": "MIT" - }, "node_modules/@react-native/normalize-colors": { - "version": "0.73.2", - "license": "MIT" + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.83.tgz", + "integrity": "sha512-jhCY95gRDE44qYawWVvhTjTplW1g+JtKTKM3f8xYT1dJtJ8QWv+gqEtKcfmOHfDkSDaMKG0AGBaDTSK8GXLH8Q==" }, "node_modules/@react-native/virtualized-lists": { - "version": "0.73.4", - "license": "MIT", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.83.tgz", + "integrity": "sha512-rmaLeE34rj7py4FxTod7iMTC7BAsm+HrGA8WxYmEJeyTV7WSaxAkosKoYBz8038mOiwnG9VwA/7FrB6bEQvn1A==", "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" @@ -6329,12 +6206,20 @@ "node": ">=18" }, "peerDependencies": { + "@types/react": "^18.2.6", + "react": "*", "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@react-navigation/bottom-tabs": { "version": "6.5.20", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz", + "integrity": "sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA==", "dependencies": { "@react-navigation/elements": "^1.3.30", "color": "^4.2.3", @@ -6350,7 +6235,8 @@ }, "node_modules/@react-navigation/core": { "version": "6.4.16", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.16.tgz", + "integrity": "sha512-UDTJBsHxnzgFETR3ZxhctP+RWr4SkyeZpbhpkQoIGOuwSCkt1SE0qjU48/u6r6w6XlX8OqVudn1Ab0QFXTHxuQ==", "dependencies": { "@react-navigation/routers": "^6.1.9", "escape-string-regexp": "^4.0.0", @@ -6365,7 +6251,8 @@ }, "node_modules/@react-navigation/core/node_modules/escape-string-regexp": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { "node": ">=10" }, @@ -6375,7 +6262,8 @@ }, "node_modules/@react-navigation/elements": { "version": "1.3.30", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.30.tgz", + "integrity": "sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ==", "peerDependencies": { "@react-navigation/native": "^6.0.0", "react": "*", @@ -6385,7 +6273,8 @@ }, "node_modules/@react-navigation/native": { "version": "6.1.17", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.17.tgz", + "integrity": "sha512-mer3OvfwWOHoUSMJyLa4vnBH3zpFmCwuzrBPlw7feXklurr/ZDiLjLxUScOot6jLRMz/67GyilEYMmP99LL0RQ==", "dependencies": { "@react-navigation/core": "^6.4.16", "escape-string-regexp": "^4.0.0", @@ -6399,7 +6288,8 @@ }, "node_modules/@react-navigation/native-stack": { "version": "6.9.26", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.26.tgz", + "integrity": "sha512-++dueQ+FDj2XkZ902DVrK79ub1vp19nSdAZWxKRgd6+Bc0Niiesua6rMCqymYOVaYh+dagwkA9r00bpt/U5WLw==", "dependencies": { "@react-navigation/elements": "^1.3.30", "warn-once": "^0.1.0" @@ -6414,7 +6304,8 @@ }, "node_modules/@react-navigation/native/node_modules/escape-string-regexp": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { "node": ">=10" }, @@ -6424,54 +6315,74 @@ }, "node_modules/@react-navigation/routers": { "version": "6.1.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.9.tgz", + "integrity": "sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA==", "dependencies": { "nanoid": "^3.1.23" } }, "node_modules/@remix-run/node": { - "version": "1.19.3", - "license": "MIT", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.9.2.tgz", + "integrity": "sha512-2Mt2107pfelz4T+ziDBef3P4A7kgPqCDshnEYCVGxInivJ3HHwAKUcb7MhGa8uMMMA6LMWxbAPYNHPzC3iKv2A==", "dependencies": { - "@remix-run/server-runtime": "1.19.3", - "@remix-run/web-fetch": "^4.3.6", - "@remix-run/web-file": "^3.0.3", - "@remix-run/web-stream": "^1.0.4", + "@remix-run/server-runtime": "2.9.2", + "@remix-run/web-fetch": "^4.4.2", "@web3-storage/multipart-parser": "^1.0.0", - "abort-controller": "^3.0.0", "cookie-signature": "^1.1.0", "source-map-support": "^0.5.21", - "stream-slice": "^0.1.2" + "stream-slice": "^0.1.2", + "undici": "^6.10.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@remix-run/router": { - "version": "1.7.2", - "license": "MIT", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", + "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==", "engines": { - "node": ">=14" + "node": ">=14.0.0" } }, "node_modules/@remix-run/server-runtime": { - "version": "1.19.3", - "license": "MIT", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.9.2.tgz", + "integrity": "sha512-dX37FEeMVVg7KUbpRhX4hD0nUY0Sscz/qAjU4lYCdd6IzwJGariTmz+bQTXKCjploZuXj09OQZHSOS/ydkUVDA==", "dependencies": { - "@remix-run/router": "1.7.2", - "@types/cookie": "^0.4.1", + "@remix-run/router": "1.16.1", + "@types/cookie": "^0.6.0", "@web3-storage/multipart-parser": "^1.0.0", - "cookie": "^0.4.1", + "cookie": "^0.6.0", "set-cookie-parser": "^2.4.8", - "source-map": "^0.7.3" + "source-map": "^0.7.3", + "turbo-stream": "^2.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@remix-run/web-blob": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@remix-run/web-blob/-/web-blob-3.1.0.tgz", + "integrity": "sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==", "dependencies": { "@remix-run/web-stream": "^1.1.0", "web-encoding": "1.1.5" @@ -6479,7 +6390,8 @@ }, "node_modules/@remix-run/web-fetch": { "version": "4.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@remix-run/web-fetch/-/web-fetch-4.4.2.tgz", + "integrity": "sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==", "dependencies": { "@remix-run/web-blob": "^3.1.0", "@remix-run/web-file": "^3.1.0", @@ -6496,27 +6408,92 @@ }, "node_modules/@remix-run/web-file": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@remix-run/web-file/-/web-file-3.1.0.tgz", + "integrity": "sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==", "dependencies": { "@remix-run/web-blob": "^3.1.0" } }, "node_modules/@remix-run/web-form-data": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@remix-run/web-form-data/-/web-form-data-3.1.0.tgz", + "integrity": "sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==", "dependencies": { "web-encoding": "1.1.5" } }, "node_modules/@remix-run/web-stream": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@remix-run/web-stream/-/web-stream-1.1.0.tgz", + "integrity": "sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==", "dependencies": { "web-streams-polyfill": "^3.1.1" } }, + "node_modules/@rnx-kit/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==", + "dependencies": { + "@types/node": "^18.0.0", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=14.15" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/@types/node": { + "version": "18.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", + "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@segment/loosely-validate-event": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", "dependencies": { "component-type": "^1.2.1", "join-component": "^1.1.0" @@ -6524,59 +6501,66 @@ }, "node_modules/@sideway/address": { "version": "4.1.5", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dependencies": { "@hapi/hoek": "^9.0.0" } }, "node_modules/@sideway/formula": { "version": "3.0.1", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@sinonjs/commons": { "version": "3.0.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@swc/helpers": { "version": "0.5.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@tanstack/query-core": { - "version": "5.32.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.32.1.tgz", - "integrity": "sha512-mCWa1wdGb1jiny4+qYegbSeadcFj+Nq65KFSs4A1DRveoIq7SrTwUhqu7hrB6d54cQH5x59DfJvxusn3w1Cj/g==", + "version": "5.36.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.36.1.tgz", + "integrity": "sha512-BteWYEPUcucEu3NBcDAgKuI4U25R9aPrHSP6YSf2NvaD2pSlIQTdqOfLRsxH9WdRYg7k0Uom35Uacb6nvbIMJg==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "5.32.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.32.1.tgz", - "integrity": "sha512-+nXLMB0JK0XwTJ+lQt49DPNLrbSppni9N5W5yMR085yW3YaRKRUFhfVTER3TvQd1UycHpoGPFnt1gHiijXERAg==", + "version": "5.37.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.37.1.tgz", + "integrity": "sha512-EhtBNA8GL3XFeSx6VYUjXQ96n44xe3JGKZCzBINrCYlxbZP6UwBafv7ti4eSRWc2Fy+fybQre0w17gR6lMzULA==", "dependencies": { - "@tanstack/query-core": "5.32.1" + "@tanstack/query-core": "5.36.1" }, "funding": { "type": "github", @@ -6619,6 +6603,15 @@ "@types/node": "*" } }, + "node_modules/@types/bun": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.1.2.tgz", + "integrity": "sha512-pRBDD3EDqPf83qe95i3EpYu5G2J8bbb78a3736vnCm2K8YWtEE5cvJUq2jkKvJhW07YTfQtbImywIwRhWL8z3Q==", + "dev": true, + "dependencies": { + "bun-types": "1.1.8" + } + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -6628,13 +6621,15 @@ } }, "node_modules/@types/cookie": { - "version": "0.4.1", - "license": "MIT" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" }, "node_modules/@types/eslint": { - "version": "8.56.7", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/estree": "*", @@ -6643,8 +6638,9 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/eslint": "*", @@ -6653,7 +6649,8 @@ }, "node_modules/@types/estree": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "peer": true }, "node_modules/@types/express": { @@ -6685,25 +6682,29 @@ }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "license": "MIT" + "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==" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", - "license": "MIT", + "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==", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.15", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/long": { "version": "4.0.2", @@ -6716,8 +6717,9 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/node": { - "version": "20.12.4", - "license": "MIT", + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", "dependencies": { "undici-types": "~5.26.4" } @@ -6731,23 +6733,19 @@ "form-data": "^4.0.0" } }, - "node_modules/@types/node-fetch/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==", + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "@types/node": "*" } }, "node_modules/@types/prop-types": { "version": "15.7.12", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true }, "node_modules/@types/qs": { "version": "6.9.15", @@ -6761,8 +6759,9 @@ }, "node_modules/@types/react": { "version": "18.2.48", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "devOptional": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -6771,8 +6770,9 @@ }, "node_modules/@types/scheduler": { "version": "0.23.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==", + "devOptional": true }, "node_modules/@types/send": { "version": "0.17.4", @@ -6795,22 +6795,35 @@ }, "node_modules/@types/stack-utils": { "version": "2.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/yargs": { "version": "17.0.32", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@urql/core": { "version": "2.3.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", + "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", "dependencies": { "@graphql-typed-document-node/core": "^3.1.0", "wonka": "^4.0.14" @@ -6821,7 +6834,8 @@ }, "node_modules/@urql/exchange-retry": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", + "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", "dependencies": { "@urql/core": ">=2.3.1", "wonka": "^4.0.14" @@ -6831,48 +6845,48 @@ } }, "node_modules/@volar/language-core": { - "version": "2.2.0-alpha.10", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.0-alpha.10.tgz", - "integrity": "sha512-njVJLtpu0zMvDaEk7K5q4BRpOgbyEUljU++un9TfJoJNhxG0z/hWwpwgTRImO42EKvwIxF3XUzeMk+qatAFy7Q==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.4.tgz", + "integrity": "sha512-7As47GndxGxsqqYnbreLrfB5NDUeQioPM2LJKUuB4/34c0NpEJ2byVl3c9KYdjIdiEstWZ9JLtLKNTaPWb5jtA==", "dependencies": { - "@volar/source-map": "2.2.0-alpha.10" + "@volar/source-map": "2.2.4" } }, "node_modules/@volar/source-map": { - "version": "2.2.0-alpha.10", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.0-alpha.10.tgz", - "integrity": "sha512-nrdWApVkP5cksAnDEyy1JD9rKdwOJsEq1B+seWO4vNXmZNcxQQCx4DULLBvKt7AzRUAQiAuw5aQkb9RBaSqdVA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.4.tgz", + "integrity": "sha512-m92FLpR9vB1YEZfiZ+bfgpLrToL/DNkOrorWVep3pffHrwwI4Tx2oIQN+sqHJfKkiT5N3J1owC+8crhAEinfjg==", "dependencies": { "muggle-string": "^0.4.0" } }, "node_modules/@vue/compiler-core": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.26.tgz", - "integrity": "sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", + "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", "dependencies": { "@babel/parser": "^7.24.4", - "@vue/shared": "3.4.26", + "@vue/shared": "3.4.27", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.26.tgz", - "integrity": "sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", + "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", "dependencies": { - "@vue/compiler-core": "3.4.26", - "@vue/shared": "3.4.26" + "@vue/compiler-core": "3.4.27", + "@vue/shared": "3.4.27" } }, "node_modules/@vue/language-core": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.14.tgz", - "integrity": "sha512-3q8mHSNcGTR7sfp2X6jZdcb4yt8AjBXAfKk0qkZIh7GAJxOnoZ10h5HToZglw4ToFvAnq+xu/Z2FFbglh9Icag==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.19.tgz", + "integrity": "sha512-A9EGOnvb51jOvnCYoRLnMP+CcoPlbZVxI9gZXE/y2GksRWM6j/PrLEIC++pnosWTN08tFpJgxhSS//E9v/Sg+Q==", "dependencies": { - "@volar/language-core": "2.2.0-alpha.10", + "@volar/language-core": "~2.2.4", "@vue/compiler-dom": "^3.4.0", "@vue/shared": "^3.4.0", "computeds": "^0.0.1", @@ -6912,18 +6926,20 @@ } }, "node_modules/@vue/shared": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz", - "integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==" + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" }, "node_modules/@web3-storage/multipart-parser": { "version": "1.0.0", - "license": "(Apache-2.0 AND MIT)" + "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", + "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==" }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -6932,26 +6948,30 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", @@ -6961,14 +6981,16 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -6979,8 +7001,9 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" @@ -6988,8 +7011,9 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "@xtuc/long": "4.2.2" @@ -6997,14 +7021,16 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -7019,8 +7045,9 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -7032,8 +7059,9 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -7044,8 +7072,9 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -7058,8 +7087,9 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -7068,31 +7098,36 @@ }, "node_modules/@xmldom/xmldom": { "version": "0.7.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", "engines": { "node": ">=10.0.0" } }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, - "license": "BSD-3-Clause", "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, - "license": "Apache-2.0", "peer": true }, "node_modules/@zxing/text-encoding": { "version": "0.9.0", - "license": "(Unlicense OR Apache-2.0)", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", "optional": true }, "node_modules/abort-controller": { "version": "3.0.0", - "license": "MIT", + "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" }, @@ -7102,7 +7137,8 @@ }, "node_modules/accepts": { "version": "1.3.8", - "license": "MIT", + "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" @@ -7113,7 +7149,8 @@ }, "node_modules/acorn": { "version": "8.11.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -7123,8 +7160,9 @@ }, "node_modules/acorn-import-assertions": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, - "license": "MIT", "peer": true, "peerDependencies": { "acorn": "^8" @@ -7141,7 +7179,8 @@ }, "node_modules/agent-base": { "version": "6.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dependencies": { "debug": "4" }, @@ -7151,7 +7190,8 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -7161,13 +7201,14 @@ } }, "node_modules/ajv": { - "version": "8.12.0", - "license": "MIT", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -7176,7 +7217,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dependencies": { "ajv": "^8.0.0" }, @@ -7191,7 +7233,8 @@ }, "node_modules/ajv-keywords": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -7201,11 +7244,13 @@ }, "node_modules/anser": { "version": "1.4.10", - "license": "MIT" + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" }, "node_modules/ansi-escapes": { "version": "4.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dependencies": { "type-fest": "^0.21.3" }, @@ -7218,7 +7263,8 @@ }, "node_modules/ansi-fragments": { "version": "0.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", "dependencies": { "colorette": "^1.0.7", "slice-ansi": "^2.0.0", @@ -7227,14 +7273,16 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "3.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { "color-convert": "^1.9.0" }, @@ -7244,11 +7292,13 @@ }, "node_modules/any-promise": { "version": "1.3.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "node_modules/anymatch": { "version": "3.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -7259,7 +7309,8 @@ }, "node_modules/anymatch/node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -7269,19 +7320,23 @@ }, "node_modules/appdirsjs": { "version": "1.2.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==" }, "node_modules/application-config-path": { "version": "0.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", + "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==" }, "node_modules/arg": { "version": "5.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "1.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { "sprintf-js": "~1.0.2" } @@ -7295,6 +7350,21 @@ "dequal": "^2.0.3" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -7302,18 +7372,42 @@ }, "node_modules/array-union": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "engines": { "node": ">=8" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asap": { "version": "2.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "node_modules/ast-types": { "version": "0.15.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", "dependencies": { "tslib": "^2.0.1" }, @@ -7323,14 +7417,16 @@ }, "node_modules/astral-regex": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "engines": { "node": ">=4" } }, "node_modules/async-limiter": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, "node_modules/async-retry": { "version": "1.3.3", @@ -7342,17 +7438,21 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "license": "MIT" + "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", - "license": "ISC", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "engines": { "node": ">= 4.0.0" } }, "node_modules/autoprefixer": { "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "dev": true, "funding": [ { @@ -7368,7 +7468,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-lite": "^1.0.30001599", @@ -7389,7 +7488,8 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -7411,17 +7511,19 @@ }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.10", - "license": "MIT", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.1", + "@babel/helper-define-polyfill-provider": "^0.6.2", "semver": "^6.3.1" }, "peerDependencies": { @@ -7430,187 +7532,65 @@ }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.10.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.1", "core-js-compat": "^3.36.1" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.1", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-react-native-web": { - "version": "0.18.12", - "license": "MIT" - }, - "node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "license": "MIT" - }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" - } - }, - "node_modules/babel-preset-expo": { - "version": "10.0.1", - "license": "MIT", - "dependencies": { - "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/preset-env": "^7.20.0", - "@babel/preset-react": "^7.22.15", - "@react-native/babel-preset": "^0.73.18", - "babel-plugin-react-native-web": "~0.18.10", - "react-refresh": "0.14.0" - } - }, - "node_modules/babel-preset-expo/node_modules/@react-native/babel-plugin-codegen": { - "version": "0.73.4", - "license": "MIT", - "dependencies": { - "@react-native/codegen": "0.73.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/babel-preset-expo/node_modules/@react-native/babel-preset": { - "version": "0.73.21", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.73.4", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/babel-preset-expo/node_modules/@react-native/codegen": { - "version": "0.73.3", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-preset-expo/node_modules/flow-parser": { - "version": "0.206.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" + "node_modules/babel-plugin-react-native-web": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.11.tgz", + "integrity": "sha512-0sHf8GgDhsRZxGwlwHHdfL3U8wImFaLw4haEa60U9M3EiO3bg6u3BJ+1vXhwgrevqSq76rMb5j1HJs+dNvMj5g==" + }, + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" } }, - "node_modules/babel-preset-fbjs": { - "version": "3.4.0", - "license": "MIT", - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node_modules/babel-preset-expo": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.6.tgz", + "integrity": "sha512-jRi9I5/jT+dnIiNJDjDg+I/pV+AlxrIW/DNbdqYoRWPZA/LHDqD6IJnJXLxbuTcQ+llp+0LWcU7f/kC/PgGpkw==", + "dependencies": { + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/preset-react": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@react-native/babel-preset": "~0.74.83", + "babel-plugin-react-native-web": "~0.19.10", + "react-refresh": "^0.14.2" } }, "node_modules/balanced-match": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "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", @@ -7624,12 +7604,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/better-opn": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", "dependencies": { "open": "^8.0.4" }, @@ -7639,14 +7619,16 @@ }, "node_modules/big-integer": { "version": "1.6.52", - "license": "Unlicense", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", "engines": { "node": ">=0.6" } }, "node_modules/binary-extensions": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" }, @@ -7656,7 +7638,8 @@ }, "node_modules/bl": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -7665,7 +7648,8 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7675,10 +7659,6 @@ "node": ">= 6" } }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "license": "MIT" - }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -7702,14 +7682,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/body-parser/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/body-parser/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -7723,27 +7695,18 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/body-parser/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/bplist-creator": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", "dependencies": { "stream-buffers": "2.2.x" } }, "node_modules/bplist-parser": { "version": "0.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", "dependencies": { "big-integer": "1.6.x" }, @@ -7753,7 +7716,8 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7761,7 +7725,8 @@ }, "node_modules/braces": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { "fill-range": "^7.0.1" }, @@ -7771,6 +7736,8 @@ }, "node_modules/browserslist": { "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "funding": [ { "type": "opencollective", @@ -7785,7 +7752,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001587", "electron-to-chromium": "^1.4.668", @@ -7801,13 +7767,16 @@ }, "node_modules/bser": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -7822,7 +7791,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -7830,7 +7798,8 @@ }, "node_modules/buffer-alloc": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" @@ -7838,22 +7807,38 @@ }, "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" }, "node_modules/buffer-fill": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" }, "node_modules/buffer-from": { "version": "1.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtins": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" + }, + "node_modules/bun-types": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.1.8.tgz", + "integrity": "sha512-dwhfuUKSGK8hm5Llcvb5+ejRh+4mIt8ibObJVKhZBsi0ScpXmt+AlaS1eDW6uRXCHj084Qt0kIqAJ08/7ZGC9Q==", + "dev": true, + "dependencies": { + "@types/node": "~20.12.8", + "@types/ws": "~8.5.10" + } }, "node_modules/busboy": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dependencies": { "streamsearch": "^1.1.0" }, @@ -7862,79 +7847,90 @@ } }, "node_modules/bytes": { - "version": "3.0.0", - "license": "MIT", + "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/cacache": { - "version": "15.3.0", - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", + "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/cacache/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==", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "balanced-match": "^1.0.0" } }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", + "node_modules/cacache/node_modules/glob": { + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" + }, "bin": { - "mkdirp": "bin/cmd.js" + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { - "glob": "^7.1.3" + "brace-expansion": "^2.0.1" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/call-bind": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -7951,7 +7947,8 @@ }, "node_modules/caller-callsite": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", "dependencies": { "callsites": "^2.0.0" }, @@ -7961,7 +7958,8 @@ }, "node_modules/caller-path": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", "dependencies": { "caller-callsite": "^2.0.0" }, @@ -7971,14 +7969,16 @@ }, "node_modules/callsites": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", "engines": { "node": ">=4" } }, "node_modules/camelcase": { "version": "6.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { "node": ">=10" }, @@ -7988,20 +7988,24 @@ }, "node_modules/camelcase-css": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "engines": { "node": ">= 6" } }, "node_modules/camelize": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001605", + "version": "1.0.30001620", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", + "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", "funding": [ { "type": "opencollective", @@ -8015,12 +8019,12 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/chalk": { "version": "2.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -8032,14 +8036,16 @@ }, "node_modules/charenc": { "version": "0.0.2", - "license": "BSD-3-Clause", + "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.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -8061,14 +8067,16 @@ }, "node_modules/chownr": { "version": "2.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "engines": { "node": ">=10" } }, "node_modules/chrome-launcher": { "version": "0.15.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", @@ -8084,7 +8092,8 @@ }, "node_modules/chrome-launcher/node_modules/escape-string-regexp": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { "node": ">=10" }, @@ -8094,81 +8103,40 @@ }, "node_modules/chrome-trace-event": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6.0" } }, - "node_modules/chromium-edge-launcher": { - "version": "1.0.0", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "node_modules/chromium-edge-launcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chromium-edge-launcher/node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/chromium-edge-launcher/node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/ci-info": { "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/sibiraj-s" } ], - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/clean-stack": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "engines": { "node": ">=6" } }, "node_modules/cli-cursor": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dependencies": { "restore-cursor": "^2.0.0" }, @@ -8178,7 +8146,8 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "engines": { "node": ">=6" }, @@ -8188,11 +8157,13 @@ }, "node_modules/client-only": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, "node_modules/cliui": { "version": "8.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -8204,7 +8175,8 @@ }, "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -8214,14 +8186,16 @@ }, "node_modules/clone": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "engines": { "node": ">=0.8" } }, "node_modules/clone-deep": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -8255,7 +8229,8 @@ }, "node_modules/color": { "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" @@ -8266,18 +8241,21 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/color-string": { "version": "1.9.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -8285,7 +8263,8 @@ }, "node_modules/color/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -8295,15 +8274,18 @@ }, "node_modules/color/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colorette": { "version": "1.4.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" }, "node_modules/combined-stream": { "version": "1.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -8313,29 +8295,34 @@ }, "node_modules/command-exists": { "version": "1.2.9", - "license": "MIT" + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "node_modules/commander": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { "node": ">= 10" } }, "node_modules/commondir": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/component-type": { "version": "1.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", + "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==", "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/compressible": { "version": "2.0.18", - "license": "MIT", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -8345,7 +8332,8 @@ }, "node_modules/compression": { "version": "1.7.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -8359,16 +8347,31 @@ "node": ">= 0.8.0" } }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/compression/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/computeds": { "version": "0.0.1", @@ -8377,11 +8380,13 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/connect": { "version": "3.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", @@ -8394,14 +8399,16 @@ }, "node_modules/connect/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -8414,25 +8421,6 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/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/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", @@ -8443,25 +8431,29 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { - "version": "0.4.2", - "license": "MIT", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.1.tgz", + "integrity": "sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==", "engines": { "node": ">=6.6.0" } }, "node_modules/core-js-compat": { - "version": "3.36.1", - "license": "MIT", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", "dependencies": { "browserslist": "^4.23.0" }, @@ -8472,7 +8464,8 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cors": { "version": "2.8.5", @@ -8488,7 +8481,8 @@ }, "node_modules/cosmiconfig": { "version": "5.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dependencies": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", @@ -8507,67 +8501,66 @@ }, "node_modules/cross-fetch": { "version": "3.1.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { - "version": "6.0.5", - "license": "MIT", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node": ">= 8" } }, "node_modules/crypt": { "version": "0.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "engines": { "node": "*" } }, "node_modules/crypto-random-string": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "engines": { "node": ">=8" } }, "node_modules/css-color-keywords": { "version": "1.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", "engines": { "node": ">=4" } }, "node_modules/css-in-js-utils": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", + "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", "dependencies": { "hyphenate-style-name": "^1.0.3" } }, "node_modules/css-mediaquery": { "version": "0.1.2", - "license": "BSD" + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" }, "node_modules/css-to-react-native": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", @@ -8589,7 +8582,8 @@ }, "node_modules/cssesc": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "bin": { "cssesc": "bin/cssesc" }, @@ -8599,23 +8593,75 @@ }, "node_modules/csstype": { "version": "3.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true }, "node_modules/dag-map": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==" }, "node_modules/data-uri-to-buffer": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", "engines": { "node": ">= 6" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dayjs": { - "version": "1.11.10", - "license": "MIT" + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" }, "node_modules/de-indent": { "version": "1.0.2", @@ -8624,7 +8670,8 @@ }, "node_modules/debug": { "version": "4.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -8639,14 +8686,16 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "engines": { "node": ">=0.10.0" } }, "node_modules/decode-uri-component": { "version": "0.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "engines": { "node": ">=0.10" } @@ -8658,21 +8707,24 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { "node": ">=4.0.0" } }, "node_modules/deepmerge": { "version": "4.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { "node": ">=0.10.0" } }, "node_modules/default-gateway": { "version": "4.2.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dependencies": { "execa": "^1.0.0", "ip-regex": "^2.1.0" @@ -8683,7 +8735,8 @@ }, "node_modules/defaults": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dependencies": { "clone": "^1.0.2" }, @@ -8693,14 +8746,16 @@ }, "node_modules/defaults/node_modules/clone": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "engines": { "node": ">=0.8" } }, "node_modules/define-data-property": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -8715,14 +8770,32 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "engines": { "node": ">=8" } }, + "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==", + "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/del": { "version": "6.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "dependencies": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", @@ -8742,7 +8815,8 @@ }, "node_modules/del/node_modules/rimraf": { "version": "3.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { "glob": "^7.1.3" }, @@ -8755,32 +8829,23 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } }, "node_modules/denodeify": { "version": "1.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" }, "node_modules/depd": { "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecated-react-native-prop-types": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "@react-native/normalize-colors": "^0.73.0", - "invariant": "^2.2.4", - "prop-types": "^15.8.1" - }, + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">=18" + "node": ">= 0.8" } }, "node_modules/dequal": { @@ -8794,7 +8859,8 @@ }, "node_modules/destroy": { "version": "1.2.0", - "license": "MIT", + "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" @@ -8802,7 +8868,8 @@ }, "node_modules/detect-libc": { "version": "1.0.3", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "bin": { "detect-libc": "bin/detect-libc.js" }, @@ -8812,7 +8879,8 @@ }, "node_modules/didyoumean": { "version": "1.2.2", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "node_modules/diff": { "version": "4.0.2", @@ -8825,7 +8893,8 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dependencies": { "path-type": "^4.0.0" }, @@ -8835,52 +8904,75 @@ }, "node_modules/dlv": { "version": "1.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "node_modules/dotenv": { - "version": "16.0.3", - "license": "BSD-2-Clause", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { - "version": "10.0.0", - "license": "BSD-2-Clause", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", + "dependencies": { + "dotenv": "^16.4.4" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/ee-first": { "version": "1.1.1", - "license": "MIT" + "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.727", - "license": "ISC" + "version": "1.4.774", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz", + "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==" }, "node_modules/emoji-regex": { "version": "8.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { "version": "1.4.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.16.0", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", + "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -8903,14 +8995,16 @@ }, "node_modules/env-editor": { "version": "0.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", "engines": { "node": ">=8" } }, "node_modules/envinfo": { - "version": "7.11.1", - "license": "MIT", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "bin": { "envinfo": "dist/cli.js" }, @@ -8920,25 +9014,29 @@ }, "node_modules/eol": { "version": "0.9.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==" }, "node_modules/error-ex": { "version": "1.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/error-stack-parser": { "version": "2.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dependencies": { "stackframe": "^1.3.4" } }, "node_modules/errorhandler": { "version": "1.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", "dependencies": { "accepts": "~1.3.7", "escape-html": "~1.0.3" @@ -8947,9 +9045,69 @@ "node": ">= 0.8" } }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-define-property": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -8959,39 +9117,85 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.5.0", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", + "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/escalade": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "license": "MIT" + "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": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { "node": ">=0.8.0" } }, "node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "esrecurse": "^4.3.0", @@ -9003,7 +9207,8 @@ }, "node_modules/esprima": { "version": "4.0.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -9014,8 +9219,9 @@ }, "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, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "estraverse": "^5.2.0" @@ -9026,8 +9232,9 @@ }, "node_modules/esrecurse/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, - "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=4.0" @@ -9035,8 +9242,9 @@ }, "node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=4.0" @@ -9049,29 +9257,34 @@ }, "node_modules/esutils": { "version": "2.0.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, "node_modules/event-target-shim": { "version": "5.0.1", - "license": "MIT", + "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/events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.8.x" @@ -9079,11 +9292,13 @@ }, "node_modules/exec-async": { "version": "2.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==" }, "node_modules/execa": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -9097,23 +9312,85 @@ "node": ">=6" } }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/expo": { - "version": "50.0.14", - "license": "MIT", + "version": "51.0.8", + "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.8.tgz", + "integrity": "sha512-bdTOiMb1f3PChtuqEZ9czUm2gMTmS0r1+H+Pkm2O3PsuLnOgxfIBzL6S37+J4cUocLBaENrmx9SOGKpzhBqXpg==", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.17.8", - "@expo/config": "8.5.4", - "@expo/config-plugins": "7.8.4", - "@expo/metro-config": "0.17.6", + "@expo/cli": "0.18.13", + "@expo/config": "9.0.2", + "@expo/config-plugins": "8.0.4", + "@expo/metro-config": "0.18.4", "@expo/vector-icons": "^14.0.0", - "babel-preset-expo": "~10.0.1", - "expo-asset": "~9.0.2", - "expo-file-system": "~16.0.8", - "expo-font": "~11.10.3", - "expo-keep-awake": "~12.8.2", - "expo-modules-autolinking": "1.10.3", - "expo-modules-core": "1.11.12", + "babel-preset-expo": "~11.0.6", + "expo-asset": "~10.0.6", + "expo-file-system": "~17.0.1", + "expo-font": "~12.0.5", + "expo-keep-awake": "~13.0.2", + "expo-modules-autolinking": "1.11.1", + "expo-modules-core": "1.12.11", "fbemitter": "^3.0.0", "whatwg-url-without-unicode": "8.0.0-3" }, @@ -9122,37 +9399,42 @@ } }, "node_modules/expo-asset": { - "version": "9.0.2", - "license": "MIT", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-10.0.6.tgz", + "integrity": "sha512-waP73/ccn/HZNNcGM4/s3X3icKjSSbEQ9mwc6tX34oYNg+XE5WdwOuZ9wgVVFrU7wZMitq22lQXd2/O0db8bxg==", "dependencies": { - "@react-native/assets-registry": "~0.73.1", - "blueimp-md5": "^2.10.0", - "expo-constants": "~15.4.0", - "expo-file-system": "~16.0.0", + "@react-native/assets-registry": "~0.74.83", + "expo-constants": "~16.0.0", "invariant": "^2.2.4", "md5-file": "^3.2.3" + }, + "peerDependencies": { + "expo": "*" } }, "node_modules/expo-constants": { - "version": "15.4.5", - "license": "MIT", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-16.0.1.tgz", + "integrity": "sha512-s6aTHtglp926EsugWtxN7KnpSsE9FCEjb7CgEjQQ78Gpu4btj4wB+IXot2tlqNwqv+x7xFe5veoPGfJDGF/kVg==", "dependencies": { - "@expo/config": "~8.5.0" + "@expo/config": "~9.0.0-beta.0" }, "peerDependencies": { "expo": "*" } }, "node_modules/expo-file-system": { - "version": "16.0.8", - "license": "MIT", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-17.0.1.tgz", + "integrity": "sha512-dYpnZJqTGj6HCYJyXAgpFkQWsiCH3HY1ek2cFZVHFoEc5tLz9gmdEgTF6nFHurvmvfmXqxi7a5CXyVm0aFYJBw==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-font": { - "version": "11.10.3", - "license": "MIT", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-12.0.5.tgz", + "integrity": "sha512-h/VkN4jlHYDJ6T6pPgOYTVoDEfBY0CTKQe4pxnPDGQiE6H+DFdDgk+qWVABGpRMH0+zXoHB+AEi3OoQjXIynFA==", "dependencies": { "fontfaceobserver": "^2.1.0" }, @@ -9161,35 +9443,38 @@ } }, "node_modules/expo-image": { - "version": "1.10.6", - "license": "MIT", + "version": "1.12.9", + "resolved": "https://registry.npmjs.org/expo-image/-/expo-image-1.12.9.tgz", + "integrity": "sha512-WnC3Z3vsOTJLWE9FGB0a0GANmkpfBCqTf9bSLXXl50hEYiRcfwrAYZ/87oswAhggMGbJqOuLKZxt5rtuij1xcQ==", "dependencies": { - "@react-native/assets-registry": "~0.73.1" + "@react-native/assets-registry": "~0.74.83" }, "peerDependencies": { "expo": "*" } }, "node_modules/expo-keep-awake": { - "version": "12.8.2", - "license": "MIT", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-13.0.2.tgz", + "integrity": "sha512-kKiwkVg/bY0AJ5q1Pxnm/GvpeB6hbNJhcFsoOWDh2NlpibhCLaHL826KHUM+WsnJRbVRxJ+K9vbPRHEMvFpVyw==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-linking": { - "version": "6.2.2", - "license": "MIT", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-6.3.1.tgz", + "integrity": "sha512-xuZCntSBGWCD/95iZ+mTUGTwHdy8Sx+immCqbUBxdvZ2TN61P02kKg7SaLS8A4a/hLrSCwrg5tMMwu5wfKr35g==", "dependencies": { - "expo-constants": "~15.4.3", + "expo-constants": "~16.0.0", "invariant": "^2.2.4" } }, "node_modules/expo-modules-autolinking": { - "version": "1.10.3", - "license": "MIT", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz", + "integrity": "sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw==", "dependencies": { - "@expo/config": "~8.5.0", "chalk": "^4.1.0", "commander": "^7.2.0", "fast-glob": "^3.2.5", @@ -9202,7 +9487,8 @@ }, "node_modules/expo-modules-autolinking/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -9215,7 +9501,8 @@ }, "node_modules/expo-modules-autolinking/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9229,7 +9516,8 @@ }, "node_modules/expo-modules-autolinking/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -9239,11 +9527,13 @@ }, "node_modules/expo-modules-autolinking/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/expo-modules-autolinking/node_modules/fs-extra": { "version": "9.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -9256,14 +9546,16 @@ }, "node_modules/expo-modules-autolinking/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/expo-modules-autolinking/node_modules/jsonfile": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { "universalify": "^2.0.0" }, @@ -9273,7 +9565,8 @@ }, "node_modules/expo-modules-autolinking/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -9283,30 +9576,33 @@ }, "node_modules/expo-modules-autolinking/node_modules/universalify": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { "node": ">= 10.0.0" } }, "node_modules/expo-modules-core": { - "version": "1.11.12", - "license": "MIT", + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.11.tgz", + "integrity": "sha512-CF5G6hZo/6uIUz6tj4dNRlvE5L4lakYukXPqz5ZHQ+6fLk1NQVZbRdpHjMkxO/QSBQcKUzG/ngeytpoJus7poQ==", "dependencies": { "invariant": "^2.2.4" } }, "node_modules/expo-router": { - "version": "3.4.8", - "license": "MIT", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.5.14.tgz", + "integrity": "sha512-RVsyJLosZSq89ebA5qfPToRcFZJoTTb+6nwPHk6iESD6KON/Q7ZODt5fvCwXkY86tLNEMGo160QvBPfBZmglaA==", "dependencies": { - "@expo/metro-runtime": "3.1.3", - "@expo/server": "^0.3.0", + "@expo/metro-runtime": "3.2.1", + "@expo/server": "^0.4.0", "@radix-ui/react-slot": "1.0.1", "@react-navigation/bottom-tabs": "~6.5.7", "@react-navigation/native": "~6.1.6", "@react-navigation/native-stack": "~6.9.12", - "expo-splash-screen": "0.26.4", - "react-helmet-async": "^1.3.0", + "expo-splash-screen": "0.27.4", + "react-native-helmet-async": "2.0.4", "schema-utils": "^4.0.1" }, "peerDependencies": { @@ -9332,18 +9628,85 @@ } }, "node_modules/expo-splash-screen": { - "version": "0.26.4", - "license": "MIT", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.27.4.tgz", + "integrity": "sha512-JwepK1FjbwiOK2nwIFanfzj9s7UXYnpTwLX8A9v7Ec3K4V28yu8HooSc9X60cftBw9UZrs8Gwj4PgTpQabBS9A==", "dependencies": { - "@expo/prebuild-config": "6.7.4" + "@expo/prebuild-config": "7.0.3" }, "peerDependencies": { "expo": "*" } }, + "node_modules/expo-splash-screen/node_modules/@expo/prebuild-config": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.3.tgz", + "integrity": "sha512-Kvxy/oQzkxwXLvAmwb+ygxuRn4xUUN2+mVJj3KDe4bRVCNyDPs7wlgdokF3twnWjzRZssUzseMkhp+yHPjAEhA==", + "dependencies": { + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.0-beta.0", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@react-native/normalize-colors": "~0.74.83", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "xml2js": "0.6.0" + }, + "peerDependencies": { + "expo-modules-autolinking": ">=0.8.1" + } + }, + "node_modules/expo-splash-screen/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==", + "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/expo-splash-screen/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/expo-splash-screen/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expo-splash-screen/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/expo-status-bar": { - "version": "1.11.1", - "license": "MIT" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.12.1.tgz", + "integrity": "sha512-/t3xdbS8KB0prj5KG5w7z+wZPFlPtkgs95BsmrP/E7Q0xHXTcDcQ6Cu2FkFuRM+PKTb17cJDnLkawyS5vDLxMA==" }, "node_modules/express": { "version": "4.19.2", @@ -9386,14 +9749,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -9429,55 +9784,20 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/express/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/express/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/express/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/extend": { "version": "3.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9491,16 +9811,20 @@ }, "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, - "license": "MIT", "peer": true }, "node_modules/fast-loops": { "version": "1.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.3.tgz", + "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" }, "node_modules/fast-xml-parser": { - "version": "4.3.6", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz", + "integrity": "sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==", "funding": [ { "type": "github", @@ -9511,7 +9835,6 @@ "url": "https://paypal.me/naturalintelligence" } ], - "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -9521,28 +9844,32 @@ }, "node_modules/fastq": { "version": "1.17.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { "version": "2.0.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dependencies": { "bser": "2.1.1" } }, "node_modules/fbemitter": { "version": "3.0.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "dependencies": { "fbjs": "^3.0.0" } }, "node_modules/fbjs": { "version": "3.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", "dependencies": { "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", @@ -9555,15 +9882,18 @@ }, "node_modules/fbjs-css-vars": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, "node_modules/fetch-retry": { "version": "4.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==" }, "node_modules/fill-range": { "version": "7.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -9573,14 +9903,16 @@ }, "node_modules/filter-obj": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/finalhandler": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -9596,18 +9928,40 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } }, "node_modules/find-cache-dir": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -9619,7 +9973,8 @@ }, "node_modules/find-up": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -9633,36 +9988,68 @@ }, "node_modules/find-yarn-workspace-root": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dependencies": { "micromatch": "^4.0.2" } }, "node_modules/flow-enums-runtime": { "version": "0.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" }, "node_modules/flow-parser": { - "version": "0.233.0", - "license": "MIT", + "version": "0.236.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.236.0.tgz", + "integrity": "sha512-0OEk9Gr+Yj7wjDW2KgaNYUypKau71jAfFyeLQF5iVtxqc6uJHag/MT7pmaEApf4qM7u86DkBcd4ualddYMfbLw==", "engines": { "node": ">=0.4.0" } }, "node_modules/fontfaceobserver": { "version": "2.3.0", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==" }, "node_modules/for-each": { "version": "0.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { "is-callable": "^1.1.3" } }, + "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==", + "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==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { - "version": "3.0.1", - "license": "MIT", + "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", @@ -9682,8 +10069,9 @@ }, "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, - "license": "MIT", "engines": { "node": "*" }, @@ -9694,21 +10082,24 @@ }, "node_modules/freeport-async": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", "engines": { "node": ">=8" } }, "node_modules/fresh": { "version": "0.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } }, "node_modules/fs-extra": { "version": "8.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -9719,22 +10110,26 @@ } }, "node_modules/fs-minipass": { - "version": "2.1.0", - "license": "ISC", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/fs.realpath": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -9745,28 +10140,57 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "license": "MIT", + "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/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==", + "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==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -9783,14 +10207,16 @@ }, "node_modules/get-port": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "engines": { "node": ">=4" } }, "node_modules/get-stream": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dependencies": { "pump": "^3.0.0" }, @@ -9798,16 +10224,34 @@ "node": ">=6" } }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/getenv": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", + "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", "engines": { "node": ">=6" } }, "node_modules/glob": { "version": "7.2.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9825,7 +10269,8 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -9835,18 +10280,36 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/globals": { "version": "11.12.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -9864,7 +10327,8 @@ }, "node_modules/gopd": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -9873,13 +10337,13 @@ } }, "node_modules/gql.tada": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.6.3.tgz", - "integrity": "sha512-uIlVEv6z3kvnRb3hxUTu0gGOO7WxpWdm2H/tCm3SHxbznOGgw64x3gNo8ofaGgBN9OiX1KQ6IrYJmA+V8Gh7ig==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.7.5.tgz", + "integrity": "sha512-GepPTee+FWSVVZQ7GiJHzsGNo7gOb59kcn4mUPYLlkbpeJfOUwpuoB05ZNaXG0W4qZVPd1I7R2UgMHBjY1lGlQ==", "dependencies": { "@0no-co/graphql.web": "^1.0.5", - "@gql.tada/cli-utils": "1.3.3", - "@gql.tada/internal": "0.3.3" + "@gql.tada/cli-utils": "1.3.9", + "@gql.tada/internal": "1.0.0" }, "bin": { "gql-tada": "bin/cli.js", @@ -9891,7 +10355,8 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphql": { "version": "16.8.1", @@ -9903,7 +10368,8 @@ }, "node_modules/graphql-tag": { "version": "2.12.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", "dependencies": { "tslib": "^2.1.0" }, @@ -9914,16 +10380,26 @@ "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { "es-define-property": "^1.0.0" }, @@ -9933,7 +10409,8 @@ }, "node_modules/has-proto": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -9943,7 +10420,8 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -9953,7 +10431,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { "has-symbols": "^1.0.3" }, @@ -9966,7 +10445,8 @@ }, "node_modules/hasown": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -9983,19 +10463,22 @@ } }, "node_modules/hermes-estree": { - "version": "0.20.1", - "license": "MIT" + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz", + "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==" }, "node_modules/hermes-parser": { - "version": "0.20.1", - "license": "MIT", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz", + "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==", "dependencies": { - "hermes-estree": "0.20.1" + "hermes-estree": "0.19.1" } }, "node_modules/hermes-profile-transformer": { "version": "0.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", "dependencies": { "source-map": "^0.7.3" }, @@ -10005,7 +10488,8 @@ }, "node_modules/hosted-git-info": { "version": "3.0.8", - "license": "ISC", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -10015,7 +10499,8 @@ }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { "yallist": "^4.0.0" }, @@ -10023,13 +10508,10 @@ "node": ">=10" } }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/http-errors": { "version": "2.0.0", - "license": "MIT", + "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", @@ -10041,16 +10523,10 @@ "node": ">= 0.8" } }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dependencies": { "agent-base": "6", "debug": "4" @@ -10061,14 +10537,16 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "engines": { "node": ">=10.17.0" } }, "node_modules/hyphenate-style-name": { - "version": "1.0.4", - "license": "BSD-3-Clause" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.5.tgz", + "integrity": "sha512-fedL7PRwmeVkgyhu9hLeTBaI6wcGk7JGJswdaRsa5aUbkXI1kr1xZwTPBtaYPpwf56878iDek6VbVnuWMebJmw==" }, "node_modules/iconv-lite": { "version": "0.4.24", @@ -10083,6 +10561,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -10096,19 +10576,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "engines": { "node": ">= 4" } }, "node_modules/image-size": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", "dependencies": { "queue": "6.0.2" }, @@ -10121,7 +10602,8 @@ }, "node_modules/import-fresh": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "dependencies": { "caller-path": "^2.0.0", "resolve-from": "^3.0.0" @@ -10132,32 +10614,32 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "engines": { "node": ">=4" } }, "node_modules/imurmurhash": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { "node": ">=8" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "license": "ISC" - }, "node_modules/inflight": { "version": "1.0.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -10165,15 +10647,18 @@ }, "node_modules/inherits": { "version": "2.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/inline-style-prefixer": { "version": "6.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz", + "integrity": "sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==", "dependencies": { "css-in-js-utils": "^3.1.0", "fast-loops": "^1.1.3" @@ -10181,7 +10666,8 @@ }, "node_modules/internal-ip": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dependencies": { "default-gateway": "^4.2.0", "ipaddr.js": "^1.9.0" @@ -10190,34 +10676,47 @@ "node": ">=6" } }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/invariant": { "version": "2.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dependencies": { "loose-envify": "^1.0.0" } }, - "node_modules/ip": { - "version": "1.1.9", - "license": "MIT" - }, "node_modules/ip-regex": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", "engines": { "node": ">=4" } }, "node_modules/ipaddr.js": { "version": "1.9.1", - "license": "MIT", + "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-arguments": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -10229,13 +10728,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-binary-path": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -10243,13 +10770,30 @@ "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==", + "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-buffer": { "version": "1.1.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-callable": { "version": "1.2.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -10259,7 +10803,8 @@ }, "node_modules/is-core-module": { "version": "2.13.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { "hasown": "^2.0.0" }, @@ -10267,16 +10812,46 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-directory": { "version": "0.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-docker": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "bin": { "is-docker": "cli.js" }, @@ -10289,21 +10864,24 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "engines": { "node": ">=4" } }, "node_modules/is-generator-function": { "version": "1.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -10316,7 +10894,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -10326,14 +10905,16 @@ }, "node_modules/is-interactive": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "engines": { "node": ">=8" } }, "node_modules/is-invalid-path": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", "dependencies": { "is-glob": "^2.0.0" }, @@ -10343,14 +10924,16 @@ }, "node_modules/is-invalid-path/node_modules/is-extglob": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-invalid-path/node_modules/is-glob": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dependencies": { "is-extglob": "^1.0.0" }, @@ -10358,30 +10941,59 @@ "node": ">=0.10.0" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "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==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-cwd": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "engines": { "node": ">=6" } }, "node_modules/is-path-inside": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "engines": { "node": ">=8" } }, "node_modules/is-plain-object": { "version": "2.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dependencies": { "isobject": "^3.0.1" }, @@ -10398,16 +11010,75 @@ "@types/estree": "*" } }, + "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==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "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==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typed-array": { "version": "1.1.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -10420,7 +11091,8 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "engines": { "node": ">=10" }, @@ -10430,7 +11102,8 @@ }, "node_modules/is-valid-path": { "version": "0.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", "dependencies": { "is-invalid-path": "^0.1.0" }, @@ -10438,9 +11111,21 @@ "node": ">=0.10.0" } }, + "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==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-wsl": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { "is-docker": "^2.0.0" }, @@ -10450,22 +11135,43 @@ }, "node_modules/isarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { "node": ">=0.10.0" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "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-environment-node": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -10480,14 +11186,16 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -10505,7 +11213,8 @@ }, "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -10518,7 +11227,8 @@ }, "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10532,7 +11242,8 @@ }, "node_modules/jest-message-util/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -10542,18 +11253,21 @@ }, "node_modules/jest-message-util/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-message-util/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/jest-message-util/node_modules/pretty-format": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -10565,7 +11279,8 @@ }, "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "engines": { "node": ">=10" }, @@ -10574,12 +11289,14 @@ } }, "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.2.0", - "license": "MIT" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/jest-message-util/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -10589,7 +11306,8 @@ }, "node_modules/jest-mock": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -10601,7 +11319,8 @@ }, "node_modules/jest-util": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -10616,7 +11335,8 @@ }, "node_modules/jest-util/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -10629,7 +11349,8 @@ }, "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10643,7 +11364,8 @@ }, "node_modules/jest-util/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -10653,18 +11375,21 @@ }, "node_modules/jest-util/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-util/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/jest-util/node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -10674,7 +11399,8 @@ }, "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -10684,7 +11410,8 @@ }, "node_modules/jest-validate": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -10699,7 +11426,8 @@ }, "node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -10712,7 +11440,8 @@ }, "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10726,7 +11455,8 @@ }, "node_modules/jest-validate/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -10736,18 +11466,21 @@ }, "node_modules/jest-validate/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-validate/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/jest-validate/node_modules/pretty-format": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -10759,7 +11492,8 @@ }, "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "engines": { "node": ">=10" }, @@ -10768,12 +11502,14 @@ } }, "node_modules/jest-validate/node_modules/react-is": { - "version": "18.2.0", - "license": "MIT" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -10783,7 +11519,8 @@ }, "node_modules/jest-worker": { "version": "29.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -10796,14 +11533,16 @@ }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { "has-flag": "^4.0.0" }, @@ -10816,18 +11555,21 @@ }, "node_modules/jimp-compact": { "version": "0.16.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==" }, "node_modules/jiti": { "version": "1.21.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/joi": { - "version": "17.12.3", - "license": "BSD-3-Clause", + "version": "17.13.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz", + "integrity": "sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==", "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", @@ -10838,15 +11580,18 @@ }, "node_modules/join-component": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==" }, "node_modules/js-tokens": { "version": "4.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "3.14.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -10857,15 +11602,18 @@ }, "node_modules/jsc-android": { "version": "250231.0.0", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", + "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==" }, "node_modules/jsc-safe-url": { "version": "0.2.4", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==" }, "node_modules/jscodeshift": { "version": "0.14.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", "dependencies": { "@babel/core": "^7.13.16", "@babel/parser": "^7.13.16", @@ -10896,7 +11644,8 @@ }, "node_modules/jscodeshift/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -10909,7 +11658,8 @@ }, "node_modules/jscodeshift/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10923,7 +11673,8 @@ }, "node_modules/jscodeshift/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -10933,18 +11684,21 @@ }, "node_modules/jscodeshift/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jscodeshift/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/jscodeshift/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -10954,7 +11708,8 @@ }, "node_modules/jsesc": { "version": "2.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "bin": { "jsesc": "bin/jsesc" }, @@ -10964,17 +11719,20 @@ }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "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, - "license": "MIT", "peer": true }, "node_modules/json-schema-deref-sync": { "version": "0.13.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", + "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", "dependencies": { "clone": "^2.1.2", "dag-map": "~1.0.0", @@ -10991,7 +11749,8 @@ }, "node_modules/json-schema-deref-sync/node_modules/md5": { "version": "2.2.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", "dependencies": { "charenc": "~0.0.1", "crypt": "~0.0.1", @@ -11000,11 +11759,13 @@ }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json5": { "version": "2.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "bin": { "json5": "lib/cli.js" }, @@ -11014,84 +11775,226 @@ }, "node_modules/jsonfile": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/kind-of": { "version": "6.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/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/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/lightningcss": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", + "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.19.0", + "lightningcss-darwin-x64": "1.19.0", + "lightningcss-linux-arm-gnueabihf": "1.19.0", + "lightningcss-linux-arm64-gnu": "1.19.0", + "lightningcss-linux-arm64-musl": "1.19.0", + "lightningcss-linux-x64-gnu": "1.19.0", + "lightningcss-linux-x64-musl": "1.19.0", + "lightningcss-win32-x64-msvc": "1.19.0" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", + "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", + "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/kleur": { - "version": "3.0.3", - "license": "MIT", + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", + "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/leven": { - "version": "3.1.0", - "license": "MIT", + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", + "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/lighthouse-logger": { - "version": "1.4.2", - "license": "Apache-2.0", - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", + "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", + "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/lightningcss": { + "node_modules/lightningcss-linux-x64-musl": { "version": "1.19.0", - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^1.0.3" - }, + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", + "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.19.0", - "lightningcss-darwin-x64": "1.19.0", - "lightningcss-linux-arm-gnueabihf": "1.19.0", - "lightningcss-linux-arm64-gnu": "1.19.0", - "lightningcss-linux-arm64-musl": "1.19.0", - "lightningcss-linux-x64-gnu": "1.19.0", - "lightningcss-linux-x64-musl": "1.19.0", - "lightningcss-win32-x64-msvc": "1.19.0" } }, - "node_modules/lightningcss-darwin-arm64": { + "node_modules/lightningcss-win32-x64-msvc": { "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", + "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", "cpu": [ - "arm64" + "x64" ], - "license": "MPL-2.0", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">= 12.0.0" @@ -11103,19 +12006,22 @@ }, "node_modules/lilconfig": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "engines": { "node": ">=10" } }, "node_modules/lines-and-columns": { "version": "1.2.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loader-runner": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6.11.5" @@ -11129,7 +12035,8 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { "p-locate": "^5.0.0" }, @@ -11142,11 +12049,13 @@ }, "node_modules/lodash": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.sortby": { "version": "4.7.0", @@ -11155,11 +12064,13 @@ }, "node_modules/lodash.throttle": { "version": "4.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" }, "node_modules/log-symbols": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dependencies": { "chalk": "^2.0.1" }, @@ -11169,7 +12080,8 @@ }, "node_modules/logkitty": { "version": "0.7.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", "dependencies": { "ansi-fragments": "^0.2.1", "dayjs": "^1.8.15", @@ -11181,7 +12093,8 @@ }, "node_modules/logkitty/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -11194,14 +12107,16 @@ }, "node_modules/logkitty/node_modules/camelcase": { "version": "5.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { "node": ">=6" } }, "node_modules/logkitty/node_modules/cliui": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -11210,7 +12125,8 @@ }, "node_modules/logkitty/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -11220,11 +12136,13 @@ }, "node_modules/logkitty/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/logkitty/node_modules/find-up": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -11235,7 +12153,8 @@ }, "node_modules/logkitty/node_modules/locate-path": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { "p-locate": "^4.1.0" }, @@ -11245,7 +12164,8 @@ }, "node_modules/logkitty/node_modules/p-limit": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { "p-try": "^2.0.0" }, @@ -11258,7 +12178,8 @@ }, "node_modules/logkitty/node_modules/p-locate": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { "p-limit": "^2.2.0" }, @@ -11268,7 +12189,8 @@ }, "node_modules/logkitty/node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11278,7 +12200,8 @@ }, "node_modules/logkitty/node_modules/wrap-ansi": { "version": "6.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -11290,11 +12213,13 @@ }, "node_modules/logkitty/node_modules/y18n": { "version": "4.0.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "node_modules/logkitty/node_modules/yargs": { "version": "15.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -11314,7 +12239,8 @@ }, "node_modules/logkitty/node_modules/yargs-parser": { "version": "18.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -11342,7 +12268,8 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "license": "MIT", + "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" }, @@ -11359,10 +12286,11 @@ } }, "node_modules/lru-cache": { - "version": "5.1.1", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" } }, "node_modules/magic-string": { @@ -11376,7 +12304,8 @@ }, "node_modules/make-dir": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -11387,7 +12316,8 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -11400,18 +12330,21 @@ }, "node_modules/makeerror": { "version": "1.0.12", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dependencies": { "tmpl": "1.0.5" } }, "node_modules/marky": { "version": "1.2.5", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" }, "node_modules/md5": { "version": "2.3.0", - "license": "BSD-3-Clause", + "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", @@ -11420,7 +12353,8 @@ }, "node_modules/md5-file": { "version": "3.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", "dependencies": { "buffer-alloc": "^1.1.0" }, @@ -11433,7 +12367,8 @@ }, "node_modules/md5hex": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", + "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==" }, "node_modules/mdn-data": { "version": "2.0.30", @@ -11451,11 +12386,13 @@ }, "node_modules/memoize-one": { "version": "5.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" }, "node_modules/memory-cache": { "version": "0.2.0", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==" }, "node_modules/merge-descriptors": { "version": "1.0.1", @@ -11464,11 +12401,13 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { "node": ">= 8" } @@ -11482,8 +12421,9 @@ } }, "node_modules/metro": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.9.tgz", + "integrity": "sha512-Bc57Xf3GO2Xe4UWQsBj/oW6YfLPABEu8jfDVDiNmJvoQW4CO34oDPuYKe4KlXzXhcuNsqOtSxpbjCRRVjhhREg==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -11506,18 +12446,18 @@ "jest-worker": "^29.6.3", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.8", - "metro-cache": "0.80.8", - "metro-cache-key": "0.80.8", - "metro-config": "0.80.8", - "metro-core": "0.80.8", - "metro-file-map": "0.80.8", - "metro-resolver": "0.80.8", - "metro-runtime": "0.80.8", - "metro-source-map": "0.80.8", - "metro-symbolicate": "0.80.8", - "metro-transform-plugins": "0.80.8", - "metro-transform-worker": "0.80.8", + "metro-babel-transformer": "0.80.9", + "metro-cache": "0.80.9", + "metro-cache-key": "0.80.9", + "metro-config": "0.80.9", + "metro-core": "0.80.9", + "metro-file-map": "0.80.9", + "metro-resolver": "0.80.9", + "metro-runtime": "0.80.9", + "metro-source-map": "0.80.9", + "metro-symbolicate": "0.80.9", + "metro-transform-plugins": "0.80.9", + "metro-transform-worker": "0.80.9", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -11537,8 +12477,9 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.9.tgz", + "integrity": "sha512-d76BSm64KZam1nifRZlNJmtwIgAeZhZG3fi3K+EmPOlrR8rDtBxQHDSN3fSGeNB9CirdTyabTMQCkCup6BXFSQ==", "dependencies": { "@babel/core": "^7.20.0", "hermes-parser": "0.20.1", @@ -11548,11 +12489,25 @@ "node": ">=18" } }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "dependencies": { + "hermes-estree": "0.20.1" + } + }, "node_modules/metro-cache": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.9.tgz", + "integrity": "sha512-ujEdSI43QwI+Dj2xuNax8LMo8UgKuXJEdxJkzGPU6iIx42nYa1byQ+aADv/iPh5sh5a//h5FopraW5voXSgm2w==", "dependencies": { - "metro-core": "0.80.8", + "metro-core": "0.80.9", "rimraf": "^3.0.2" }, "engines": { @@ -11560,15 +12515,17 @@ } }, "node_modules/metro-cache-key": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.9.tgz", + "integrity": "sha512-hRcYGhEiWIdM87hU0fBlcGr+tHDEAT+7LYNCW89p5JhErFt/QaAkVx4fb5bW3YtXGv5BTV7AspWPERoIb99CXg==", "engines": { "node": ">=18" } }, "node_modules/metro-cache/node_modules/rimraf": { "version": "3.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { "glob": "^7.1.3" }, @@ -11580,35 +12537,38 @@ } }, "node_modules/metro-config": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.9.tgz", + "integrity": "sha512-28wW7CqS3eJrunRGnsibWldqgwRP9ywBEf7kg+uzUHkSFJNKPM1K3UNSngHmH0EZjomizqQA2Zi6/y6VdZMolg==", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", "jest-validate": "^29.6.3", - "metro": "0.80.8", - "metro-cache": "0.80.8", - "metro-core": "0.80.8", - "metro-runtime": "0.80.8" + "metro": "0.80.9", + "metro-cache": "0.80.9", + "metro-core": "0.80.9", + "metro-runtime": "0.80.9" }, "engines": { "node": ">=18" } }, "node_modules/metro-core": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.9.tgz", + "integrity": "sha512-tbltWQn+XTdULkGdzHIxlxk4SdnKxttvQQV3wpqqFbHDteR4gwCyTR2RyYJvxgU7HELfHtrVbqgqAdlPByUSbg==", "dependencies": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.8" + "metro-resolver": "0.80.9" }, "engines": { "node": ">=18" } }, "node_modules/metro-file-map": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.9.tgz", + "integrity": "sha512-sBUjVtQMHagItJH/wGU9sn3k2u0nrCl0CdR4SFMO1tksXLKbkigyQx4cbpcyPVOAmGTVuy3jyvBlELaGCAhplQ==", "dependencies": { "anymatch": "^3.0.3", "debug": "^2.2.0", @@ -11630,18 +12590,21 @@ }, "node_modules/metro-file-map/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/metro-file-map/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/metro-minify-terser": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.9.tgz", + "integrity": "sha512-FEeCeFbkvvPuhjixZ1FYrXtO0araTpV6UbcnGgDUpH7s7eR5FG/PiJz3TsuuPP/HwCK19cZtQydcA2QrCw446A==", "dependencies": { "terser": "^5.15.0" }, @@ -11650,15 +12613,17 @@ } }, "node_modules/metro-resolver": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.9.tgz", + "integrity": "sha512-wAPIjkN59BQN6gocVsAvvpZ1+LQkkqUaswlT++cJafE/e54GoVkMNCmrR4BsgQHr9DknZ5Um/nKueeN7kaEz9w==", "engines": { "node": ">=18" } }, "node_modules/metro-runtime": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.9.tgz", + "integrity": "sha512-8PTVIgrVcyU+X/rVCy/9yxNlvXsBCk5JwwkbAm/Dm+Abo6NBGtNjWF0M1Xo/NWCb4phamNWcD7cHdR91HhbJvg==", "dependencies": { "@babel/runtime": "^7.0.0" }, @@ -11667,15 +12632,16 @@ } }, "node_modules/metro-source-map": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.9.tgz", + "integrity": "sha512-RMn+XS4VTJIwMPOUSj61xlxgBvPeY4G6s5uIn6kt6HB6A/k9ekhr65UkkDD7WzHYs3a9o869qU8tvOZvqeQzgw==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.80.8", + "metro-symbolicate": "0.80.9", "nullthrows": "^1.1.1", - "ob1": "0.80.8", + "ob1": "0.80.9", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -11685,17 +12651,19 @@ }, "node_modules/metro-source-map/node_modules/source-map": { "version": "0.5.7", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/metro-symbolicate": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.9.tgz", + "integrity": "sha512-Ykae12rdqSs98hg41RKEToojuIW85wNdmSe/eHUgMkzbvCFNVgcC0w3dKZEhSsqQOXapXRlLtHkaHLil0UD/EA==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.80.8", + "metro-source-map": "0.80.9", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -11710,14 +12678,16 @@ }, "node_modules/metro-symbolicate/node_modules/source-map": { "version": "0.5.7", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/metro-transform-plugins": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.9.tgz", + "integrity": "sha512-UlDk/uc8UdfLNJhPbF3tvwajyuuygBcyp+yBuS/q0z3QSuN/EbLllY3rK8OTD9n4h00qZ/qgxGv/lMFJkwP4vg==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -11730,20 +12700,21 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.9.tgz", + "integrity": "sha512-c/IrzMUVnI0hSVVit4TXzt3A1GiUltGVlzCmLJWxNrBGHGrJhvgePj38+GXl1Xf4Fd4vx6qLUkKMQ3ux73bFLQ==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "metro": "0.80.8", - "metro-babel-transformer": "0.80.8", - "metro-cache": "0.80.8", - "metro-cache-key": "0.80.8", - "metro-minify-terser": "0.80.8", - "metro-source-map": "0.80.8", - "metro-transform-plugins": "0.80.8", + "metro": "0.80.9", + "metro-babel-transformer": "0.80.9", + "metro-cache": "0.80.9", + "metro-cache-key": "0.80.9", + "metro-minify-terser": "0.80.9", + "metro-source-map": "0.80.9", + "metro-transform-plugins": "0.80.9", "nullthrows": "^1.1.1" }, "engines": { @@ -11752,7 +12723,8 @@ }, "node_modules/metro/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -11765,7 +12737,8 @@ }, "node_modules/metro/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11779,11 +12752,13 @@ }, "node_modules/metro/node_modules/ci-info": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "node_modules/metro/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -11793,29 +12768,47 @@ }, "node_modules/metro/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/metro/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/metro/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "dependencies": { + "hermes-estree": "0.20.1" + } + }, "node_modules/metro/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/metro/node_modules/rimraf": { "version": "3.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { "glob": "^7.1.3" }, @@ -11828,14 +12821,16 @@ }, "node_modules/metro/node_modules/source-map": { "version": "0.5.7", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/metro/node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11845,7 +12840,8 @@ }, "node_modules/metro/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -11855,7 +12851,8 @@ }, "node_modules/metro/node_modules/ws": { "version": "7.5.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { "node": ">=8.3.0" }, @@ -11874,7 +12871,8 @@ }, "node_modules/micromatch": { "version": "4.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -11885,7 +12883,8 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -11895,7 +12894,8 @@ }, "node_modules/mime": { "version": "2.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "bin": { "mime": "cli.js" }, @@ -11905,14 +12905,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "license": "MIT", + "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", - "license": "MIT", + "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" }, @@ -11922,14 +12924,16 @@ }, "node_modules/mimic-fn": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "engines": { "node": ">=4" } }, "node_modules/minimatch": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11939,34 +12943,35 @@ }, "node_modules/minimist": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-collect": { - "version": "1.0.2", - "license": "ISC", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-flush": { "version": "1.0.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dependencies": { "minipass": "^3.0.0" }, @@ -11974,9 +12979,21 @@ "node": ">= 8" } }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minipass-pipeline": { "version": "1.2.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dependencies": { "minipass": "^3.0.0" }, @@ -11984,13 +13001,21 @@ "node": ">=8" } }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/minizlib": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -11999,13 +13024,21 @@ "node": ">= 8" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/mkdirp": { "version": "0.5.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { "minimist": "^1.2.6" }, @@ -12015,14 +13048,16 @@ }, "node_modules/mrmime": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/muggle-string": { "version": "0.4.1", @@ -12031,7 +13066,8 @@ }, "node_modules/mv": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", "optional": true, "dependencies": { "mkdirp": "~0.5.1", @@ -12044,7 +13080,8 @@ }, "node_modules/mv/node_modules/glob": { "version": "6.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", "optional": true, "dependencies": { "inflight": "^1.0.4", @@ -12059,7 +13096,8 @@ }, "node_modules/mv/node_modules/rimraf": { "version": "2.4.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", "optional": true, "dependencies": { "glob": "^6.0.1" @@ -12070,7 +13108,8 @@ }, "node_modules/mz": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -12079,13 +13118,14 @@ }, "node_modules/nanoid": { "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12095,7 +13135,8 @@ }, "node_modules/nativewind": { "version": "2.0.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/nativewind/-/nativewind-2.0.11.tgz", + "integrity": "sha512-qCEXUwKW21RYJ33KRAJl3zXq2bCq82WoI564fI21D/TiqhfmstZOqPN53RF8qK1NDK6PGl56b2xaTxgObEePEg==", "dependencies": { "@babel/generator": "^7.18.7", "@babel/helper-module-imports": "7.18.6", @@ -12120,7 +13161,8 @@ }, "node_modules/nativewind/node_modules/@babel/helper-module-imports": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dependencies": { "@babel/types": "^7.18.6" }, @@ -12130,7 +13172,8 @@ }, "node_modules/nativewind/node_modules/@babel/types": { "version": "7.19.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", "dependencies": { "@babel/helper-string-parser": "^7.18.10", "@babel/helper-validator-identifier": "^7.18.6", @@ -12141,12 +13184,14 @@ } }, "node_modules/nativewind/node_modules/react-is": { - "version": "18.2.0", - "license": "MIT" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/ncp": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", "optional": true, "bin": { "ncp": "bin/ncp" @@ -12154,22 +13199,26 @@ }, "node_modules/negotiator": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/nested-error-stacks": { "version": "2.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==" }, "node_modules/next": { "version": "14.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/next/-/next-14.0.4.tgz", + "integrity": "sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==", "dependencies": { "@next/env": "14.0.4", "@swc/helpers": "0.5.2", @@ -12214,6 +13263,8 @@ }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -12228,7 +13279,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -12240,7 +13290,8 @@ }, "node_modules/nice-try": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node_modules/no-case": { "version": "3.0.4", @@ -12253,18 +13304,21 @@ }, "node_modules/nocache": { "version": "3.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", + "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", "engines": { "node": ">=12.0.0" } }, "node_modules/node-abort-controller": { "version": "3.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" }, "node_modules/node-dir": { "version": "0.1.17", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", "dependencies": { "minimatch": "^3.0.2" }, @@ -12274,7 +13328,8 @@ }, "node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "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" }, @@ -12292,22 +13347,26 @@ }, "node_modules/node-forge": { "version": "1.3.1", - "license": "(BSD-3-Clause OR GPL-2.0)", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-int64": { "version": "0.4.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node_modules/node-releases": { "version": "2.0.14", - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/node-stream-zip": { "version": "1.15.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", "engines": { "node": ">=0.12.0" }, @@ -12318,22 +13377,25 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "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, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-package-arg": { "version": "7.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", "dependencies": { "hosted-git-info": "^3.0.2", "osenv": "^0.1.5", @@ -12343,14 +13405,16 @@ }, "node_modules/npm-package-arg/node_modules/semver": { "version": "5.7.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, "node_modules/npm-run-path": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dependencies": { "path-key": "^2.0.0" }, @@ -12358,27 +13422,39 @@ "node": ">=4" } }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, "node_modules/nullthrows": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, "node_modules/ob1": { - "version": "0.80.8", - "license": "MIT", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.9.tgz", + "integrity": "sha512-v9yOxowkZbxWhKOaaTyLjIm1aLy4ebMNcSn4NYJKOAI/Qv+SkfEfszpLr2GIxsccmb2Y2HA9qtsqiIJ80ucpVA==", "engines": { "node": ">=18" } }, "node_modules/object-assign": { "version": "4.1.1", - "license": "MIT", + "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-hash": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "engines": { "node": ">= 6" } @@ -12391,9 +13467,35 @@ "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { - "version": "2.3.0", - "license": "MIT", + "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" }, @@ -12403,21 +13505,24 @@ }, "node_modules/on-headers": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dependencies": { "mimic-fn": "^1.0.0" }, @@ -12427,7 +13532,8 @@ }, "node_modules/open": { "version": "8.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -12442,7 +13548,8 @@ }, "node_modules/ora": { "version": "3.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "dependencies": { "chalk": "^2.4.2", "cli-cursor": "^2.1.0", @@ -12457,21 +13564,24 @@ }, "node_modules/os-homedir": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/os-tmpdir": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "engines": { "node": ">=0.10.0" } }, "node_modules/osenv": { "version": "0.1.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dependencies": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -12479,14 +13589,16 @@ }, "node_modules/p-finally": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "engines": { "node": ">=4" } }, "node_modules/p-limit": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -12499,7 +13611,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { "p-limit": "^3.0.2" }, @@ -12512,7 +13625,8 @@ }, "node_modules/p-map": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -12525,14 +13639,16 @@ }, "node_modules/p-try": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { "node": ">=6" } }, "node_modules/parse-json": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -12543,7 +13659,8 @@ }, "node_modules/parse-png": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", "dependencies": { "pngjs": "^3.3.0" }, @@ -12553,7 +13670,8 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { "node": ">= 0.8" } @@ -12569,61 +13687,13 @@ }, "node_modules/password-prompt": { "version": "1.1.3", - "license": "0BSD", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", + "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", "dependencies": { "ansi-escapes": "^4.3.2", "cross-spawn": "^7.0.3" } }, - "node_modules/password-prompt/node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/password-prompt/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/password-prompt/node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/password-prompt/node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/password-prompt/node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -12631,28 +13701,55 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { - "version": "2.0.1", - "license": "MIT", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { - "node": ">=4" + "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==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "engines": { + "node": "14 || >=16.14" + } }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -12661,7 +13758,8 @@ }, "node_modules/path-type": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "engines": { "node": ">=8" } @@ -12687,12 +13785,14 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "license": "ISC" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "engines": { "node": ">=10" }, @@ -12702,21 +13802,24 @@ }, "node_modules/pify": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "engines": { "node": ">=6" } }, "node_modules/pirates": { "version": "4.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dependencies": { "find-up": "^3.0.0" }, @@ -12726,7 +13829,8 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dependencies": { "locate-path": "^3.0.0" }, @@ -12736,7 +13840,8 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -12747,7 +13852,8 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { "p-try": "^2.0.0" }, @@ -12760,7 +13866,8 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dependencies": { "p-limit": "^2.0.0" }, @@ -12770,14 +13877,16 @@ }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "engines": { "node": ">=4" } }, "node_modules/plist": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", @@ -12789,34 +13898,40 @@ }, "node_modules/plist/node_modules/@xmldom/xmldom": { "version": "0.8.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", "engines": { "node": ">=10.0.0" } }, "node_modules/plist/node_modules/xmlbuilder": { "version": "15.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", "engines": { "node": ">=8.0" } }, "node_modules/pngjs": { "version": "3.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", "engines": { "node": ">=4.0.0" } }, "node_modules/possible-typed-array-names": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.23", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -12831,11 +13946,10 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -12843,7 +13957,8 @@ }, "node_modules/postcss-calc": { "version": "8.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dependencies": { "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0" @@ -12854,7 +13969,8 @@ }, "node_modules/postcss-color-functional-notation": { "version": "4.2.4", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -12871,7 +13987,8 @@ }, "node_modules/postcss-css-variables": { "version": "0.18.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-css-variables/-/postcss-css-variables-0.18.0.tgz", + "integrity": "sha512-lYS802gHbzn1GI+lXvy9MYIYDuGnl1WB4FTKoqMQqJ3Mab09A7a/1wZvGTkCEZJTM8mSbIyb1mJYn8f0aPye0Q==", "dependencies": { "balanced-match": "^1.0.0", "escape-string-regexp": "^1.0.3", @@ -12883,7 +14000,8 @@ }, "node_modules/postcss-import": { "version": "15.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -12898,7 +14016,8 @@ }, "node_modules/postcss-js": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -12915,6 +14034,8 @@ }, "node_modules/postcss-load-config": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "funding": [ { "type": "opencollective", @@ -12925,7 +14046,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" @@ -12948,7 +14068,8 @@ }, "node_modules/postcss-load-config/node_modules/lilconfig": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "engines": { "node": ">=14" }, @@ -12958,7 +14079,8 @@ }, "node_modules/postcss-nested": { "version": "5.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", "dependencies": { "postcss-selector-parser": "^6.0.6" }, @@ -12975,7 +14097,8 @@ }, "node_modules/postcss-selector-parser": { "version": "6.0.16", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -12986,11 +14109,13 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/pretty-bytes": { "version": "5.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "engines": { "node": ">=6" }, @@ -13000,7 +14125,8 @@ }, "node_modules/pretty-format": { "version": "26.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dependencies": { "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", @@ -13013,7 +14139,8 @@ }, "node_modules/pretty-format/node_modules/@jest/types": { "version": "26.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -13027,14 +14154,16 @@ }, "node_modules/pretty-format/node_modules/@types/yargs": { "version": "15.0.19", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -13047,7 +14176,8 @@ }, "node_modules/pretty-format/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13061,7 +14191,8 @@ }, "node_modules/pretty-format/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -13071,22 +14202,26 @@ }, "node_modules/pretty-format/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/pretty-format/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/pretty-format/node_modules/react-is": { "version": "17.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/pretty-format/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -13096,29 +14231,29 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/progress": { "version": "2.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "engines": { "node": ">=0.4.0" } }, "node_modules/promise": { "version": "7.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dependencies": { "asap": "~2.0.3" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "license": "ISC" - }, "node_modules/prompts": { "version": "2.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -13129,7 +14264,8 @@ }, "node_modules/prop-types": { "version": "15.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -13150,7 +14286,8 @@ }, "node_modules/pump": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -13158,13 +14295,16 @@ }, "node_modules/punycode": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } }, "node_modules/qrcode-terminal": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" } @@ -13185,7 +14325,8 @@ }, "node_modules/query-string": { "version": "7.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", "dependencies": { "decode-uri-component": "^0.2.2", "filter-obj": "^1.1.0", @@ -13199,15 +14340,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/queue": { "version": "6.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "dependencies": { "inherits": "~2.0.3" } }, "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==", "funding": [ { "type": "github", @@ -13221,13 +14374,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "safe-buffer": "^5.1.0" @@ -13235,7 +14388,8 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { "node": ">= 0.6" } @@ -13254,17 +14408,10 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/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/rc": { "version": "1.2.8", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -13277,7 +14424,8 @@ }, "node_modules/react": { "version": "18.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -13286,8 +14434,9 @@ } }, "node_modules/react-devtools-core": { - "version": "4.28.5", - "license": "MIT", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.2.0.tgz", + "integrity": "sha512-vZK+/gvxxsieAoAyYaiRIVFxlajb7KXhgBDV7OsoMzaAE+IqGpoxusBjIgq5ibqA2IloKu0p9n7tE68z1xs18A==", "dependencies": { "shell-quote": "^1.6.1", "ws": "^7" @@ -13295,7 +14444,8 @@ }, "node_modules/react-devtools-core/node_modules/ws": { "version": "7.5.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { "node": ">=8.3.0" }, @@ -13314,7 +14464,8 @@ }, "node_modules/react-dom": { "version": "18.2.0", - "license": "MIT", + "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" @@ -13325,11 +14476,13 @@ }, "node_modules/react-fast-compare": { "version": "3.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, "node_modules/react-freeze": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz", + "integrity": "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==", "engines": { "node": ">=10" }, @@ -13337,45 +14490,32 @@ "react": ">=17.0.0" } }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-is": { "version": "16.13.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native": { - "version": "0.73.2", - "license": "MIT", + "version": "0.74.1", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.1.tgz", + "integrity": "sha512-0H2XpmghwOtfPpM2LKqHIN7gxy+7G/r1hwJHKLV6uoyXGC/gCojRtoo5NqyKrWpFC8cqyT6wTYCLuG7CxEKilg==", "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native-community/cli": "12.3.0", - "@react-native-community/cli-platform-android": "12.3.0", - "@react-native-community/cli-platform-ios": "12.3.0", - "@react-native/assets-registry": "0.73.1", - "@react-native/codegen": "0.73.2", - "@react-native/community-cli-plugin": "0.73.12", - "@react-native/gradle-plugin": "0.73.4", - "@react-native/js-polyfills": "0.73.1", - "@react-native/normalize-colors": "0.73.2", - "@react-native/virtualized-lists": "0.73.4", + "@react-native-community/cli": "13.6.6", + "@react-native-community/cli-platform-android": "13.6.6", + "@react-native-community/cli-platform-ios": "13.6.6", + "@react-native/assets-registry": "0.74.83", + "@react-native/codegen": "0.74.83", + "@react-native/community-cli-plugin": "0.74.83", + "@react-native/gradle-plugin": "0.74.83", + "@react-native/js-polyfills": "0.74.83", + "@react-native/normalize-colors": "0.74.83", + "@react-native/virtualized-lists": "0.74.83", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "base64-js": "^1.5.1", - "deprecated-react-native-prop-types": "^5.0.0", + "chalk": "^4.0.0", "event-target-shim": "^5.0.1", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", @@ -13388,7 +14528,7 @@ "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", "promise": "^8.3.0", - "react-devtools-core": "^4.27.7", + "react-devtools-core": "^5.0.0", "react-refresh": "^0.14.0", "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", @@ -13405,20 +14545,41 @@ "node": ">=18" }, "peerDependencies": { + "@types/react": "^18.2.6", "react": "18.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-native-helmet-async": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-native-helmet-async/-/react-native-helmet-async-2.0.4.tgz", + "integrity": "sha512-m3CkXWss6B1dd6mCMleLpzDCJJGGaHOLQsUzZv8kAASJmMfmVT4d2fx375iXKTRWT25ThBfae3dECuX5cq/8hg==", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/react-native-safe-area-context": { - "version": "4.8.2", - "license": "MIT", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.10.1.tgz", + "integrity": "sha512-w8tCuowDorUkPoWPXmhqosovBr33YsukkwYCDERZFHAxIkx6qBadYxfeoaJ91nCQKjkNzGrK5qhoNOeSIcYSpA==", "peerDependencies": { "react": "*", "react-native": "*" } }, "node_modules/react-native-screens": { - "version": "3.29.0", - "license": "MIT", + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.31.1.tgz", + "integrity": "sha512-8fRW362pfZ9y4rS8KY5P3DFScrmwo/vu1RrRMMx0PNHbeC9TLq0Kw1ubD83591yz64gLNHFLTVkTJmWeWCXKtQ==", "dependencies": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" @@ -13429,11 +14590,12 @@ } }, "node_modules/react-native-web": { - "version": "0.19.10", - "license": "MIT", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.19.11.tgz", + "integrity": "sha512-51Qcjr0AtIgskwLqLsBByUMPs2nAWZ+6QF7x/siC72svNPcJ1/daXoPTNuHR2fX4oOrDATC4Vmc/SXOYPH19rw==", "dependencies": { "@babel/runtime": "^7.18.6", - "@react-native/normalize-color": "^2.1.0", + "@react-native/normalize-colors": "^0.74.1", "fbjs": "^3.0.4", "inline-style-prefixer": "^6.0.1", "memoize-one": "^6.0.0", @@ -13448,69 +14610,114 @@ }, "node_modules/react-native-web/node_modules/memoize-one": { "version": "6.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, - "node_modules/react-native/node_modules/@react-native/codegen": { - "version": "0.73.2", - "license": "MIT", + "node_modules/react-native/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==", "dependencies": { - "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=8" }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-native/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/react-native/node_modules/flow-parser": { - "version": "0.206.0", - "license": "MIT", + "node_modules/react-native/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==", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=0.4.0" + "node": ">=7.0.0" + } + }, + "node_modules/react-native/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==" + }, + "node_modules/react-native/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==", + "engines": { + "node": ">=8" } }, "node_modules/react-native/node_modules/promise": { "version": "8.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dependencies": { "asap": "~2.0.6" } }, "node_modules/react-native/node_modules/regenerator-runtime": { "version": "0.13.11", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/react-native/node_modules/scheduler": { "version": "0.24.0-canary-efb381bbf-20230505", - "license": "MIT", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", + "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", "dependencies": { "loose-envify": "^1.1.0" } }, + "node_modules/react-native/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/react-native/node_modules/ws": { "version": "6.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dependencies": { "async-limiter": "~1.0.0" } }, "node_modules/react-refresh": { - "version": "0.14.0", - "license": "MIT", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "engines": { "node": ">=0.10.0" } }, "node_modules/react-shallow-renderer": { "version": "16.15.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", "dependencies": { "object-assign": "^4.1.1", "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" @@ -13521,21 +14728,24 @@ }, "node_modules/read-cache": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dependencies": { "pify": "^2.3.0" } }, "node_modules/read-cache/node_modules/pify": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "engines": { "node": ">=0.10.0" } }, "node_modules/readable-stream": { "version": "2.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -13546,9 +14756,15 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/readdirp": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" }, @@ -13558,7 +14774,8 @@ }, "node_modules/readdirp/node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -13568,11 +14785,13 @@ }, "node_modules/readline": { "version": "1.3.0", - "license": "BSD" + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" }, "node_modules/recast": { "version": "0.21.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", "dependencies": { "ast-types": "0.15.2", "esprima": "~4.0.0", @@ -13585,18 +14804,21 @@ }, "node_modules/recast/node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/regenerate": { "version": "1.4.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { "version": "10.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dependencies": { "regenerate": "^1.4.2" }, @@ -13606,18 +14828,39 @@ }, "node_modules/regenerator-runtime": { "version": "0.14.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regenerator-transform": { "version": "0.15.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "peer": true, "dependencies": { "@babel/runtime": "^7.8.4" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexpu-core": { "version": "5.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -13632,7 +14875,8 @@ }, "node_modules/regjsparser": { "version": "0.9.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": "~0.5.0" }, @@ -13642,6 +14886,8 @@ }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "bin": { "jsesc": "bin/jsesc" } @@ -13654,28 +14900,34 @@ }, "node_modules/remove-trailing-slash": { "version": "0.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==" }, "node_modules/require-directory": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "node_modules/requireg": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", "dependencies": { "nested-error-stacks": "~2.0.1", "rc": "~1.2.7", @@ -13687,14 +14939,16 @@ }, "node_modules/requireg/node_modules/resolve": { "version": "1.7.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dependencies": { "path-parse": "^1.0.5" } }, "node_modules/resolve": { "version": "1.22.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -13709,21 +14963,24 @@ }, "node_modules/resolve-from": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "engines": { "node": ">=8" } }, "node_modules/resolve.exports": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "engines": { "node": ">=10" } }, "node_modules/restore-cursor": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -13742,7 +14999,8 @@ }, "node_modules/reusify": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -13750,7 +15008,8 @@ }, "node_modules/rimraf": { "version": "2.7.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dependencies": { "glob": "^7.1.3" }, @@ -13760,6 +15019,8 @@ }, "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==", "funding": [ { "type": "github", @@ -13774,20 +15035,73 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" + "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/safe-json-stringify": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", "optional": true }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -13795,18 +15109,21 @@ }, "node_modules/sax": { "version": "1.3.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" }, "node_modules/scheduler": { - "version": "0.23.0", - "license": "MIT", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/schema-utils": { "version": "4.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -13821,16 +15138,30 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/semver": { "version": "6.3.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/send": { "version": "0.18.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -13852,18 +15183,21 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/mime": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "bin": { "mime": "cli.js" }, @@ -13873,36 +15207,22 @@ }, "node_modules/send/node_modules/ms": { "version": "2.1.3", - "license": "MIT" - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serialize-error": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", "engines": { "node": ">=0.10.0" } }, "node_modules/serialize-javascript": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "dependencies": { "randombytes": "^2.1.0" @@ -13910,7 +15230,8 @@ }, "node_modules/serve-static": { "version": "1.15.0", - "license": "MIT", + "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", @@ -13923,15 +15244,18 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-cookie-parser": { "version": "2.6.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" }, "node_modules/set-function-length": { "version": "1.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -13944,13 +15268,29 @@ "node": ">= 0.4" } }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "node_modules/setprototypeof": { "version": "1.2.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/sha.js": { "version": "2.4.11", @@ -13966,7 +15306,8 @@ }, "node_modules/shallow-clone": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dependencies": { "kind-of": "^6.0.2" }, @@ -13976,28 +15317,32 @@ }, "node_modules/shallowequal": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "node_modules/shebang-command": { - "version": "1.2.0", - "license": "MIT", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "license": "MIT", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14021,11 +15366,13 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/simple-plist": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", "dependencies": { "bplist-creator": "0.1.0", "bplist-parser": "0.3.1", @@ -14034,7 +15381,8 @@ }, "node_modules/simple-plist/node_modules/bplist-parser": { "version": "0.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", "dependencies": { "big-integer": "1.6.x" }, @@ -14044,29 +15392,34 @@ }, "node_modules/simple-swizzle": { "version": "0.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dependencies": { "is-arrayish": "^0.3.1" } }, "node_modules/simple-swizzle/node_modules/is-arrayish": { "version": "0.3.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/sisteransi": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "node_modules/slash": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dependencies": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", @@ -14078,28 +15431,32 @@ }, "node_modules/slugify": { "version": "1.6.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", "engines": { "node": ">=8.0.0" } }, "node_modules/source-map": { "version": "0.7.4", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "engines": { "node": ">= 8" } }, "node_modules/source-map-js": { "version": "1.2.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.21", - "license": "MIT", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -14107,14 +15464,16 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/split": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dependencies": { "through": "2" }, @@ -14124,28 +15483,32 @@ }, "node_modules/split-on-first": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", "engines": { "node": ">=6" } }, "node_modules/sprintf-js": { "version": "1.0.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/ssri": { - "version": "8.0.1", - "license": "ISC", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dependencies": { - "minipass": "^3.1.1" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/stack-utils": { "version": "2.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -14155,18 +15518,21 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "engines": { "node": ">=8" } }, "node_modules/stackframe": { "version": "1.3.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" }, "node_modules/stacktrace-parser": { "version": "0.1.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", "dependencies": { "type-fest": "^0.7.1" }, @@ -14176,52 +15542,80 @@ }, "node_modules/stacktrace-parser/node_modules/type-fest": { "version": "0.7.1", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", "engines": { "node": ">=8" } }, "node_modules/statuses": { - "version": "1.5.0", - "license": "MIT", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/stream-buffers": { "version": "2.2.0", - "license": "Unlicense", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", "engines": { "node": ">= 0.10.0" } }, "node_modules/stream-slice": { "version": "0.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/stream-slice/-/stream-slice-0.1.2.tgz", + "integrity": "sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==" }, "node_modules/streamsearch": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { "node": ">=10.0.0" } }, "node_modules/strict-uri-encode": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", "engines": { "node": ">=4" } }, "node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/string-width": { "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "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==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14231,26 +15625,94 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string-width/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dependencies": { - "ansi-regex": "^5.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -14258,45 +15720,64 @@ "node": ">=6" } }, + "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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi/node_modules/ansi-regex": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "engines": { "node": ">=6" } }, "node_modules/strip-eof": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/strip-final-newline": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "engines": { "node": ">=6" } }, "node_modules/strip-json-comments": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/strnum": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, "node_modules/structured-headers": { "version": "0.4.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==" }, "node_modules/styled-jsx": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", "dependencies": { "client-only": "0.0.1" }, @@ -14317,11 +15798,13 @@ }, "node_modules/styleq": { "version": "0.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/styleq/-/styleq-0.1.3.tgz", + "integrity": "sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==" }, "node_modules/sucrase": { "version": "3.34.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -14341,14 +15824,16 @@ }, "node_modules/sucrase/node_modules/commander": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "engines": { "node": ">= 6" } }, "node_modules/sucrase/node_modules/glob": { "version": "7.1.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14366,11 +15851,13 @@ }, "node_modules/sudo-prompt": { "version": "8.2.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==" }, "node_modules/supports-color": { "version": "5.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { "has-flag": "^3.0.0" }, @@ -14380,7 +15867,8 @@ }, "node_modules/supports-hyperlinks": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -14391,14 +15879,16 @@ }, "node_modules/supports-hyperlinks/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -14408,7 +15898,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "engines": { "node": ">= 0.4" }, @@ -14417,9 +15908,9 @@ } }, "node_modules/svelte": { - "version": "4.2.15", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.15.tgz", - "integrity": "sha512-j9KJSccHgLeRERPlhMKrCXpk2TqL2m5Z+k+OBTQhZOhIdCCd3WfqV+ylPWeipEwq17P/ekiSFWwrVQv93i3bsg==", + "version": "4.2.17", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.17.tgz", + "integrity": "sha512-N7m1YnoXtRf5wya5Gyx3TWuTddI4nAyayyIWFojiWV5IayDYNV5i2mRp/7qNGol4DtxEYxljmrbgp1HM6hUbmQ==", "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.1", @@ -14451,9 +15942,9 @@ } }, "node_modules/svelte2tsx": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.7.tgz", - "integrity": "sha512-HAIxtk5TUHXvCRKApKfxoh1BGT85S/17lS3DvbfxRKFd+Ghr5YScqBvd+sU+p7vJFw48LNkzdFk+ooNVk3e4kA==", + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.8.tgz", + "integrity": "sha512-ABK3RDFcy59AqAiU1N5Kxu1RnKrb1GDMrQjLgNgJfE8Q+coCKpjCAPtUVKQM2HnmuqeNWcT3NqfXbE+ZmN5Pow==", "dependencies": { "dedent-js": "^1.0.1", "pascal-case": "^3.1.1" @@ -14465,7 +15956,8 @@ }, "node_modules/tailwindcss": { "version": "3.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", + "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -14501,7 +15993,8 @@ }, "node_modules/tailwindcss/node_modules/glob-parent": { "version": "6.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dependencies": { "is-glob": "^4.0.3" }, @@ -14511,7 +16004,8 @@ }, "node_modules/tailwindcss/node_modules/postcss-nested": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", "dependencies": { "postcss-selector-parser": "^6.0.11" }, @@ -14528,8 +16022,9 @@ }, "node_modules/tapable": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -14537,7 +16032,8 @@ }, "node_modules/tar": { "version": "6.2.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -14550,16 +16046,40 @@ "node": ">=10" } }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { "node": ">=8" } }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { "mkdirp": "bin/cmd.js" }, @@ -14567,13 +16087,10 @@ "node": ">=10" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/temp": { "version": "0.8.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", "dependencies": { "rimraf": "~2.6.2" }, @@ -14583,14 +16100,16 @@ }, "node_modules/temp-dir": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "engines": { "node": ">=8" } }, "node_modules/temp/node_modules/rimraf": { "version": "2.6.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dependencies": { "glob": "^7.1.3" }, @@ -14600,7 +16119,8 @@ }, "node_modules/tempy": { "version": "0.7.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", + "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", "dependencies": { "del": "^6.0.0", "is-stream": "^2.0.0", @@ -14617,7 +16137,8 @@ }, "node_modules/tempy/node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -14627,7 +16148,8 @@ }, "node_modules/tempy/node_modules/type-fest": { "version": "0.16.0", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "engines": { "node": ">=10" }, @@ -14637,7 +16159,8 @@ }, "node_modules/terminal-link": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -14650,8 +16173,9 @@ } }, "node_modules/terser": { - "version": "5.30.3", - "license": "BSD-2-Clause", + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", + "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -14667,8 +16191,9 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", @@ -14701,8 +16226,9 @@ }, "node_modules/terser-webpack-plugin/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, - "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -14717,8 +16243,9 @@ }, "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peer": true, "peerDependencies": { "ajv": "^6.9.1" @@ -14726,8 +16253,9 @@ }, "node_modules/terser-webpack-plugin/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, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -14735,8 +16263,9 @@ }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/node": "*", @@ -14749,14 +16278,16 @@ }, "node_modules/terser-webpack-plugin/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, - "license": "MIT", "peer": true }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -14773,8 +16304,9 @@ }, "node_modules/terser-webpack-plugin/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, - "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -14788,22 +16320,26 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/text-table": { "version": "0.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/thenify": { "version": "3.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dependencies": { "any-promise": "^1.0.0" } }, "node_modules/thenify-all": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -14813,15 +16349,18 @@ }, "node_modules/throat": { "version": "5.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" }, "node_modules/through": { "version": "2.3.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/through2": { "version": "2.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -14829,7 +16368,8 @@ }, "node_modules/tmp": { "version": "0.0.33", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -14839,18 +16379,21 @@ }, "node_modules/tmpl": { "version": "1.0.5", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "node_modules/to-fast-properties": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { "is-number": "^7.0.0" }, @@ -14860,18 +16403,26 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "license": "MIT", + "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/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/traverse": { - "version": "0.6.8", - "license": "MIT", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", + "integrity": "sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==", + "dependencies": { + "gopd": "^1.0.1", + "typedarray.prototype.slice": "^1.0.3", + "which-typed-array": "^1.1.15" + }, "engines": { "node": ">= 0.4" }, @@ -14881,7 +16432,8 @@ }, "node_modules/ts-interface-checker": { "version": "0.1.13", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "node_modules/ts-node": { "version": "10.9.2", @@ -14934,46 +16486,121 @@ }, "node_modules/tslib": { "version": "2.6.2", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/turbo": { - "version": "1.13.2", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.13.3.tgz", + "integrity": "sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==", "dev": true, - "license": "MPL-2.0", "bin": { "turbo": "bin/turbo" }, "optionalDependencies": { - "turbo-darwin-64": "1.13.2", - "turbo-darwin-arm64": "1.13.2", - "turbo-linux-64": "1.13.2", - "turbo-linux-arm64": "1.13.2", - "turbo-windows-64": "1.13.2", - "turbo-windows-arm64": "1.13.2" - } + "turbo-darwin-64": "1.13.3", + "turbo-darwin-arm64": "1.13.3", + "turbo-linux-64": "1.13.3", + "turbo-linux-arm64": "1.13.3", + "turbo-windows-64": "1.13.3", + "turbo-windows-arm64": "1.13.3" + } + }, + "node_modules/turbo-darwin-64": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.13.3.tgz", + "integrity": "sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] }, "node_modules/turbo-darwin-arm64": { - "version": "1.13.2", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.13.3.tgz", + "integrity": "sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==", "cpu": [ "arm64" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "darwin" ] }, + "node_modules/turbo-linux-64": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.13.3.tgz", + "integrity": "sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-linux-arm64": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.13.3.tgz", + "integrity": "sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.0.1.tgz", + "integrity": "sha512-sm0ZtcX9YWh28p5X8t5McxC2uthrt9p+g0bGE0KTVFhnhNWefpSVCr+67zRNDUOfo4bpXwiOp7otO+dyQ7/y/A==" + }, + "node_modules/turbo-windows-64": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.13.3.tgz", + "integrity": "sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/turbo-windows-arm64": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.13.3.tgz", + "integrity": "sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/type-detect": { "version": "4.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.21.3", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "engines": { "node": ">=10" }, @@ -14993,9 +16620,99 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", + "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-offset": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { - "version": "5.3.3", - "license": "Apache-2.0", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15006,6 +16723,8 @@ }, "node_modules/ua-parser-js": { "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", "funding": [ { "type": "opencollective", @@ -15020,25 +16739,49 @@ "url": "https://github.com/sponsors/faisalman" } ], - "license": "MIT", "engines": { "node": "*" } }, + "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==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici": { + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.17.0.tgz", + "integrity": "sha512-fs13QiDjPIzJ7gFAOal9CSG0c92rT2xw6MuMUJ4H30Eg5GCauLWYCCZA1tInjd6M4y+JZjVCCFr9pFpbhcC64w==", + "engines": { + "node": ">=18.17" + } + }, "node_modules/undici-types": { "version": "5.26.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -15049,35 +16792,46 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "engines": { "node": ">=4" } }, "node_modules/unique-filename": { - "version": "1.1.1", - "license": "ISC", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dependencies": { - "unique-slug": "^2.0.0" + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-slug": { - "version": "2.0.2", - "license": "ISC", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dependencies": { "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-string": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -15087,7 +16841,8 @@ }, "node_modules/universalify": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { "node": ">= 4.0.0" } @@ -15118,13 +16873,16 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "license": "MIT", + "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", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "funding": [ { "type": "opencollective", @@ -15139,10 +16897,9 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -15153,32 +16910,37 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/url-join": { "version": "4.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==" }, "node_modules/use-latest-callback": { "version": "0.1.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.9.tgz", + "integrity": "sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw==", "peerDependencies": { "react": ">=16.8" } }, "node_modules/use-sync-external-store": { - "version": "1.2.0", - "license": "MIT", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/util": { "version": "0.12.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -15189,18 +16951,25 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", - "license": "MIT", + "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", - "license": "MIT", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -15212,11 +16981,14 @@ "devOptional": true }, "node_modules/valid-url": { - "version": "1.0.9" + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" }, "node_modules/validate-npm-package-name": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dependencies": { "builtins": "^1.0.3" } @@ -15231,14 +17003,16 @@ }, "node_modules/vary": { "version": "1.1.2", - "license": "MIT", + "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/vlq": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" }, "node_modules/vue-template-compiler": { "version": "2.7.16", @@ -15251,18 +17025,21 @@ }, "node_modules/walker": { "version": "1.0.8", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dependencies": { "makeerror": "1.0.12" } }, "node_modules/warn-once": { "version": "0.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.1.tgz", + "integrity": "sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==" }, "node_modules/watchpack": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -15273,14 +17050,16 @@ }, "node_modules/wcwidth": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/web-encoding": { "version": "1.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", "dependencies": { "util": "^0.12.3" }, @@ -15290,19 +17069,22 @@ }, "node_modules/web-streams-polyfill": { "version": "3.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "engines": { "node": ">= 8" } }, "node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -15348,8 +17130,9 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10.13.0" @@ -15357,8 +17140,9 @@ }, "node_modules/webpack/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, - "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -15373,8 +17157,9 @@ }, "node_modules/webpack/node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peer": true, "peerDependencies": { "ajv": "^6.9.1" @@ -15382,14 +17167,16 @@ }, "node_modules/webpack/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, - "license": "MIT", "peer": true }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -15406,8 +17193,9 @@ }, "node_modules/webpack/node_modules/watchpack": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -15419,7 +17207,8 @@ }, "node_modules/whatwg-fetch": { "version": "3.6.20", - "license": "MIT" + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" }, "node_modules/whatwg-mimetype": { "version": "3.0.0", @@ -15431,7 +17220,8 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "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" @@ -15439,7 +17229,8 @@ }, "node_modules/whatwg-url-without-unicode": { "version": "8.0.0-3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", + "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", "dependencies": { "buffer": "^5.4.3", "punycode": "^2.1.1", @@ -15451,28 +17242,50 @@ }, "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { "version": "5.0.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "engines": { "node": ">=8" } }, "node_modules/which": { - "version": "1.3.1", - "license": "ISC", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "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==", + "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-module": { "version": "2.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { "version": "1.1.15", - "license": "MIT", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -15489,11 +17302,30 @@ }, "node_modules/wonka": { "version": "4.0.15", - "license": "MIT" + "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", + "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==" }, "node_modules/wrap-ansi": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "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==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -15506,9 +17338,51 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/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==" + }, + "node_modules/wrap-ansi-cjs/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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -15521,7 +17395,8 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -15531,11 +17406,13 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -15545,11 +17422,13 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "2.4.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -15557,8 +17436,9 @@ } }, "node_modules/ws": { - "version": "8.16.0", - "license": "MIT", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "engines": { "node": ">=10.0.0" }, @@ -15577,7 +17457,8 @@ }, "node_modules/xcode": { "version": "3.0.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", "dependencies": { "simple-plist": "^1.1.0", "uuid": "^7.0.3" @@ -15588,14 +17469,16 @@ }, "node_modules/xcode/node_modules/uuid": { "version": "7.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/xml2js": { "version": "0.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", + "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -15606,39 +17489,45 @@ }, "node_modules/xml2js/node_modules/xmlbuilder": { "version": "11.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "engines": { "node": ">=4.0" } }, "node_modules/xmlbuilder": { "version": "14.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", "engines": { "node": ">=8.0" } }, "node_modules/xtend": { "version": "4.0.2", - "license": "MIT", + "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", - "license": "ISC", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { - "version": "2.4.1", - "license": "ISC", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", "bin": { "yaml": "bin.mjs" }, @@ -15648,7 +17537,8 @@ }, "node_modules/yargs": { "version": "17.7.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -15664,7 +17554,8 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "engines": { "node": ">=12" } @@ -15680,7 +17571,8 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "engines": { "node": ">=10" }, @@ -15689,9 +17581,9 @@ } }, "node_modules/zod": { - "version": "3.23.7", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.7.tgz", - "integrity": "sha512-NBeIoqbtOiUMomACV/y+V3Qfs9+Okr18vR5c/5pHClPpufWOrsx8TENboDPe265lFdfewX2yBtNTLPvnmCxwog==", + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -15704,9 +17596,23 @@ }, "devDependencies": { "@graphql-tools/load-files": "^7.0.0", + "@types/bun": "^1.1.2", "ts-node": "^10.9.2", "typescript": "5.3.3" } + }, + "packages/@green-stack-core/node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } } } } diff --git a/package.json b/package.json index d009409..802f494 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "packages/*" ], "overrides": { - "graphql": "16.8.1" + "graphql": "16.8.1", + "next": "~14.0.4" }, "scripts": { "dev": "npx turbo run dev", diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx b/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx index 631e15b..7b71d66 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx @@ -73,13 +73,16 @@ export const UniversalRouteScreen = < const hydrationState = hydratedQueries || getDehydratedSSRState() const renderHydrationData = !!hydrationData && !hydratedData // Only render the hydration data if it's not already in state + const hasInitialData = !!hydrationData || !!queryBridge.initialData + const shouldRefetchOnMount = isExpoWebLocal || !hasInitialData + const { data: fetcherData } = useQuery({ ...queryConfig, // @ts-ignore - initialData: isExpoWebLocal ? undefined : { + initialData: shouldRefetchOnMount ? undefined : { ...queryConfig.initialData, ...hydrationData, }, - refetchOnMount: isExpoWebLocal, + refetchOnMount: shouldRefetchOnMount, }) const routeDataProps = fetcherDataToProps(fetcherData as Awaited>) as Record // prettier-ignore From ad323e94966445f69d8f8dd94841cf1053993020 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sun, 19 May 2024 02:42:19 +0200 Subject: [PATCH 017/126] feat: Add createDataBridge() util to bridge resolvers --- .../@app-core/resolvers/healthCheck.bridge.ts | 53 +++++ packages/@green-stack-core/package.json | 3 +- .../schemas/createDataBridge.test.ts | 41 ++++ .../schemas/createDataBridge.ts | 169 ++++++++++++++ packages/@green-stack-core/schemas/index.ts | 168 +------------- .../@green-stack-core/schemas/schemas.test.ts | 210 ++++++++++++++++++ packages/@green-stack-core/tsconfig.json | 5 + 7 files changed, 485 insertions(+), 164 deletions(-) create mode 100644 features/@app-core/resolvers/healthCheck.bridge.ts create mode 100644 packages/@green-stack-core/schemas/createDataBridge.test.ts create mode 100644 packages/@green-stack-core/schemas/createDataBridge.ts create mode 100644 packages/@green-stack-core/schemas/schemas.test.ts diff --git a/features/@app-core/resolvers/healthCheck.bridge.ts b/features/@app-core/resolvers/healthCheck.bridge.ts new file mode 100644 index 0000000..d5b58fe --- /dev/null +++ b/features/@app-core/resolvers/healthCheck.bridge.ts @@ -0,0 +1,53 @@ +import { z, schema } from '@green-stack/core/schemas' +import { createDataBridge } from '@green-stack/core/schemas/createDataBridge' + +/* --- Schemas --------------------------------------------------------------------------------- */ + +export const HealthCheckArgs = schema('HealthCheckArgs', { + echo: z.string().default('Hello World'), +}) + +export const HealthCheckResponse = schema('HealthCheckResponse', { + echo: z.string().optional(), + status: z.literal('OK'), + alive: z.boolean(), + kicking: z.boolean(), + now: z.string(), + aliveTime: z.number(), + aliveSince: z.string(), + serverTimezone: z.string(), + requestHost: z.string(), + requestProtocol: z.string(), + requestURL: z.string(), + baseURL: z.string(), + backendURL: z.string(), + apiURL: z.string(), + graphURL: z.string(), + port: z.number().nullable(), + debugPort: z.number().nullable(), + nodeVersion: z.string(), + v8Version: z.string(), + systemArch: z.string(), + systemPlatform: z.string(), + systemRelease: z.string(), + systemFreeMemory: z.number(), + systemTotalMemory: z.number(), + systemLoadAverage: z.array(z.number()), +}) + +/* --- Type Aliases ---------------------------------------------------------------------------- */ + +export type HealthCheckArgs = z.infer + +export type HealthCheckResponse = z.infer + +/* --- Bridge ---------------------------------------------------------------------------------- */ + +export const healthCheckBridge = createDataBridge({ + resolverName: 'healthCheck', + resolverArgsName: 'HealthCheckArgs', + argsSchema: HealthCheckArgs, + responseSchema: HealthCheckResponse, + apiPath: '/api/health', + allowedMethods: ['GET'], +}) diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index f9ffd3f..4583031 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -8,11 +8,12 @@ }, "devDependencies": { "@graphql-tools/load-files": "^7.0.0", + "@types/bun": "^1.1.2", "ts-node": "^10.9.2", "typescript": "5.3.3" }, "scripts": { "build:schema": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./scripts/build-graphql-schema.ts", - "test:schemas": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./schemas/index.ts" + "test": "bun test" } } diff --git a/packages/@green-stack-core/schemas/createDataBridge.test.ts b/packages/@green-stack-core/schemas/createDataBridge.test.ts new file mode 100644 index 0000000..0fb13bf --- /dev/null +++ b/packages/@green-stack-core/schemas/createDataBridge.test.ts @@ -0,0 +1,41 @@ +import { expect, test } from 'bun:test' +import { print } from 'graphql' +import { z, schema } from './index' +import { createDataBridge } from './createDataBridge' + +const healtCheckBridge = createDataBridge({ + resolverName: 'healthCheck', + argsSchema: schema('HealthCheckArgs', { echo: z.string().default('Hello World') }), + responseSchema: schema('HealthCheckResponse', { echo: z.string().optional() }), + apiPath: '/api/health', + allowedMethods: ['GET'], +}) + +test("Bridges created by createDataBridge infer the right argsName & query type", () => { + expect(healtCheckBridge.resolverName).toBe('healthCheck') + expect(healtCheckBridge.resolverArgsName).toBe('healthCheckArgs') + expect(healtCheckBridge.resolverType).toBe('query') +}) + +const expectedQuery = `query healthCheck($healthCheckArgs: HealthCheckArgs) { + healthCheck(args: $healthCheckArgs) { + echo + } +}` + +test("Bridges created by createDataBridge can build the graphql query from args & response schemas", () => { + const graphqlQuery = healtCheckBridge.getGraphqlQuery() + expect(print(graphqlQuery)).toBe(expectedQuery) +}) + +// TODO: Figure out why using healthCheckQuery here causes "error: Unexpected typeof" from react-native? +// test("Bridges created by createDataBridge can use a custom graphql query", async () => { +// // Lazily import the query to avoid circular dependencies +// const { healthCheckQuery } = await (import('@app/core/resolvers/healthCheck.query')) +// const bridgeWithCustomQuery = createDataBridge({ +// ...healtCheckBridge, +// graphqlQuery: healthCheckQuery, +// }) +// const graphqlQuery = bridgeWithCustomQuery.getGraphqlQuery() +// expect(print(graphqlQuery)).not.toBe(expectedQuery) +// }) diff --git a/packages/@green-stack-core/schemas/createDataBridge.ts b/packages/@green-stack-core/schemas/createDataBridge.ts new file mode 100644 index 0000000..b88fcee --- /dev/null +++ b/packages/@green-stack-core/schemas/createDataBridge.ts @@ -0,0 +1,169 @@ +import { TadaDocumentNode, graphql, VariablesOf, ResultOf } from 'gql.tada' +import { print } from 'graphql' +import { Metadata, z } from './index' +import { HintedKeys } from '../types' + +/** --- renderGraphqlQuery() ------------------------------------------------------------------- */ +/** -i- Accepts a resolverName, argsSchema and responseSchema and spits out a graphql query that stops at 3 levels (or a custom number) of depth */ +export const renderGraphqlQuery = ({ + resolverName, + resolverArgsName, + resolverType, + argsSchema, + responseSchema, + maxFieldDepth = 5, +}: { + resolverName: string + resolverArgsName: string + resolverType: 'query' | 'mutation' + argsSchema: z.ZodObject + responseSchema: z.ZodObject + maxFieldDepth?: number +}) => { + // Introspect input & output schemas + const argsSchemaDefs = argsSchema.introspect() + const responseSchemaDefs = responseSchema.introspect() + const argsSchemaName = argsSchemaDefs.name + + // Build query base + let query = `${resolverType} ${resolverName}($${resolverArgsName}: ${argsSchemaName}) {\n {{body}}\n}` // prettier-ignore + query = query.replace('{{body}}', `${resolverName}(args: $${resolverArgsName}) {\n{{fields}}\n }`) // prettier-ignore + + // Nestable field builder + const renderFields = (schema: Metadata>, depth: number, fieldName?: string) => { + try { + const fieldKeys = Object.keys(schema.schema || schema) + const fieldEntries = fieldKeys.map((fieldKey): string => { + // @ts-ignore + const fieldConfig = (schema.schema?.[fieldKey] || schema[fieldKey]) as Metadata + const zodType = fieldConfig.typeName + const fieldType = fieldConfig.baseType + const spacing = ' '.repeat(depth) + + // Skip incompatible types + const INCOMPATIBLES = ['ZodRecord', 'ZodIntersection', 'ZodDiscriminatedUnion', 'ZodVoid', 'ZodFunction', 'ZodPromise', 'ZodLazy', 'ZodEffects'] as const // prettier-ignore + if (INCOMPATIBLES.includes(zodType as any)) { + console.log(`-!- Skipping incompatible type in automatic graphql query build: field '${fieldKey}' of type '${zodType}' is unsupported.`) + console.log("-i- When creating a data bridge with this field type, you'll need to manually pass the 'graphqlQuery' field with gql.tada upon creation.") + console.log("-i- Alternatively, please stick to using the allowed types for GraphQL: z.string, z.number, z.boolean, z.date, z.array, z.object, z.literal, z.enum, z.nativeEnum, and simple z.union types.") + return '' + } + + // Render fields with no nesting + const UNNESTABLES = ['ZodString', 'ZodNumber', 'ZodBoolean', 'ZodDate', 'ZodLiteral', 'ZodEnum', 'ZodNativeEnum'] as const + if (UNNESTABLES.includes(zodType as any)) return `${spacing}${fieldKey}` + + // Handle regular arrays and tuples + const isArray = fieldType === 'Array' + const isNonObjectLike = !['Object', 'Array'].includes(fieldType) // @ts-ignore + const isNonObjectArray = isArray && !['Object', 'Array'].includes(fieldConfig.schema?.baseType) // prettier-ignore + const hasNoSubFields = isNonObjectLike || isNonObjectArray + if (hasNoSubFields) return `${spacing}${fieldKey}` + + // Stop a max depth + if (depth >= maxFieldDepth) { + console.log(`-!- Skipping field '${fieldKey}' in automatic graphql query build due to max depth of ${maxFieldDepth} reached.`) + console.log("You can pass a custom 'maxFieldDepth' to the createDataBridge() function to increase the depth.") + console.log("Alternatively, you could pass a custom GraphQL query with gql.tada in the optional 'graphqlQuery' field.") + return `${spacing}${fieldKey}` + } + + // Handle nested types + let objectSchema = fieldConfig.schema as Metadata> + return `${spacing}${fieldKey} {\n${renderFields(objectSchema, depth + 1, fieldKey)}\n${spacing}}` + }) + return fieldEntries.filter(Boolean).join('\n') + } catch (error) { + console.error('Error rendering fields', error, JSON.stringify({ fieldName, schema }, null, 2)) + return '' + } + } + + // Render fields into the query + const fields = renderFields(responseSchemaDefs as Metadata>, 2) + query = query.replace('{{fields}}', fields) + return query +} + +/** --- createDataBridge() --------------------------------------------------------------------- */ +/** -i- Create a reusable bridge object between a resolver and a page */ +export const createDataBridge = < + ResolverName extends string, + ArgsShape extends z.ZodRawShape, + ResShape extends z.ZodRawShape, + CustomQuery extends TadaDocumentNode | null = null, + ResolverArgsName extends `${ResolverName}Args` | HintedKeys = `${ResolverName}Args`, + DefaultQueryArgs = Record['_input']>, + DefaultQueryRes = Record['_output']>, + QueryArgs = CustomQuery extends null ? DefaultQueryArgs : VariablesOf, + QueryRes = CustomQuery extends null ? DefaultQueryRes : ResultOf +>({ + resolverName, + resolverType: customResolverType, + resolverArgsName = `${resolverName}Args`, + argsSchema, + responseSchema, + apiPath, + allowedMethods, + graphqlQuery, + ...restOptions +}: { + resolverName: ResolverName + resolverType?: 'query' | 'mutation' + resolverArgsName?: ResolverArgsName | HintedKeys + argsSchema: z.ZodObject + responseSchema: z.ZodObject + apiPath?: string + allowedMethods?: ('GRAPHQL' | 'GET' | 'POST' | 'PUT' | 'DELETE')[] + graphqlQuery?: CustomQuery + isMutation?: boolean +}) => { + // Vars & Flags + const printedQuery = graphqlQuery ? print(graphqlQuery) : '' + const containsMutation = printedQuery?.includes?.('mutation') + const resolverType = customResolverType || (containsMutation ? 'mutation' : 'query') + const isMutation = restOptions.isMutation || containsMutation || resolverType === 'mutation' + + // -- Error Checks -- + + if (!resolverName) throw new Error('Resolver name is required') + if (!argsSchema) throw new Error('Args schema is required') + if (!responseSchema) throw new Error('Response schema is required') + + // -- Build default graphql query? -- + + const getGraphqlQuery = () => { + // Return custom query if provided + if (graphqlQuery) return graphqlQuery as TadaDocumentNode + + // Build a default query otherwise + const defaultGraphqlQueryString = renderGraphqlQuery({ + resolverName, + resolverArgsName, + resolverType, + argsSchema, + responseSchema, + }) + const gqlArgsSchema = z.object({ [resolverName as ResolverName]: argsSchema }) + const gqlResSchema = z.object({ [resolverName as ResolverName]: responseSchema }) + const documentNode = graphql(defaultGraphqlQueryString) as TadaDocumentNode< + z.infer, + z.infer + > + return documentNode as TadaDocumentNode + } + + // -- Return Data Bridge -- + + return { + resolverName, + resolverType, + resolverArgsName, + argsSchema, + responseSchema, + apiPath, + allowedMethods, + isMutation, + getGraphqlQuery, + } +} diff --git a/packages/@green-stack-core/schemas/index.ts b/packages/@green-stack-core/schemas/index.ts index 19a6fe7..43681d0 100644 --- a/packages/@green-stack-core/schemas/index.ts +++ b/packages/@green-stack-core/schemas/index.ts @@ -12,24 +12,24 @@ export const BASE_TYPE_MAP = { ZodEnum: 'String', ZodArray: 'Array', ZodObject: 'Object', - ZodRecord: 'Object', // - Mostly Supported, Experimental - ZodNull: 'Null', // Serialised as null ZodUndefined: 'Undefined', // Omitted unless combined - ZodAny: 'Any', // Serialised as JSON ZodTuple: 'Any', // Serialised as JSON ZodUnion: 'Any', // Serialised as JSON ZodLiteral: 'Any', // We'll attempt to narrow down based on literal value, serialised as JSON as fallback + ZodNativeEnum: 'Any', // Technically 'String' or 'Number', but we can't really know which one // - Might Work, Not Advised - + ZodAny: 'Any', // Unpredictable, serialised as JSON + ZodRecord: 'Object', // Cannot be used for GraphQL as we don't know the possible keys ZodUnknown: 'Any', // Serialised as JSON, can break if value is not JSON serializable ZodBigInt: 'Number', // Cannot be JSON serialized, use at own risk ZodSymbol: 'String', // Very experimental ZodIntersection: 'Any', // Unsure how to handle, will attempt to serialize as JSON - ZodNativeEnum: 'Any', // Technically 'String' or 'Number', but we can't really know which one - ZodDiscriminatedUnion: 'Any', // Technically 'Object' + ZodDiscriminatedUnion: 'Any', // Technically 'Object', unpredictable, serialised as JSON ZodMap: 'Any', // Technically 'Object', but JSON serialization is tricky ZodSet: 'Array', // Technically 'Array', but JSON serialization is tricky - // - Avoid in Schemas - + // - Unsupported, Avoid in Schemas - ZodVoid: 'Undefined', // Not sure when or where you'd use this outside of functions ZodFunction: 'Function', // Cannot be JSON serialized ZodPromise: 'Promise', // Cannot be JSON serialized @@ -298,164 +298,6 @@ export const schema = (name: string, shape: S) => { return z.object(shape).nameSchema(name) } -/* --- Test Primitives ------------------------------------------------------------------------- */ - -// const Primitives = schema('Primitives', { -// str: z.string().min(1).max(5).nullish().default('test').example('hello').describe('String'), -// num: z.number().min(1).max(50).nullable().default(1).example(42).describe('Number'), -// bln: z.boolean().optional().default(false).example(true).describe('Boolean'), -// date: z.date().default(new Date()).example(new Date('2021-01-01')).describe('Date'), -// }) - -// type Primitives = z.infer -// // ^? - -// Log out the introspection result -// console.log(JSON.stringify(Primitives.introspect(), null, 4)) - -/* --- Test Advanced Types --------------------------------------------------------------------- */ - -// const AdvancedTypes = schema('AdvancedTypes', { -// enum: z.enum(['A', 'B', 'C']).default('A').example('B'), -// tuple: z.tuple([z.string(), z.number()]).default(['hello', 42]).example(['world', 24]), -// union: z.union([z.string(), z.number()]).default('hello').example(42), -// array: z.array(z.string()).min(0).max(5).length(1).default([]).example(['world']), -// }) - -// type AdvancedTypes = z.infer -// // ^? - -// // Log out the introspection result -// console.log(JSON.stringify(AdvancedTypes.introspect(), null, 4)) - -/* --- Test Objectlike Types ------------------------------------------------------------------- */ - -// const Objectlikes = schema('Objectlikes', { -// obj: z.object({ -// str: z.string().default('test').example('hello'), -// num: z.number().default(0).example(42), -// }) -// .nameSchema('SomeObject') -// .default({ str: 'hello', num: 42 }) -// .example({ str: 'world', num: 24 }), -// rec: z.record(z.string(), z.number()).default({}).example({ key: 5 }), -// }) - -// type Objectlikes = z.infer -// // ^? - -// Log out the introspection result -// console.log(JSON.stringify(Objectlikes.introspect(), null, 4)) - -/* --- Test Experimental Types ----------------------------------------------------------------- */ - -// enum TestEnum { D = 'D', E = 'E' } - -// const map = new Map() -// map.set('key', 5) - -// const ExperimentalTypes = schema('ExperimentalTypes', { -// bigInt: z.bigint(), -// symbol: z.symbol(), -// null: z.null(), -// undefined: z.undefined(), -// void: z.void(), -// any: z.any(), -// unknown: z.unknown(), -// literal: z.literal('test'), -// intersection: z.intersection(z.union([z.number(), z.string()]), z.union([z.number(), z.boolean()])), -// nativeEnum: z.nativeEnum(TestEnum).default(TestEnum.D).example(TestEnum.E), -// discriminatedUnion: z.discriminatedUnion('type', [ -// z.object({ type: z.literal('A'), a: z.string() }), -// z.object({ type: z.literal('B'), b: z.number() }), -// ]), -// set: z.set(z.string()).default(new Set([])).example(new Set(['world'])), -// map: z.map(z.string(), z.number()).default(map).example(map), -// instanceof: z.instanceof(Date).default(new Date()).example(new Date('2021-01-01')), -// custom: z.custom((data) => data), -// }) - -// type ExperimentalTypes = z.infer -// // ^? - -// // Log out the introspection result -// console.log(JSON.stringify(ExperimentalTypes.introspect(), null, 4)) - -/* --- Test Executables ------------------------------------------------------------------------ */ - -// const Executables = schema('Executables', { -// func: z.function(z.tuple([z.string()]), z.number()).default(() => 42).example(() => 24), -// promise: z.promise(z.string()).default(Promise.resolve('hello')).example(Promise.resolve('world')), -// lazy: z.lazy(() => z.string()).default('hello').example('world'), -// }) - -// type Executables = z.infer -// // ^? - -// // Log out the introspection result -// console.log(JSON.stringify(Executables.introspect(), null, 4)) - -/* --- Test Defaults --------------------------------------------------------------------------- */ - -// const Defaults = schema('Defaults', { -// str: z.string().default('test'), -// num: z.number().default(1), -// bln: z.boolean().default(false), -// date: z.date().default(new Date()), -// enum: z.enum(['A', 'B', 'C']).default('A'), -// tuple: z.tuple([z.string(), z.number()]).default(['hello', 42]), -// union: z.union([z.string(), z.number()]).default('hello'), -// array: z.array(z.string()).default([]), -// }) - -// type Defaults = z.infer -// // ^? - -// // Log out the defaults -// console.log(Defaults.applyDefaults({ str: 'hello defaults' })) - -/* --- Test Derived Schemas -------------------------------------------------------------------- */ - -// const PrimitiveSchema = schema('PrimitiveSchema', { -// str: z.string(), -// num: z.number(), -// bln: z.boolean(), -// }) - -// const ExtendedSchema = PrimitiveSchema.extendSchema('ExtendedSchema', { -// date: z.date(), -// }) - -// type ExtendedSchema = z.infer -// // ^? - -// // Log out the introspection result -// console.log(JSON.stringify(ExtendedSchema.introspect(), null, 4)) - -// // - - -// const OmittedSchema = PrimitiveSchema.omitSchema('OmittedSchema', { -// num: true, -// }) - -// type OmittedSchema = z.infer -// // ^? - -// // Log out the introspection result -// console.log(JSON.stringify(OmittedSchema.introspect(), null, 4)) - -// // - - -// const PickedSchema = PrimitiveSchema.pickSchema('PickedSchema', { -// num: true, -// }) - -// type PickedSchema = z.infer -// // ^? - -// // Log out the introspection result -// console.log(JSON.stringify(PickedSchema.introspect(), null, 4)) - /* --- Reexports ------------------------------------------------------------------------------- */ export { z } from 'zod' diff --git a/packages/@green-stack-core/schemas/schemas.test.ts b/packages/@green-stack-core/schemas/schemas.test.ts new file mode 100644 index 0000000..6771db5 --- /dev/null +++ b/packages/@green-stack-core/schemas/schemas.test.ts @@ -0,0 +1,210 @@ +import { expect, test } from 'bun:test' +import { z, schema, Metadata } from './index' + +/* --- Schema Essentials ----------------------------------------------------------------------- */ + +const User = schema('User', { + name: z.string(), + age: z.number(), +}) + +test("Schemas can be introspected", () => { + expect(User.introspect).toBeInstanceOf(Function) + expect(User.introspect()).toEqual({ + name: 'User', + typeName: 'ZodObject', + baseType: 'Object', + schema: { + name: { typeName: 'ZodString', baseType: 'String' }, + age: { typeName: 'ZodNumber', baseType: 'Number' }, + }, + }) +}) + +test("Schemas preserve the name assigned to them upon introspection", () => { + expect(User.introspect().name).toBe('User') +}) + +test("Schemas can be renamed", () => { + const User2 = User.nameSchema('User2') + expect(User2.introspect().name).toBe('User2') + expect(User.introspect().name).toBe('User') +}) + +const Primitives = schema('Primitives', { + str: z.string().min(1).max(10).nullish().default('Hello').example('World').describe('somestring'), + num: z.number().min(1).max(50).default(1).example(42).describe('Number'), + bln: z.boolean().default(false).example(true).describe('Boolean'), + date: z.date().default(new Date('2024-01-01')).example(new Date('2020-01-01')).describe('Date'), +}) + +test("Optionality, default & examples values persist in schema introspection", () => { + const metadata = Primitives.introspect() as Metadata> + // Optionality + expect(metadata.schema?.str.isOptional).toEqual(true) + expect(metadata.schema?.str.isNullable).toEqual(true) + expect(metadata.schema?.num.isOptional).toEqual(true) // Default makes it optional + expect(metadata.schema?.num.isNullable).toBeFalsy() + expect(metadata.schema?.bln.isOptional).toEqual(true) + expect(metadata.schema?.bln.isNullable).toBeFalsy() + // Default Values + expect(metadata.schema?.str.defaultValue).toEqual('Hello') + expect(metadata.schema?.num.defaultValue).toEqual(1) + expect(metadata.schema?.bln.defaultValue).toEqual(false) + expect(metadata.schema?.date.defaultValue).toEqual(new Date('2024-01-01')) + // Examples + expect(metadata.schema?.str.exampleValue).toEqual('World') + expect(metadata.schema?.num.exampleValue).toEqual(42) + expect(metadata.schema?.bln.exampleValue).toEqual(true) + expect(metadata.schema?.date.exampleValue).toEqual(new Date('2020-01-01')) +}) + +/* --- Primitives ------------------------------------------------------------------------------ */ + +test("Primitives z.string(), z.number(), z.boolean() & z.date() work as expected", () => { + const metadata = Primitives.introspect() as Metadata> + // Base Types + expect(metadata.schema?.str.baseType).toEqual('String') + expect(metadata.schema?.num.baseType).toEqual('Number') + expect(metadata.schema?.bln.baseType).toEqual('Boolean') + expect(metadata.schema?.date.baseType).toEqual('Date') + // Type Names + expect(metadata.schema?.str.typeName).toEqual('ZodString') + expect(metadata.schema?.num.typeName).toEqual('ZodNumber') + expect(metadata.schema?.bln.typeName).toEqual('ZodBoolean') + expect(metadata.schema?.date.typeName).toEqual('ZodDate') + // Min / Max + expect(metadata.schema?.str.minLength).toEqual(1) + expect(metadata.schema?.str.maxLength).toEqual(10) + expect(metadata.schema?.num.minValue).toEqual(1) + expect(metadata.schema?.num.maxValue).toEqual(50) + // Parsing Happy Paths + expect(Primitives.shape.str.parse('Hello')).toEqual('Hello') + expect(Primitives.shape.num.parse(42)).toEqual(42) + expect(Primitives.shape.bln.parse(true)).toEqual(true) + expect(Primitives.shape.date.parse(new Date('2020-01-01'))).toEqual(new Date('2020-01-01')) + // Parsing Unhappy Paths + expect(() => Primitives.shape.str.parse('')).toThrow() // Too short + expect(() => Primitives.shape.str.parse('Hello World!')).toThrow() // Too long + expect(() => Primitives.shape.num.parse("0")).toThrow() // Too low, wrong type + expect(() => Primitives.shape.num.parse(51)).toThrow() // Too high +}) + +/* --- Advanced Types -------------------------------------------------------------------------- */ + +const AdvancedTypes = schema('AdvancedTypes', { + enum: z.enum(['A', 'B', 'C']).default('A').example('B'), + tuple: z.tuple([z.string(), z.number()]).default(['hello', 42]).example(['world', 24]), + union: z.union([z.string(), z.number()]).default('hello').example(42), + array: z.array(z.string()).min(0).max(5).length(1).default([]).example(['world']), +}) + +test("Advanced types z.enum(), z.tuple(), z.union() & z.array() work as expected", () => { + const metadata = AdvancedTypes.introspect() as Metadata> + // Base Types + expect(metadata.schema?.enum.baseType).toEqual('String') + expect(metadata.schema?.tuple.baseType).toEqual('Any') // Experimental support, serialized as JSON + expect(metadata.schema?.union.baseType).toEqual('Any') // String | Number, serialized as JSON + expect(metadata.schema?.array.baseType).toEqual('Array') + // Type Names + expect(metadata.schema?.enum.typeName).toEqual('ZodEnum') + expect(metadata.schema?.tuple.typeName).toEqual('ZodTuple') + expect(metadata.schema?.union.typeName).toEqual('ZodUnion') + expect(metadata.schema?.array.typeName).toEqual('ZodArray') + // Enums + expect(metadata.schema?.enum.schema).toEqual({ + A: 'A', + B: 'B', + C: 'C', + }) + // Tuples + expect(metadata.schema?.tuple.schema).toEqual([ + { typeName: 'ZodString', baseType: 'String' }, + { typeName: 'ZodNumber', baseType: 'Number' }, + ]) + // Unions + expect(metadata.schema?.union.schema).toEqual([ + { typeName: 'ZodString', baseType: 'String' }, + { typeName: 'ZodNumber', baseType: 'Number' }, + ]) + // Array + expect(metadata.schema?.array.schema).toEqual({ typeName: 'ZodString', baseType: 'String' }) + expect(metadata.schema?.array.minLength).toEqual(0) + expect(metadata.schema?.array.maxLength).toEqual(5) + // Parsing Happy Paths + expect(AdvancedTypes.shape.enum.parse('B')).toEqual('B') + expect(AdvancedTypes.shape.tuple.parse(['world', 24])).toEqual(['world', 24]) + expect(AdvancedTypes.shape.union.parse(42)).toEqual(42) + expect(AdvancedTypes.shape.array.parse(['world'])).toEqual(['world']) + // Parsing Unhappy Paths + expect(() => AdvancedTypes.shape.enum.parse('D')).toThrow() // Not in enum + expect(() => AdvancedTypes.shape.tuple.parse(['world', '24'])).toThrow() // Wrong type + expect(() => AdvancedTypes.shape.union.parse(false)).toThrow() // Wrong type + expect(() => AdvancedTypes.shape.array.parse(['world', '24'])).toThrow() // Too long +}) + +/* --- Derived Schemas ------------------------------------------------------------------------- */ + +test("Deriving schemas with .extendSchema(), .omitSchema(), .pickSchema() work as expected", () => { + // Extend + const Extended = Primitives.extendSchema('Extended', { + newField: z.string().default('Hello'), + }) + expect(Extended.introspect().name).toBe('Extended') + expect(Extended.introspect().schema).toHaveProperty('newField') + expect(Extended.parse({ newField: 'World' })).toEqual({ + newField: 'World', + str: 'Hello', + num: 1, + bln: false, + date: new Date('2024-01-01'), + }) + // Omit + const Omitted = Primitives.omitSchema('Omitted', { str: true }) + expect(Omitted.introspect().name).toBe('Omitted') + expect(Omitted.introspect().schema).not.toHaveProperty('str') + expect(Omitted.parse({ num: 42 })).toEqual({ + num: 42, + bln: false, + date: new Date('2024-01-01'), + }) + // Pick + const Picked = Primitives.pickSchema('Picked', { str: true }) + expect(Picked.introspect().name).toBe('Picked') + expect(Picked.introspect().schema).toHaveProperty('str') + expect(Picked.introspect().schema).not.toHaveProperty('num') + expect(Picked.parse({ str: 'World' })).toEqual({ + str: 'World', + }) +}) + +/* --- Nested Schemas -------------------------------------------------------------------------- */ + +const Nested = schema('Nested', { + user: User, + primitives: Primitives, + advanced: AdvancedTypes, +}) + +test("Nested schemas work as expected", () => { + const metadata = Nested.introspect() as Metadata> + // Nested Schemas + expect(metadata.schema?.user.typeName).toEqual('ZodObject') + expect(metadata.schema?.primitives.typeName).toEqual('ZodObject') + expect(metadata.schema?.advanced.typeName).toEqual('ZodObject') + // Parsing Happy Paths + expect(Nested.shape.user.parse({ name: 'John', age: 42 })).toEqual({ name: 'John', age: 42 }) + expect(Nested.shape.primitives.parse({ str: 'Hello', num: 42, bln: true, date: new Date('2020-01-01') })).toEqual({ + str: 'Hello', + num: 42, + bln: true, + date: new Date('2020-01-01'), + }) + expect(Nested.shape.advanced.parse({ enum: 'B', tuple: ['world', 24], union: 42, array: ['world'] })).toEqual({ + enum: 'B', + tuple: ['world', 24], + union: 42, + array: ['world'], + }) +}) + diff --git a/packages/@green-stack-core/tsconfig.json b/packages/@green-stack-core/tsconfig.json index e44a101..c66b46d 100644 --- a/packages/@green-stack-core/tsconfig.json +++ b/packages/@green-stack-core/tsconfig.json @@ -1,8 +1,13 @@ { "extends": "@app/core/tsconfig", + "compilerOptions": { + "types": ["bun-types"], + }, "include": [ "**/*.ts", "**/*.tsx", + "../../features/**/*.ts", + "../../features/**/*.tsx", "../../features/app-core/graphql-env.d.ts", "types.ts" ], From 3db6ac22a80d11dea59ac645b42072b38b566a13 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Mon, 20 May 2024 14:16:06 +0200 Subject: [PATCH 018/126] feat: Add bridgedFetcher() util to @green-stack/core --- .../@app-core/graphql/graphqlQuery.web.ts | 4 +- .../@app-core/resolvers/healthCheck.bridge.ts | 2 +- .../@app-core/resolvers/healthCheck.query.ts | 15 ++--- features/@app-core/screens/HomeScreen.tsx | 6 +- features/@app-core/tsconfig.json | 1 + packages/@green-stack-core/global.d.ts | 44 ++++++++++++++ .../UniversalRouteScreen.helpers.ts | 40 ++++++------- .../navigation/UniversalRouteScreen.tsx | 9 ++- .../navigation/UniversalRouteScreen.web.tsx | 9 ++- packages/@green-stack-core/package.json | 2 +- .../schemas/bridgedFetcher.ts | 43 ++++++++++++++ .../schemas/createDataBridge.test.ts | 10 +++- .../schemas/createDataBridge.ts | 11 ++-- .../@green-stack-core/schemas/schemas.test.ts | 21 +++++-- packages/@green-stack-core/tsconfig.json | 5 +- packages/@green-stack-core/tsconfig.test.json | 15 +++++ packages/@green-stack-core/types.ts | 25 -------- .../@green-stack-core/utils/stringUtils.ts | 58 +++++++++++++++++++ 18 files changed, 236 insertions(+), 84 deletions(-) create mode 100644 packages/@green-stack-core/global.d.ts create mode 100644 packages/@green-stack-core/schemas/bridgedFetcher.ts create mode 100644 packages/@green-stack-core/tsconfig.test.json delete mode 100644 packages/@green-stack-core/types.ts create mode 100644 packages/@green-stack-core/utils/stringUtils.ts diff --git a/features/@app-core/graphql/graphqlQuery.web.ts b/features/@app-core/graphql/graphqlQuery.web.ts index d7c1305..e6bbc52 100644 --- a/features/@app-core/graphql/graphqlQuery.web.ts +++ b/features/@app-core/graphql/graphqlQuery.web.ts @@ -37,7 +37,7 @@ export const graphqlQuery = async >( }) as { data: R } // Return resolver response return data - } catch (error) { + } catch (error: any) { throw new Error(error) } } @@ -58,7 +58,7 @@ export const graphqlQuery = async >( const { data, errors } = await res.json() if (errors) throw new Error(errors[0].message) return data as R - } catch (error) { + } catch (error: any) { throw new Error(error) } } diff --git a/features/@app-core/resolvers/healthCheck.bridge.ts b/features/@app-core/resolvers/healthCheck.bridge.ts index d5b58fe..859cdf5 100644 --- a/features/@app-core/resolvers/healthCheck.bridge.ts +++ b/features/@app-core/resolvers/healthCheck.bridge.ts @@ -49,5 +49,5 @@ export const healthCheckBridge = createDataBridge({ argsSchema: HealthCheckArgs, responseSchema: HealthCheckResponse, apiPath: '/api/health', - allowedMethods: ['GET'], + allowedMethods: ['GRAPHQL', 'GET'], }) diff --git a/features/@app-core/resolvers/healthCheck.query.ts b/features/@app-core/resolvers/healthCheck.query.ts index c3e5ac8..9f8a3e6 100644 --- a/features/@app-core/resolvers/healthCheck.query.ts +++ b/features/@app-core/resolvers/healthCheck.query.ts @@ -1,11 +1,12 @@ import { ResultOf, VariablesOf, graphql } from 'gql.tada' -import { graphqlQuery } from '@app/core/graphql/graphqlQuery' +import { bridgedFetcher } from '@green-stack/core/schemas/bridgedFetcher' +import { healthCheckBridge } from './healthCheck.bridge' /* --- Query ----------------------------------------------------------------------------------- */ export const healthCheckQuery = graphql(` - query healthCheck ($args: HealthCheckArgs) { - healthCheck(args: $args) { + query healthCheck ($healthCheckArgs: HealthCheckArgs) { + healthCheck(args: $healthCheckArgs) { echo status alive @@ -43,7 +44,7 @@ export type HealthCheckQueryResult = ResultOf /* --- healthCheckFetcher() -------------------------------------------------------------------- */ -export const healthCheckFetcher = async (variables: HealthCheckQueryVariables['args']) => { - const result = await graphqlQuery(healthCheckQuery, { variables: { args: variables } }) - return result.healthCheck -} +export const healthCheckFetcher = bridgedFetcher({ + ...healthCheckBridge, + graphqlQuery: healthCheckQuery, +}) diff --git a/features/@app-core/screens/HomeScreen.tsx b/features/@app-core/screens/HomeScreen.tsx index 7bbc559..d5e49dd 100644 --- a/features/@app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/HomeScreen.tsx @@ -7,9 +7,9 @@ import { HydratedRouteProps, createQueryBridge } from '@green-stack/core/navigat export const queryBridge = createQueryBridge({ routeDataFetcher: healthCheckFetcher, - routeParamsToQueryKey: (routeParams) => ['healthCheck', routeParams?.echo], - routeParamsToQueryInput: (routeParams) => ({ echo: routeParams?.echo }), - fetcherDataToProps: (fetcherData) => ({ serverHealth: fetcherData }), + routeParamsToQueryKey: (routeParams) => ['healthCheck', routeParams.echo], + routeParamsToQueryInput: (routeParams) => ({ healthCheckArgs: { echo: routeParams.echo } }), + fetcherDataToProps: (fetcherData) => ({ serverHealth: fetcherData?.healthCheck }), }) /* --- --------------------------------------------------------------------------- */ diff --git a/features/@app-core/tsconfig.json b/features/@app-core/tsconfig.json index 6c46490..013da6a 100644 --- a/features/@app-core/tsconfig.json +++ b/features/@app-core/tsconfig.json @@ -26,6 +26,7 @@ }, "include": [ "next-env.d.ts", + "../../packages/@green-stack-core/global.d.ts", "appConfig.ts", "**/*.ts", "**/*.tsx", diff --git a/packages/@green-stack-core/global.d.ts b/packages/@green-stack-core/global.d.ts new file mode 100644 index 0000000..bd6fbba --- /dev/null +++ b/packages/@green-stack-core/global.d.ts @@ -0,0 +1,44 @@ +type Overwrite = Omit & U + +type FlattenIfArray = T extends (infer R)[] ? R : T +type Unpromisify = T extends Promise ? R : T + +type HintedKeys = string & {} // eslint-disable-line @typescript-eslint/ban-types + +type Primitive = string | number | boolean | bigint | symbol | null | undefined; + +type NonNullableRequired = T extends null | undefined ? never : T; + +type TestNullable = NonNullableRequired; + +type ExtractPrimitives = { + [K in keyof T]: NonNullableRequired extends Primitive ? { [P in K]: string } : ExtractPrimitives; +}[keyof NonNullableRequired]; + +type DeepFlattenRequired = { + [K in keyof T]-?: NonNullableRequired extends Primitive ? NonNullableRequired : DeepFlattenRequired>; +}; + +type MergeUnion = (T extends any ? (x: T) => void : never) extends (x: infer R) => void ? { [K in keyof R]: R[K] } : T; + +type ExtractRouteParams = Partial>>> + +type Prettify = { + [K in keyof T]: T[K] extends Object ? Prettify : T[K] +} + +type PrettifySingleKeyRecord = T extends Record + ? K extends keyof T + ? { [key in K]: V } + : never + : never + +type LowercaseFirstChar = + S extends `${infer First}${infer Rest}` + ? `${Lowercase}${Rest}` + : S + +type any$Todo = any +type any$Unknown = any +type any$FixMe = any +type any$TooComplex = any diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts b/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts index 8b3a3b6..9957f65 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts @@ -8,14 +8,15 @@ export type QueryFn< RES extends Record = Record > = (args: ARGS) => Promise +// @ts-ignore export type QueryBridgeConfig< ARGS extends Record = Record, RES extends Record = Record, - Fetcher extends QueryFn = QueryFn, - FetcherArgs = Parameters[0], - FetcherToProps extends (data: Awaited>) => unknown = (data: Awaited>) => Awaited>, - ParamsToQueryKey extends (routeParams: Partial) => QueryKey = (routeParams: Partial) => QueryKey, - ParamsToQueryInput extends (routeParams: Partial) => FetcherArgs = (routeParams: Partial) => FetcherArgs + Fetcher = QueryFn, + FetcherArgs = Parameters>[0], + FetcherToProps extends (data: Awaited>>) => unknown = (data: Awaited>>) => Awaited>>, + ParamsToQueryKey extends (routeParams: ExtractRouteParams>[0]>) => QueryKey = (routeParams: ExtractRouteParams>[0]>) => QueryKey, + ParamsToQueryInput extends (routeParams: ExtractRouteParams>[0]>) => FetcherArgs = (routeParams: ExtractRouteParams>[0]>) => FetcherArgs > = { /** -i- Function to turn any route params into the query key for the `routeDataFetcher()` query */ routeParamsToQueryKey: ParamsToQueryKey @@ -26,24 +27,24 @@ export type QueryBridgeConfig< /** -i- Function transform fetcher data into props */ fetcherDataToProps?: FetcherToProps /** -i- Initial data provided to the QueryClient */ - initialData?: ReturnType + initialData?: ReturnType> } +// @ts-ignore export type UniversalRouteProps< ARGS extends Record = Record, RES extends Record = Record, - Fetcher extends QueryFn = QueryFn, - FetcherArgs = Parameters[0], - FetcherToProps extends (data: Awaited>) => unknown = (data: Awaited>) => Awaited>, - ParamsToQueryKey extends (routeParams: Partial) => QueryKey = (routeParams: Partial) => QueryKey, - ParamsToQueryInput extends (routeParams: Partial) => FetcherArgs = (routeParams: Partial) => FetcherArgs + FetcherArgs = Parameters>[0], + FetcherToProps extends (data: Awaited>>) => unknown = (data: Awaited>>) => Awaited>>, + ParamsToQueryKey extends (routeParams: ExtractRouteParams>[0]>) => QueryKey = (routeParams: ExtractRouteParams>[0]>) => QueryKey, + ParamsToQueryInput extends (routeParams: ExtractRouteParams>[0]>) => FetcherArgs = (routeParams: ExtractRouteParams>[0]>) => FetcherArgs > = { /** -i- Optional params passed by the Next.js app router, in Expo we get these from `useRouteParams()` */ params?: Partial /** -i- Optional search params passed by the Next.js app router, in Expo we get these from `useRouteParams()` */ searchParams?: Partial /** -i- Configuration for the query bridge */ - queryBridge: QueryBridgeConfig + queryBridge: QueryBridgeConfig, FetcherArgs, FetcherToProps, ParamsToQueryKey, ParamsToQueryInput> /** -i- The screen to render for this route */ routeScreen: React.ComponentType } @@ -68,18 +69,17 @@ export type HydratedRouteProps< } /** --- createQueryBridge() -------------------------------------------------------------------- */ -/** -i- Util to create a typed bridge between a fetcher and a route's props */ +/** -i- Util to create a typed bridge between a fetcher and a route's props */ // @ts-ignore export const createQueryBridge = < ARGS extends Record = Record, RES extends Record = Record, - Fetcher extends QueryFn = QueryFn, - FetcherArgs = Parameters[0], - FetcherData = Awaited['routeDataFetcher']>>, - FetcherToProps extends (fetcherData: Awaited>) => unknown = (fetcherData: Awaited>) => Awaited>, - ParamsToQueryKey extends (routeParams: Partial) => QueryKey = (routeParams: Partial) => QueryKey, - ParamsToQueryInput extends (routeParams: Partial) => FetcherArgs = (routeParams: Partial) => FetcherArgs + FetcherArgs = Parameters>[0], + FetcherData = Awaited>['routeDataFetcher']>>, + FetcherToProps extends (fetcherData: Awaited>>) => unknown = (fetcherData: Awaited>>) => Awaited>>, + ParamsToQueryKey extends (routeParams: ExtractRouteParams>[0]>) => QueryKey = (routeParams: ExtractRouteParams>[0]>) => QueryKey, + ParamsToQueryInput extends (routeParams: ExtractRouteParams>[0]>) => FetcherArgs = (routeParams: ExtractRouteParams>[0]>) => FetcherArgs >( - queryBridge: QueryBridgeConfig + queryBridge: QueryBridgeConfig, FetcherArgs, FetcherToProps, ParamsToQueryKey, ParamsToQueryInput> ) => { const fetcherDataToProps = queryBridge.fetcherDataToProps || ((fetcherData: FetcherData) => fetcherData) return { diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx b/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx index 9b42490..82f5f6a 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx @@ -8,12 +8,11 @@ import { useRouteParams } from './useRouteParams' export const UniversalRouteScreen = < ARGS extends Record = Record, RES extends Record = Record, - Fetcher extends QueryFn = QueryFn ->(props: UniversalRouteProps) => { +>(props: UniversalRouteProps) => { // Props const { params: routeParams, searchParams, queryBridge, routeScreen: RouteScreen, ...screenProps } = props const { routeParamsToQueryKey, routeParamsToQueryInput, routeDataFetcher } = queryBridge - const fetcherDataToProps = queryBridge.fetcherDataToProps || ((data: ReturnType) => data) + const fetcherDataToProps = queryBridge.fetcherDataToProps || ((data: Awaited>>) => data) // Hooks const expoRouterParams = useRouteParams(props) @@ -28,13 +27,13 @@ export const UniversalRouteScreen = < const queryConfig = { queryKey, queryFn: async () => await routeDataFetcher(queryInput), - initialData: queryBridge.initialData, + initialData: queryBridge.initialData as Awaited, } // -- Mobile -- const { data: fetcherData } = useQuery(queryConfig) - const routeDataProps = fetcherDataToProps(fetcherData) as Record + const routeDataProps = fetcherDataToProps(fetcherData as Awaited) as Record return ( { export const UniversalRouteScreen = < ARGS extends Record = Record, RES extends Record = Record, - Fetcher extends QueryFn = QueryFn ->(props: UniversalRouteProps) => { +>(props: UniversalRouteProps) => { // Props const { params: routeParams, searchParams, queryBridge, routeScreen: RouteScreen, ...screenProps } = props const { routeParamsToQueryKey, routeParamsToQueryInput, routeDataFetcher } = queryBridge - const fetcherDataToProps = queryBridge.fetcherDataToProps || ((data: ReturnType) => data) + const fetcherDataToProps = queryBridge.fetcherDataToProps || ((data: Awaited>>) => data) // Hooks const nextRouterParams = useRouteParams(props) @@ -84,7 +83,7 @@ export const UniversalRouteScreen = < }, refetchOnMount: shouldRefetchOnMount, }) - const routeDataProps = fetcherDataToProps(fetcherData as Awaited>) as Record // prettier-ignore + const routeDataProps = fetcherDataToProps(fetcherData as any) as Record // prettier-ignore return ( @@ -104,7 +103,7 @@ export const UniversalRouteScreen = < // -- Server -- - const fetcherData = use(queryClient.fetchQuery(queryConfig)) as Awaited> + const fetcherData = use(queryClient.fetchQuery(queryConfig)) as Awaited>> const routeDataProps = fetcherDataToProps(fetcherData) as Record const dehydratedState = dehydrate(queryClient) diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index 4583031..449a4f2 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -14,6 +14,6 @@ }, "scripts": { "build:schema": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./scripts/build-graphql-schema.ts", - "test": "bun test" + "test": "bun test --tsconfig-override tsconfig.test.json --verbose" } } diff --git a/packages/@green-stack-core/schemas/bridgedFetcher.ts b/packages/@green-stack-core/schemas/bridgedFetcher.ts new file mode 100644 index 0000000..eccbf87 --- /dev/null +++ b/packages/@green-stack-core/schemas/bridgedFetcher.ts @@ -0,0 +1,43 @@ +import type { TadaDocumentNode, VariablesOf, ResultOf } from 'gql.tada' +import { graphqlQuery } from '@app/core/graphql/graphqlQuery' + +/** --- bridgedFetcher() ----------------------------------------------------------------------- */ +/** -i- Helper to create a typed fetcher from config created by `createDataBridge()` */ +export const bridgedFetcher = < + ResolverName extends string, + BridgeQuery extends TadaDocumentNode | unknown, + CustomQuery extends TadaDocumentNode | null = null, + FinalQuery extends TadaDocumentNode | unknown = CustomQuery extends null ? BridgeQuery : CustomQuery, +>({ + allowedMethods, + getGraphqlQuery, + graphqlQuery: customQuery, +}: { + resolverName: ResolverName + getGraphqlQuery: () => BridgeQuery + graphqlQuery?: CustomQuery + allowedMethods?: ('GRAPHQL' | 'GET' | 'POST' | 'PUT' | 'DELETE')[] + [key: string]: any +}) => { + // Log errors if the bridge is incompatible + const hasGraphqlQuery = !!customQuery || !!getGraphqlQuery + if (!allowedMethods?.includes('GRAPHQL') || !hasGraphqlQuery) { + throw new Error('bridgedFetcher() with incompatible bridge. Please add "GRAPHQL" to the allowedMethods array in the DataBridge.') + } + // If a custom query is provided, use that instead + if (customQuery) { + // return customQuery as FinalQuery + const query = customQuery as unknown as Exclude + return (async (variables: VariablesOf>) => { + const result = await graphqlQuery(query, { variables }) + return result + }) as (variables: VariablesOf) => Promise> + } + // Otherwise, use the query from the bridge + const query = getGraphqlQuery() as unknown as Exclude + return (async (variables: VariablesOf>) => { + const result = await graphqlQuery(query, { variables }) + console.log({ result, query, variables }) + return result as ResultOf + }) as (variables: VariablesOf) => Promise> +} diff --git a/packages/@green-stack-core/schemas/createDataBridge.test.ts b/packages/@green-stack-core/schemas/createDataBridge.test.ts index 0fb13bf..0c122d2 100644 --- a/packages/@green-stack-core/schemas/createDataBridge.test.ts +++ b/packages/@green-stack-core/schemas/createDataBridge.test.ts @@ -2,6 +2,7 @@ import { expect, test } from 'bun:test' import { print } from 'graphql' import { z, schema } from './index' import { createDataBridge } from './createDataBridge' +import { bridgedFetcher } from './bridgedFetcher' const healtCheckBridge = createDataBridge({ resolverName: 'healthCheck', @@ -28,7 +29,7 @@ test("Bridges created by createDataBridge can build the graphql query from args expect(print(graphqlQuery)).toBe(expectedQuery) }) -// TODO: Figure out why using healthCheckQuery here causes "error: Unexpected typeof" from react-native? +// TODO: Figure out why using healthCheckQuery here causes "error: Unexpected typeof" from react-native? (Flow issues with Bun?) // test("Bridges created by createDataBridge can use a custom graphql query", async () => { // // Lazily import the query to avoid circular dependencies // const { healthCheckQuery } = await (import('@app/core/resolvers/healthCheck.query')) @@ -39,3 +40,10 @@ test("Bridges created by createDataBridge can build the graphql query from args // const graphqlQuery = bridgeWithCustomQuery.getGraphqlQuery() // expect(print(graphqlQuery)).not.toBe(expectedQuery) // }) + +// TODO: Figure out why using bridgedFetcher here causes "error: Unexpected typeof" from react-native? (Flow issues with Bun?) +// test("bridgedFetcher() can create a fetcher from a DataBridge", () => { +// expect(() => bridgedFetcher(healtCheckBridge)).not.toThrow() +// const fetcher = bridgedFetcher(healtCheckBridge) +// expect(fetcher).toBeInstanceOf(Function) +// }) diff --git a/packages/@green-stack-core/schemas/createDataBridge.ts b/packages/@green-stack-core/schemas/createDataBridge.ts index b88fcee..a74d3ef 100644 --- a/packages/@green-stack-core/schemas/createDataBridge.ts +++ b/packages/@green-stack-core/schemas/createDataBridge.ts @@ -1,7 +1,7 @@ import { TadaDocumentNode, graphql, VariablesOf, ResultOf } from 'gql.tada' import { print } from 'graphql' import { Metadata, z } from './index' -import { HintedKeys } from '../types' +import { lowercaseFirstChar } from '@green-stack/core/utils/stringUtils' /** --- renderGraphqlQuery() ------------------------------------------------------------------- */ /** -i- Accepts a resolverName, argsSchema and responseSchema and spits out a graphql query that stops at 3 levels (or a custom number) of depth */ @@ -24,10 +24,11 @@ export const renderGraphqlQuery = >, depth: number, fieldName?: string) => { @@ -93,8 +94,8 @@ export const createDataBridge = < ResShape extends z.ZodRawShape, CustomQuery extends TadaDocumentNode | null = null, ResolverArgsName extends `${ResolverName}Args` | HintedKeys = `${ResolverName}Args`, - DefaultQueryArgs = Record['_input']>, - DefaultQueryRes = Record['_output']>, + DefaultQueryArgs = PrettifySingleKeyRecord, z.ZodObject['_input']>>, + DefaultQueryRes = PrettifySingleKeyRecord['_output']>>, QueryArgs = CustomQuery extends null ? DefaultQueryArgs : VariablesOf, QueryRes = CustomQuery extends null ? DefaultQueryRes : ResultOf >({ diff --git a/packages/@green-stack-core/schemas/schemas.test.ts b/packages/@green-stack-core/schemas/schemas.test.ts index 6771db5..0a918c7 100644 --- a/packages/@green-stack-core/schemas/schemas.test.ts +++ b/packages/@green-stack-core/schemas/schemas.test.ts @@ -21,11 +21,8 @@ test("Schemas can be introspected", () => { }) }) -test("Schemas preserve the name assigned to them upon introspection", () => { +test("Schemas can be named and renamed", () => { expect(User.introspect().name).toBe('User') -}) - -test("Schemas can be renamed", () => { const User2 = User.nameSchema('User2') expect(User2.introspect().name).toBe('User2') expect(User.introspect().name).toBe('User') @@ -38,7 +35,7 @@ const Primitives = schema('Primitives', { date: z.date().default(new Date('2024-01-01')).example(new Date('2020-01-01')).describe('Date'), }) -test("Optionality, default & examples values persist in schema introspection", () => { +test("Optionality, defaults & example values persist in schema introspection", () => { const metadata = Primitives.introspect() as Metadata> // Optionality expect(metadata.schema?.str.isOptional).toEqual(true) @@ -59,6 +56,20 @@ test("Optionality, default & examples values persist in schema introspection", ( expect(metadata.schema?.date.exampleValue).toEqual(new Date('2020-01-01')) }) +test("Descriptions persist in introspection, no matter where they're defined", () => { + const DescriptionTest = schema('DescriptionTest', { + str: z.coerce.string().describe('Some string').nullish(), + num: z.coerce.number().default(1).describe('Some number'), + bln: z.coerce.boolean().example(true).describe('Some boolean').optional(), + date: z.coerce.date().describe('Some date').nullable(), + }) + const metadata = DescriptionTest.introspect() as Metadata> + expect(metadata.schema?.str.description).toEqual('Some string') + expect(metadata.schema?.num.description).toEqual('Some number') + expect(metadata.schema?.bln.description).toEqual('Some boolean') + expect(metadata.schema?.date.description).toEqual('Some date') +}) + /* --- Primitives ------------------------------------------------------------------------------ */ test("Primitives z.string(), z.number(), z.boolean() & z.date() work as expected", () => { diff --git a/packages/@green-stack-core/tsconfig.json b/packages/@green-stack-core/tsconfig.json index c66b46d..2c757a2 100644 --- a/packages/@green-stack-core/tsconfig.json +++ b/packages/@green-stack-core/tsconfig.json @@ -1,15 +1,12 @@ { "extends": "@app/core/tsconfig", - "compilerOptions": { - "types": ["bun-types"], - }, "include": [ "**/*.ts", "**/*.tsx", "../../features/**/*.ts", "../../features/**/*.tsx", "../../features/app-core/graphql-env.d.ts", - "types.ts" + "global.d.ts" ], "exclude": ["node_modules"] } diff --git a/packages/@green-stack-core/tsconfig.test.json b/packages/@green-stack-core/tsconfig.test.json new file mode 100644 index 0000000..742d4f8 --- /dev/null +++ b/packages/@green-stack-core/tsconfig.test.json @@ -0,0 +1,15 @@ +{ + "extends": "@app/core/tsconfig", + "compilerOptions": { + "types": ["bun-types"] + }, + "include": [ + "**/*.ts", + "**/*.tsx", + "../../features/**/*.ts", + "../../features/**/*.tsx", + "../../features/app-core/graphql-env.d.ts", + "global.d.ts" + ], + "exclude": ["node_modules"] +} diff --git a/packages/@green-stack-core/types.ts b/packages/@green-stack-core/types.ts deleted file mode 100644 index b04604d..0000000 --- a/packages/@green-stack-core/types.ts +++ /dev/null @@ -1,25 +0,0 @@ -export type Overwrite = Omit & U - -export type FlattenIfArray = T extends (infer R)[] ? R : T -export type Unpromisify = T extends Promise ? R : T - -export type HintedKeys = string & {} // eslint-disable-line @typescript-eslint/ban-types - -export type DeepPartial = { - [P in keyof T]?: T[P] extends Array - ? Array> - : T[P] extends ReadonlyArray - ? ReadonlyArray> - : T[P] extends object - ? DeepPartial - : T[P] -} - -export type Prettify = { - [K in keyof T]: T[K] extends Object ? Prettify : T[K] -} - -export type any$Todo = any -export type any$Unknown = any -export type any$FixMe = any -export type any$TooComplex = any diff --git a/packages/@green-stack-core/utils/stringUtils.ts b/packages/@green-stack-core/utils/stringUtils.ts new file mode 100644 index 0000000..0b26f6b --- /dev/null +++ b/packages/@green-stack-core/utils/stringUtils.ts @@ -0,0 +1,58 @@ +/* --- Case Utils ------------------------------------------------------------------------------ */ +export const snakeToCamel = (str: string) => str.replace(/(_\w)/g, (m) => m[1].toUpperCase()) +export const snakeToDash = (str: string) => str.replace(/_/g, '-') +export const dashToCamel = (str: string) => str.replace(/(-\w)/g, (m) => m[1].toUpperCase()) +export const dashToSnake = (str: string) => str.replace(/-/g, '_') +export const camelToSnake = (str: string) => str.replace(/[\w]([A-Z])/g, (m) => `${m[0]}_${m[1]}`).toLowerCase() // prettier-ignore +export const camelToDash = (str: string) => str.replace(/[\w]([A-Z])/g, (m) => `${m[0]}-${m[1]}`).toLowerCase() // prettier-ignore + +/** --- uppercaseFirstChar() ------------------------------------------------------------------- */ +/** -i- Uppercase the first character of a string */ +export const uppercaseFirstChar = (str: string) => str ? str.charAt(0).toUpperCase() + str.slice(1) : str // prettier-ignore + +/** --- lowercaseFirstChar() ------------------------------------------------------------------- */ +/** -i- Lowercase the first character of a string */ +export const lowercaseFirstChar = (str: string) => str ? str.charAt(0).toLowerCase() + str.slice(1) : str // prettier-ignore + +/** --- getAssetKey() -------------------------------------------------------------------------- */ +/** -i- Transform a file path like '/imgs/someImage.png' into an object key like 'ImgsSomeImagePng' */ +export const getAssetKey = (srcAttrPath: string) => { + const [ext, src] = srcAttrPath.split('.').reverse() + const srcParts = src.split('/') + const key = [...srcParts, ext].reduce((acc, part) => `${acc}${uppercaseFirstChar(part)}`, '') + return dashToCamel(key) +} + +/** --- replaceStringVars() -------------------------------------------------------------------- */ +/** -i- Replaces placeholders like {somevar} or [somevar] with values from injectables */ +export const replaceStringVars = ( + stringWithPlaceholders: string, + injectables: Record +) => { + let result = stringWithPlaceholders + Object.keys(injectables).forEach((key) => { + result = result.replace(new RegExp(`\\{${key}\\}`, 'g'), injectables[key].toString()) // prettier-ignore + result = result.replace(new RegExp(`\\[${key}\\]`, 'g'), injectables[key].toString()) // prettier-ignore + }) + return result +} + +/** --- findTargetString() --------------------------------------------------------------------- */ +/** -i- Finds a $target$ string inside another string */ +export const findTargetString = (source: string, search = '($target$)') => { + const [preTarget, postTarget] = search.split('$target$') + const parts = source.split(preTarget) + const target = parts.pop()?.split(postTarget)?.[0] + return target +} + +/** --- replaceMany() -------------------------------------------------------------------------- */ +/** -i- Replaces every string you pass as the 2nd argument with the string in the 3rd argument */ +export const replaceMany = (source: string, targets: string[], replacement: string) => { + const allTargets = targets.flatMap((target) => [uppercaseFirstChar(target), lowercaseFirstChar(target)]) // prettier-ignore + let result = source + allTargets.forEach((searchStr) => { + result = result.replace(new RegExp(searchStr, 'g'), replacement) + }) + return result +} From 07e620db0b4fcb2543f32be91dc4dbd278508e99 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Wed, 22 May 2024 17:56:31 +0200 Subject: [PATCH 019/126] feat: Add createResolver() util to build resolver from DataBridge --- apps/next/app/(main)/api/health/route.ts | 32 +--- features/@app-core/appConfig.ts | 6 +- features/@app-core/resolvers/healthCheck.ts | 47 +---- features/@app-core/routes/api/health/route.ts | 8 + package-lock.json | 6 + packages/@green-stack-core/package.json | 1 + .../schemas/createNextRouteHandler.ts | 20 +++ .../schemas/createResolver.ts | 150 ++++++++++++++++ packages/@green-stack-core/utils/apiUtils.ts | 161 ++++++++++++++++++ .../@green-stack-core/utils/commonUtils.ts | 16 ++ .../@green-stack-core/utils/numberUtils.ts | 48 ++++++ .../@green-stack-core/utils/objectUtils.ts | 30 ++++ .../@green-stack-core/utils/stringUtils.ts | 9 - 13 files changed, 449 insertions(+), 85 deletions(-) create mode 100644 features/@app-core/routes/api/health/route.ts create mode 100644 packages/@green-stack-core/schemas/createNextRouteHandler.ts create mode 100644 packages/@green-stack-core/schemas/createResolver.ts create mode 100644 packages/@green-stack-core/utils/apiUtils.ts create mode 100644 packages/@green-stack-core/utils/commonUtils.ts create mode 100644 packages/@green-stack-core/utils/numberUtils.ts create mode 100644 packages/@green-stack-core/utils/objectUtils.ts diff --git a/apps/next/app/(main)/api/health/route.ts b/apps/next/app/(main)/api/health/route.ts index 0dcf551..a71a7f9 100644 --- a/apps/next/app/(main)/api/health/route.ts +++ b/apps/next/app/(main)/api/health/route.ts @@ -1,31 +1 @@ -import { NextRequest, NextResponse } from 'next/server' -import { healthCheck } from '@app/core/resolvers/healthCheck' -import { createRequestContext } from '@app/core/middleware/createRequestContext' - -/* --- Types ----------------------------------------------------------------------------------- */ - -type NextRequestContext> = { - params: T -} - -/* --- Handlers -------------------------------------------------------------------------------- */ - -const handler = async (req: NextRequest, nextRequestContext: NextRequestContext) => { - // Input - const searchParams = req.nextUrl.searchParams - const echo = searchParams.get('echo') || undefined - - // Build Context - const context = await createRequestContext({ req, ...nextRequestContext }) - - // Run Resolver - const serverHealth = await healthCheck({ args: { echo }, context }) - - // Respond - return NextResponse.json(serverHealth) -} - -/* --- Methods --------------------------------------------------------------------------------- */ - -export const GET = handler - +export { GET, POST } from '@app/core/routes/api/health/route' diff --git a/features/@app-core/appConfig.ts b/features/@app-core/appConfig.ts index 1e70e6a..e6c1e71 100644 --- a/features/@app-core/appConfig.ts +++ b/features/@app-core/appConfig.ts @@ -21,16 +21,18 @@ export const fallbackBaseURL = localURL ? `http://${localURL}:3000` : '' /** --- appConfig ------------------------------------------------------------------------------ */ /** -i- App config variables powered by env vars universally, and including some expo contants config on mobile */ export const appConfig = { - // -i- Flags -i- + // - Flags - isLocal: isWebLocalhost || isExpoMobileLocal, isWebLocalhost, isExpoWebLocal, isExpoMobileLocal, - // -i- Server URLs -i- + // - Server URLs - baseURL: process.env.NEXT_PUBLIC_BASE_URL || process.env.EXPO_PUBLIC_BASE_URL || `${fallbackBaseURL}`, // prettier-ignore backendURL: process.env.NEXT_PUBLIC_BACKEND_URL || process.env.EXPO_PUBLIC_BACKEND_URL || `${fallbackBaseURL}`, // prettier-ignore apiURL: process.env.NEXT_PUBLIC_API_URL || process.env.EXPO_PUBLIC_API_URL || `${fallbackBaseURL}/api`, // prettier-ignore graphURL: process.env.NEXT_PUBLIC_GRAPH_URL || process.env.EXPO_PUBLIC_GRAPH_URL || `${fallbackBaseURL}/api/graphql`, // prettier-ignore + // - Secrets - + appSecret: process.env.APP_SECRET || process.env.APP_SECRET, } as const /* --- Debug ----------------------------------------------------------------------------------- */ diff --git a/features/@app-core/resolvers/healthCheck.ts b/features/@app-core/resolvers/healthCheck.ts index 79117dd..2762a3f 100644 --- a/features/@app-core/resolvers/healthCheck.ts +++ b/features/@app-core/resolvers/healthCheck.ts @@ -1,57 +1,18 @@ import * as OS from 'os' import type { NextRequest } from 'next/server' -import type { RequestContext } from '../middleware/createRequestContext' +import { createResolver } from '@green-stack/core/schemas/createResolver' import { appConfig } from '../appConfig' +import { healthCheckBridge } from './healthCheck.bridge' /* --- Constants ------------------------------------------------------------------------------- */ const ALIVE_SINCE = new Date() -/* --- Types ----------------------------------------------------------------------------------- */ - -export type HealthCheckArgs = { - echo?: string -} - -export type HealthCheckInputs = { - args: HealthCheckArgs, - context: RequestContext -} - -export type HealthCheckResponse = { - echo?: string - status: 'OK' - alive: boolean - kicking: boolean - now: string - aliveTime: number - aliveSince: string - serverTimezone: string - requestHost: string - requestProtocol: string - requestURL: string - baseURL: string - backendURL: string - apiURL: string - graphURL: string - port: number | null - debugPort: number | null - nodeVersion: string - v8Version: string - systemArch: string - systemPlatform: string - systemRelease: string - systemFreeMemory: number - systemTotalMemory: number - systemLoadAverage: number[] -} - /** --- healthCheck() -------------------------------------------------------------------------- */ /** -i- Check the health status of the server. Includes relevant urls, server time(zone), versions and more */ -export const healthCheck = async ({ args, context }: HealthCheckInputs) => { +export const healthCheck = createResolver(async ({ args, req }) => { // Inputs const { echo } = args - const { req } = context // Vars const now = new Date() @@ -100,4 +61,4 @@ export const healthCheck = async ({ args, context }: HealthCheckInputs) => { systemTotalMemory: OS.totalmem(), systemLoadAverage: OS.loadavg(), } -} +}, healthCheckBridge) diff --git a/features/@app-core/routes/api/health/route.ts b/features/@app-core/routes/api/health/route.ts new file mode 100644 index 0000000..38b14c5 --- /dev/null +++ b/features/@app-core/routes/api/health/route.ts @@ -0,0 +1,8 @@ +import { createNextRouteHandler } from '@green-stack/core/schemas/createNextRouteHandler' +import { healthCheck } from '../../../resolvers/healthCheck' + +/* --- Routes ---------------------------------------------------------------------------------- */ + +export const GET = createNextRouteHandler(healthCheck) + +export const POST = createNextRouteHandler(healthCheck) diff --git a/package-lock.json b/package-lock.json index 9f6d9db..79ef9ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8528,6 +8528,11 @@ "node": "*" } }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -17592,6 +17597,7 @@ "name": "@green-stack/core", "version": "0.0.1", "dependencies": { + "crypto-js": "^4.2.0", "zod": "^3.23.7" }, "devDependencies": { diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index 449a4f2..ffcd10f 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -4,6 +4,7 @@ "private": true, "type": "module", "dependencies": { + "crypto-js": "^4.2.0", "zod": "^3.23.7" }, "devDependencies": { diff --git a/packages/@green-stack-core/schemas/createNextRouteHandler.ts b/packages/@green-stack-core/schemas/createNextRouteHandler.ts new file mode 100644 index 0000000..e902063 --- /dev/null +++ b/packages/@green-stack-core/schemas/createNextRouteHandler.ts @@ -0,0 +1,20 @@ +import { NextResponse } from 'next/server' +import { getUrlParams } from '../utils/apiUtils' + +/** --- createNextRouteHandler() --------------------------------------------------------------- */ +/** -i- Codegen: Build next.js app dir api route from an aether resolver */ +export const createNextRouteHandler = (handler: any$Todo) => { + return async (req: Request, { params }: any$Todo) => { + // Parse query params + const query = getUrlParams(req.url) + // Parse body? + let args = { ...query, ...params } + if (['POST', 'PUT', 'PATCH'].includes(req.method)) { + const body = await req.json() + args = { ...query, ...body, ...params } + } + // Run handler & return response + const responseData = await handler({ req, params, args }) + return NextResponse.json(responseData) + } +} diff --git a/packages/@green-stack-core/schemas/createResolver.ts b/packages/@green-stack-core/schemas/createResolver.ts new file mode 100644 index 0000000..c519502 --- /dev/null +++ b/packages/@green-stack-core/schemas/createResolver.ts @@ -0,0 +1,150 @@ +import type { + NextApiRequest, + NextApiResponse, + GetServerSidePropsContext, + GetStaticPathsContext, + GetStaticPropsContext, +} from 'next' +import { getApiParams, getHeaderContext } from '../utils/apiUtils' +import { normalizeObjectProps } from '../utils/objectUtils' +import { z } from './index' + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type ResolverConfigType = { + logErrors?: boolean + respondErrors?: boolean + allowFail?: boolean + onError?: (err: any) => unknown | void + [key: string]: any + } + + export type ResolverInputType = { + req?: NextApiRequest | Request | GetServerSidePropsContext['req'] + res?: NextApiResponse | Response | GetServerSidePropsContext['res'] + nextSsrContext?: GetServerSidePropsContext + nextStaticPathsContext?: GetStaticPathsContext + nextStaticPropsContext?: GetStaticPropsContext + parent?: any + args?: ArgsInput + params?: { [key: string]: ArgsInput[keyof ArgsInput] | unknown } + context?: any + info?: any + cookies?: NextApiRequest['cookies'] + config?: ResolverConfigType + [key: string]: ArgsInput[keyof ArgsInput] | unknown + } + + export type ResolverExecutionParamsType = { + args: ArgsInput + handleError: (err: any, sendResponse?: boolean) => unknown | void + parseArgs: (args: ArgsInput) => ArgsInput + withDefaults: (response: ResInput) => ResOutput + context: Record + user?: Record | null + config: ResolverConfigType + req?: NextApiRequest | Request | GetServerSidePropsContext['req'] + res?: NextApiResponse | Response | GetServerSidePropsContext['res'] + } + +/** --- createResolver() ----------------------------------------------------------------------- */ +/** -i- Wrap a server side resolver function for easy use in both graphQL & rest endpoints + provide error handling */ +export const createResolver = < + ArgsOverride = null, // Args type override + ResOverride = null, // Response type override + ArgsShape extends z.ZodRawShape = any, + ResShape extends z.ZodRawShape = any, + ArgsInput = ArgsOverride extends null ? z.ZodObject['_input'] : ArgsOverride, + ResOutput = ResOverride extends null ? z.ZodObject['_output'] : ResOverride, + ResInput = ResOverride extends null ? z.ZodObject['_input'] : ResOverride, +>( + resolverFn: (ctx: ResolverExecutionParamsType) => Promise, + options: { + paramKeys?: string, + argsSchema: z.ZodObject, + responseSchema: z.ZodObject, + isMutation?: boolean + }, +) => { + // Extract options + const { paramKeys, argsSchema, responseSchema, isMutation } = options + // Build Resolver + const resolverWrapper = (ctx?: ResolverInputType): Promise => { + const { req, res, nextSsrContext, parent, args, context, info, cookies: _, ...resolverContext } = ctx || {} // prettier-ignore + const { logErrors, respondErrors, allowFail, onError, ...restParams } = resolverContext + // Collect params from all possible sources + const { body, method } = (req as NextApiRequest) || {} + const schemaParamKeys = Object.keys(argsSchema?.shape ?? {}) + const apiParamKeys = [ctx?.paramKeys, paramKeys || schemaParamKeys].flat().filter(Boolean).join(' ') // prettier-ignore + const query = { ...nextSsrContext?.query, ...(req as NextApiRequest)?.query } + const params = { ...restParams, ...nextSsrContext?.params, ...context, ...ctx?.params } // @ts-ignore + const cookies = nextSsrContext?.req?.cookies || req?.cookies || ctx?.cookies + const relatedArgs = apiParamKeys ? getApiParams(apiParamKeys, { query, params, body, args, context }) : {} // prettier-ignore + const normalizedArgs = normalizeObjectProps(relatedArgs) + // Build config from all possible sources + const errorConfig = { logErrors, respondErrors, onError, allowFail } + const config = { + ...restParams, + ...context, + ...errorConfig, + cookies, + method, + parent, + info, + ...ctx?.config, + } + // Context normalization + const headerContext = getHeaderContext(req) + const fullContext = { ...headerContext, ...config } // Always override header context with config + const user = fullContext?.user as Record | undefined | null + // Error handling + const handleError = (err: any$FixMe, sendResponse = false) => { + const isRichError = typeof err === 'object' && !!err.errors + const errorObj = isRichError ? err : { errors: [err] } + const { code = 500 } = errorObj + // Log errors? + if (config?.logErrors) console.error(errorObj) + // Build custom error? + if (typeof config?.onError === 'function' && config.allowFail) { + config.onError(errorObj) + } else if (typeof config?.onError === 'function') { + return config.onError(errorObj) + } + // Allow errors? + if (config.allowFail || config.onError === 'return') { + return { success: false, ...errorObj } + } + // Respond? + if (!!res && sendResponse && !config.allowFail) { + return (res as NextApiResponse).status(code).json(errorObj) + } else { + throw new Error(isRichError ? errorObj : err) + } + } + // Validation helpers + const parseArgs = (args: ArgsInput) => argsSchema.parse(args) as ArgsInput + const withDefaults = (response: ResInput) => { + return responseSchema.applyDefaults(response as Record) as ResOutput + } + // Return resolver + return resolverFn({ + req, + res, + args: normalizedArgs as ArgsInput, + user, + context: fullContext, + config, + handleError, + parseArgs, + withDefaults, + }) as unknown as Promise + } + // Return Resolver + return Object.assign(resolverWrapper, { + argSchema: argsSchema, + resSchema: responseSchema, + _input: undefined as ArgsInput, + _output: undefined as ResOutput, + isMutation, + }) +} diff --git a/packages/@green-stack-core/utils/apiUtils.ts b/packages/@green-stack-core/utils/apiUtils.ts new file mode 100644 index 0000000..f4a24c1 --- /dev/null +++ b/packages/@green-stack-core/utils/apiUtils.ts @@ -0,0 +1,161 @@ +import type { NextApiRequest, NextApiResponse, GetServerSidePropsContext } from 'next' +import type { NextRequest } from 'next/server' // @ts-ignore +import CryptoJS from 'crypto-js' +import { appConfig } from '@app/core/appConfig' +import { normalizeObjectProps } from './objectUtils' +import { isEmpty } from './commonUtils' + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type APISources = { + query?: any + body?: any + cookies?: any + params?: any + args?: any + context?: any +} + +/** --- validateJSON() ------------------------------------------------------------------------- */ +/** -i- Checks whether a json string is valid */ +export const validateJSON = (maybeJSON: string) => { + try { + JSON.parse(maybeJSON) + return true + } catch (e) { + return false + } +} + +/** --- parseIfJSON() -------------------------------------------------------------------------- */ +/** -i- Attempt to parse a string if it's valid JSON */ +export const parseIfJSON = (maybeJSON: string | any) => { + return validateJSON(maybeJSON) ? JSON.parse(maybeJSON) : maybeJSON +} + +/** --- getApiParam() -------------------------------------------------------------------------- */ +/** -i- Gets a specific property by key from supplied (optional) API sources */ +export const getApiParam = (key: string, apiSources: APISources) => { + const { query, params, body, args, context } = apiSources + const [result] = [params, query, body, args, context].map((src) => src?.[key]).filter(Boolean) + return result +} + +/** --- getApiParams() ------------------------------------------------------------------------- */ +/** -i- Get multiple api params from supplied API sources */ +export const getApiParams = (keys: string | string[], apiSources: APISources) => { + const paramKeys = typeof keys === 'string' ? keys.split(' ') : keys + return paramKeys.reduce((apiParams, paramKey) => { + return { ...apiParams, [paramKey]: getApiParam(paramKey, apiSources) } + }, {}) as { [key: string]: unknown } +} + +/** --- getUrlParams() ------------------------------------------------------------------------- */ +/** -i- Extract the query parameters from a url */ +export const getUrlParams = (url: string) => { + const queryString = url.split('?')[1] || '' + const urlSearchParams = new URLSearchParams(queryString) + return normalizeObjectProps(Object.fromEntries(urlSearchParams)) +} + +/** --- fireGetAndForget() --------------------------------------------------------------------- */ +/** -i- Fires a GET request & ignores whether it succeeds or not (for e.g. webhooks) + ** https://stackoverflow.com/a/63594903/8789673 */ +export const fireGetAndForget = (url: string, config?: RequestInit) => { + try { + // Fire request + fetch(url, config).catch(Boolean); + // Resolve without waiting for response + return true; + } catch (err) { + // Do nothing to avoid unhandled promise rejections + } +}; + +/** --- firePostAndForget() -------------------------------------------------------------------- */ +/** -i- Fires a POST request & ignores whether it succeeds or not (for e.g. webhooks) + ** https://stackoverflow.com/a/63594903/8789673 */ +export const firePostAndForget = (url: string, data: unknown, config?: RequestInit) => { + try { + // Fire request + fetch(url, { + method: 'POST', + body: JSON.stringify(data), + ...config + }).catch(Boolean); + // Resolve without waiting for response + return true; + } catch (err) { + // Do nothing to avoid unhandled promise rejections + } +} + +/** --- createHmac() --------------------------------------------------------------------------- */ +/** -i- Create a cryptographical signature based on the data your pass and the chosen alogrithm */ +export const createHmac = (data: string, method: 'md5' | 'sha256' = 'sha256'): string => { + if (method === 'md5') return CryptoJS.HmacSHA256(data, method).toString(CryptoJS.enc.Hex) + return CryptoJS.HmacSHA256(data, method).toString(CryptoJS.enc.Hex) +} + +/** --- createMiddlewareHeaderContext() -------------------------------------------------------- */ +/** -i- Use to add serialisable context data to your request header so you can use it in resolvers (signed based on APP_SECRET) */ +export const createMiddlewareHeaderContext = async ( + req: NextRequest, + data: Record = {}, + extraHeaders: Record = {} + ) => { + // Warn and abort early when we won't be able to add and sign the data + const APP_SECRET = appConfig.appSecret + if (!APP_SECRET) console.warn('APP_SECRET variable is required to create header context, skipping context generation until it is set') // prettier-ignore + if (!req?.headers) throw new Error('Request headers are required to create header context, skipping context generation until they are available') // prettier-ignore + // Set all extra headers first + const requestHeaders = new Headers(req.headers) + Object.keys(extraHeaders).forEach((key) => { + requestHeaders.set(key, extraHeaders[key]) + }) + // Serialise context data and add signature? + const shouldAddData = !!APP_SECRET && !isEmpty(data) + if (shouldAddData) { + const serialisedData = JSON.stringify(data) + const signableString = `${serialisedData}:${APP_SECRET}` + const signature = createHmac(signableString, 'md5') + const dataWithSignature = { ...data, signature } + const signedHeaderContext = JSON.stringify(dataWithSignature) + requestHeaders.set('context', signedHeaderContext) + } + // Return updated headers + return requestHeaders +} + +/** --- getHeaderContext() --------------------------------------------------------------------- */ +/** -i- Use in resolvers to extract header context */ +export const getHeaderContext = ( + req?: NextApiRequest | Request | GetServerSidePropsContext['req'] +): Record => { + try { + // Check if there even is context in the headers to begin with + const requestContext = (req as Request)?.headers?.get?.('context') + const apiRequestContext = (req as NextApiRequest)?.headers?.context // @ts-ignore + const gqlRequestContext = (req?.req as Request)?.headers?.get?.('context') + const headerContextRaw = requestContext || apiRequestContext || gqlRequestContext + if (!headerContextRaw) return {} + // Parse context + const headerContextJSON = Array.isArray(headerContextRaw) ? headerContextRaw[0] : headerContextRaw // prettier-ignore + const headerContext = JSON.parse(headerContextJSON) + if (isEmpty(headerContext)) return {} + // Skip if there is no APP_SECRET + const APP_SECRET = appConfig.appSecret + if (!APP_SECRET) return headerContext + // Check if the signature is valid + const { signature, ...contextData } = headerContext + const serialisedData = JSON.stringify(contextData) + const signableString = `${serialisedData}:${APP_SECRET}` + const expectedSignature = createHmac(signableString, 'md5') + if (signature !== expectedSignature) return {} + // Return validated context + return contextData + } catch (err) { + console.error(err) + return {} + } +} diff --git a/packages/@green-stack-core/utils/commonUtils.ts b/packages/@green-stack-core/utils/commonUtils.ts new file mode 100644 index 0000000..9c01afc --- /dev/null +++ b/packages/@green-stack-core/utils/commonUtils.ts @@ -0,0 +1,16 @@ + +/* --- Types ----------------------------------------------------------------------------------- */ + +type ObjectType = { [key: string]: T } + +/** --- isEmpty() ------------------------------------------------------------------------------ */ +/** -i- checks for null, undefined & empty strings, objects or arrays */ +export const isEmpty = ( + val?: string | any[] | ObjectType | null, + failOnEmptyStrings = true +): boolean => { + if (val == null) return true // treat null & undefined as "empty" + if (typeof val === 'string' && !val.length && failOnEmptyStrings) return true + if (typeof val === 'object' && !Object.values(val).length) return true // objects & arrays + return false // not empty +} diff --git a/packages/@green-stack-core/utils/numberUtils.ts b/packages/@green-stack-core/utils/numberUtils.ts new file mode 100644 index 0000000..74909ff --- /dev/null +++ b/packages/@green-stack-core/utils/numberUtils.ts @@ -0,0 +1,48 @@ +// Utils +const { round, ceil, floor, random } = Math + +/** --- randomInt() ---------------------------------------------------------------------------- */ +/** -i- Generates a random integer between a max & min range */ +export const randomInt = (max: number, min = 0) => { + const minInt = ceil(min) + const maxInt = floor(max) + return floor(random() * (maxInt - minInt) + minInt) +} + +/** --- roundTo() ------------------------------------------------------------------------------ */ +/** -i- Uses scientific string notation to round numbers (up or down) to specific decimals + ** Can pass a specific math rounding function as third arg like `ceil()` or `floor()` */ +export const roundTo = (value: number | string, decimals = 0, roundFn: any = round) => { + return +`${roundFn(`${value}e+${decimals}`)}e-${decimals}` +} + +export const roundUpTo = (value: number | string, decimals = 0) => roundTo(value, decimals, ceil) +export const roundDownTo = (value: number | string, decimals = 0) => roundTo(value, decimals, floor) + +/** --- hasLeadingZeroes() --------------------------------------------------------------------- */ +/** -i- Detect leading zeroes in "numbers" */ +export const hasLeadingZeroes = (numString: string | number): boolean => { + return Number(numString).toString() !== numString +} + +/** --- isValidNumber() ------------------------------------------------------------------------ */ +/** -i- check if a string is a valid number, excluding leading zeroes + ** Allowed: numbers & number strings like `"0"`, `"1"`, `"250"`, `"0.123"` + ** Catches: non numbers & number string with leading zeroes like `"0568"` + ** JavaScript ¯\_(ツ)_/¯ */ +export const isValidNumber = (numCandidate: any): boolean => { + if (typeof numCandidate === 'number') return true + const isNonNumberFalsy = ![true, false, null].includes(numCandidate as unknown as boolean) + const isNotArray = !Array.isArray(numCandidate) + const isNotNaN = !Number.isNaN(+numCandidate) + const doesntHaveLeadingZeroes = !hasLeadingZeroes(numCandidate) + const canBeOperatedOn = isNonNumberFalsy && isNotArray && isNotNaN && doesntHaveLeadingZeroes + return canBeOperatedOn && typeof +numCandidate === 'number' +} + +/** --- parseIfValidNumber() ------------------------------------------------------------------- */ +/** -i- checks if a variable can be parsed as a valid number, and then parses that number */ +export const parseIfValidNumber = (numCandidate: any): number | undefined => { + if (isValidNumber(numCandidate)) return +numCandidate + return undefined +} diff --git a/packages/@green-stack-core/utils/objectUtils.ts b/packages/@green-stack-core/utils/objectUtils.ts new file mode 100644 index 0000000..f6b0e97 --- /dev/null +++ b/packages/@green-stack-core/utils/objectUtils.ts @@ -0,0 +1,30 @@ +import { isValidNumber } from './numberUtils' + +/* --- Types ----------------------------------------------------------------------------------- */ + +type ObjectType = Record + +/** --- normalizeObjectProps() ----------------------------------------------------------------- */ +/** -i- Parses object properties like "1" to 1, and "true" to true */ +export const normalizeObjectProps = ( + objToValidate: ObjectType = {}, + ignoredKeys: string[] = [] + ): ObjectType => { + const obj: typeof objToValidate = {} + Object.keys(objToValidate).forEach((pKey) => { + let val = objToValidate[pKey] + // Normalize 'true' / 'false' to their boolean values + if (['true', 'false'].includes(val)) val = JSON.parse(val) + // Normalize stringified numbers to actual number + else val = Array.isArray(val) || !isValidNumber(val) ? val : +val + // In case of nested objects, use recursion + if (typeof val === 'object' && val !== null && !Array.isArray(val)) { + val = normalizeObjectProps(val, ignoredKeys) + } + // Add value under same key to obj + obj[pKey] = ignoredKeys.includes(pKey) ? objToValidate[pKey] : val + }) + return obj + } + + diff --git a/packages/@green-stack-core/utils/stringUtils.ts b/packages/@green-stack-core/utils/stringUtils.ts index 0b26f6b..0dc5a33 100644 --- a/packages/@green-stack-core/utils/stringUtils.ts +++ b/packages/@green-stack-core/utils/stringUtils.ts @@ -14,15 +14,6 @@ export const uppercaseFirstChar = (str: string) => str ? str.charAt(0).toUpperCa /** -i- Lowercase the first character of a string */ export const lowercaseFirstChar = (str: string) => str ? str.charAt(0).toLowerCase() + str.slice(1) : str // prettier-ignore -/** --- getAssetKey() -------------------------------------------------------------------------- */ -/** -i- Transform a file path like '/imgs/someImage.png' into an object key like 'ImgsSomeImagePng' */ -export const getAssetKey = (srcAttrPath: string) => { - const [ext, src] = srcAttrPath.split('.').reverse() - const srcParts = src.split('/') - const key = [...srcParts, ext].reduce((acc, part) => `${acc}${uppercaseFirstChar(part)}`, '') - return dashToCamel(key) -} - /** --- replaceStringVars() -------------------------------------------------------------------- */ /** -i- Replaces placeholders like {somevar} or [somevar] with values from injectables */ export const replaceStringVars = ( From 85e00a911319b91dd49393a2493129bc4ba3c2ff Mon Sep 17 00:00:00 2001 From: codinsonn Date: Thu, 23 May 2024 14:17:36 +0200 Subject: [PATCH 020/126] feat: Add JSON scalar and request context to GraphQL --- apps/next/.env.example | 2 ++ apps/next/middleware.ts | 21 ++++++++++++-- features/@app-core/graphql-env.d.ts | 7 +++-- features/@app-core/graphql/graphql.ts | 13 +++++++++ .../@app-core/graphql/graphqlQuery.web.ts | 3 +- features/@app-core/graphql/graphqlServer.ts | 4 ++- features/@app-core/graphql/schema.graphql | 10 ++++++- features/@app-core/graphql/schema.ts | 5 ++++ features/@app-core/graphql/typeDefs.ts | 12 ++++++-- features/@app-core/package.json | 1 + .../@app-core/resolvers/healthCheck.bridge.ts | 4 ++- .../resolvers/healthCheck.fetcher.ts | 2 +- .../@app-core/resolvers/healthCheck.graphql | 4 ++- .../@app-core/resolvers/healthCheck.query.ts | 8 ++++-- features/@app-core/resolvers/healthCheck.ts | 9 ++++-- features/@app-core/screens/HomeScreen.tsx | 4 +-- package-lock.json | 9 ++++++ packages/@green-stack-core/global.d.ts | 10 +++++-- .../UniversalRouteScreen.helpers.ts | 2 +- .../@green-stack-core/schemas/schemas.test.ts | 28 +++++++++++++++++++ .../scripts/build-graphql-schema.ts | 3 ++ packages/@green-stack-core/utils/apiUtils.ts | 4 +-- .../@green-stack-core/utils/commonUtils.ts | 21 ++++++++++++-- turbo.json | 2 +- 24 files changed, 161 insertions(+), 27 deletions(-) create mode 100644 features/@app-core/graphql/graphql.ts diff --git a/apps/next/.env.example b/apps/next/.env.example index 64eaca3..6aaa72b 100644 --- a/apps/next/.env.example +++ b/apps/next/.env.example @@ -17,6 +17,8 @@ ## -i- Env vars that should always be present & the same locally, independent of the simulated environment ## --------------------------------------------------------------------------------------------- */ +APP_SECRET="your-secret-here" # used for signing header context, generate a random string + NEXT_PUBLIC_BASE_URL=http://localhost:3000 NEXT_PUBLIC_BACKEND_URL=http://localhost:3000 NEXT_PUBLIC_API_URL=http://localhost:3000/api diff --git a/apps/next/middleware.ts b/apps/next/middleware.ts index aeb8098..6771d13 100644 --- a/apps/next/middleware.ts +++ b/apps/next/middleware.ts @@ -1,11 +1,27 @@ import { NextRequest, NextResponse } from 'next/server' +import { createMiddlewareHeaderContext } from '@green-stack/core/utils/apiUtils' /* --- Middleware ------------------------------------------------------------------------------ */ // -i- https://nextjs.org/docs/app/api-reference/functions/next-request export async function middleware(req: NextRequest) { + // Create the request context header (to pass things like auth, user, etc. to the API) + const headerContext = { + test: "Hello Middleware" + // TODO: add any JSON serializable data you'd like to pass to the APIs here + } + + // Add any headers you'd like to always be present on requests that passed through this middleware + const extraHeaders = { + // e.g. 'x-api-key': appConfig.apiKey + } + // Execute the request handler (and pass the request context header) - const res = NextResponse.next() + const res = NextResponse.next({ + request: { + headers: await createMiddlewareHeaderContext(req, headerContext, extraHeaders), + }, + }) // Allow CORS for /api routes if (req.nextUrl.pathname.startsWith('/api')) { @@ -14,9 +30,10 @@ export async function middleware(req: NextRequest) { res.headers.append('Access-Control-Allow-Headers', 'Content-Type') } + // Continue by resolving the request return res } export const config = { - matcher: ['/((?!.+\\.[\\w]+$|_next).*)', '/', '/(api|trpc)(.*)'], + matcher: ['/((?!.+\\.[\\w]+$|_next).*)', '/', '/(api|graphql|trpc)(.*)'], } diff --git a/features/@app-core/graphql-env.d.ts b/features/@app-core/graphql-env.d.ts index 9b23bef..d48c33b 100644 --- a/features/@app-core/graphql-env.d.ts +++ b/features/@app-core/graphql-env.d.ts @@ -16,10 +16,13 @@ export type introspection = { subscription: never; types: { 'Boolean': unknown; + 'Date': unknown; 'Float': unknown; - 'HealthCheckArgs': { kind: 'INPUT_OBJECT'; name: 'HealthCheckArgs'; isOneOf: false; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; - 'HealthCheckData': { kind: 'OBJECT'; name: 'HealthCheckData'; fields: { 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'backendURL': { name: 'backendURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'graphURL': { name: 'graphURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; + 'HealthCheckArgs': { kind: 'INPUT_OBJECT'; name: 'HealthCheckArgs'; isOneOf: false; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'showContext'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }]; }; + 'HealthCheckData': { kind: 'OBJECT'; name: 'HealthCheckData'; fields: { 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'backendURL': { name: 'backendURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'context': { name: 'context'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'graphURL': { name: 'graphURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; 'Int': unknown; + 'JSON': unknown; + 'JSONObject': unknown; 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'healthCheck': { name: 'healthCheck'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'HealthCheckData'; ofType: null; }; } }; }; }; 'String': unknown; }; diff --git a/features/@app-core/graphql/graphql.ts b/features/@app-core/graphql/graphql.ts new file mode 100644 index 0000000..66f0cc7 --- /dev/null +++ b/features/@app-core/graphql/graphql.ts @@ -0,0 +1,13 @@ +import { initGraphQLTada } from 'gql.tada' +import { introspection } from '../graphql-env' + +/** --- graphql() ------------------------------------------------------------------------------ */ +/** -i- Custom graphql() function with our scalars embedded in them */ +export const graphql = initGraphQLTada<{ + introspection: introspection + scalars: { + JSON: Record + JSONObject: ObjectType + Date: Date + } +}>() diff --git a/features/@app-core/graphql/graphqlQuery.web.ts b/features/@app-core/graphql/graphqlQuery.web.ts index e6bbc52..1b3ae7a 100644 --- a/features/@app-core/graphql/graphqlQuery.web.ts +++ b/features/@app-core/graphql/graphqlQuery.web.ts @@ -1,5 +1,6 @@ import { print } from 'graphql/language/printer' import type { TadaDocumentNode, ResultOf } from 'gql.tada' +import { warnOnce } from '@green-stack/core/utils/commonUtils' import type { QueryConfig } from './graphqlQuery.types' import { appConfig } from '../appConfig' @@ -28,7 +29,7 @@ export const graphqlQuery = async >( import('./schema'), ]) // 💡 You might want to build the server-only request context here - console.log('-i- graphqlQuery() called serverside without request context set up.') + warnOnce('-i- graphqlQuery() called serverside without request context set up.') // Execute query with the executable schema const { data } = await graphql({ schema: executableSchema, diff --git a/features/@app-core/graphql/graphqlServer.ts b/features/@app-core/graphql/graphqlServer.ts index 456571f..c136bbc 100644 --- a/features/@app-core/graphql/graphqlServer.ts +++ b/features/@app-core/graphql/graphqlServer.ts @@ -3,6 +3,7 @@ import type { NextRequest } from 'next/server' import { startServerAndCreateNextHandler } from '@as-integrations/next' import { createRequestContext } from '../middleware/createRequestContext' import { schemaBundle } from './schema' +import { getHeaderContext } from '@green-stack/core/utils/apiUtils' /* --- Apollo Server --------------------------------------------------------------------------- */ @@ -17,7 +18,8 @@ export const graphqlServer = new ApolloServer({ export const createGraphQLServerHandler = () => { return startServerAndCreateNextHandler(graphqlServer, { context: async (req: NextRequest) => { - return await createRequestContext({ req }) + const headerContext = getHeaderContext(req) + return await createRequestContext({ req, ...headerContext }) }, }) } diff --git a/features/@app-core/graphql/schema.graphql b/features/@app-core/graphql/schema.graphql index e2ea09b..021b62e 100644 --- a/features/@app-core/graphql/schema.graphql +++ b/features/@app-core/graphql/schema.graphql @@ -1,11 +1,18 @@ ## -i- This file was generated by the 'build-graphql-schema' script. Don't modify it manually. +scalar Date + +scalar JSON + +scalar JSONObject + type Query { healthCheck(args: HealthCheckArgs): HealthCheckData! } input HealthCheckArgs { echo: String + showContext: Boolean } type HealthCheckData { @@ -15,7 +22,7 @@ type HealthCheckData { kicking: Boolean! now: String! aliveTime: Float! - aliveSince: String! + aliveSince: Date! serverTimezone: String! requestHost: String requestProtocol: String @@ -34,6 +41,7 @@ type HealthCheckData { systemFreeMemory: Float systemTotalMemory: Float systemLoadAverage: [Float] + context: JSON } schema { diff --git a/features/@app-core/graphql/schema.ts b/features/@app-core/graphql/schema.ts index 2d2374a..67a16db 100644 --- a/features/@app-core/graphql/schema.ts +++ b/features/@app-core/graphql/schema.ts @@ -1,5 +1,6 @@ import { mergeResolvers } from '@graphql-tools/merge' import { makeExecutableSchema } from '@graphql-tools/schema' +import { GraphQLJSON, GraphQLJSONObject } from 'graphql-type-json' import { gql } from 'graphql-tag' import type { RequestContext } from '../middleware/createRequestContext' import { typeDefs } from './typeDefs' @@ -31,6 +32,10 @@ const customResolvers = { export const createRootResolver = () => mergeResolvers([ customResolvers, /* other resolvers? */ + { + JSON: GraphQLJSON, + JSONObject: GraphQLJSONObject, + } ]) /* --- Schema ---------------------------------------------------------------------------------- */ diff --git a/features/@app-core/graphql/typeDefs.ts b/features/@app-core/graphql/typeDefs.ts index 49acf0e..ac60971 100644 --- a/features/@app-core/graphql/typeDefs.ts +++ b/features/@app-core/graphql/typeDefs.ts @@ -1,11 +1,18 @@ // -i- This file was generated by the 'build-graphql-schema' script. Don't modify it manually. -export const typeDefs = `type Query { +export const typeDefs = `scalar Date + +scalar JSON + +scalar JSONObject + +type Query { healthCheck(args: HealthCheckArgs): HealthCheckData! } input HealthCheckArgs { echo: String + showContext: Boolean } type HealthCheckData { @@ -15,7 +22,7 @@ type HealthCheckData { kicking: Boolean! now: String! aliveTime: Float! - aliveSince: String! + aliveSince: Date! serverTimezone: String! requestHost: String requestProtocol: String @@ -34,6 +41,7 @@ type HealthCheckData { systemFreeMemory: Float systemTotalMemory: Float systemLoadAverage: [Float] + context: JSON } schema { diff --git a/features/@app-core/package.json b/features/@app-core/package.json index 5a01ba5..1dbc15b 100644 --- a/features/@app-core/package.json +++ b/features/@app-core/package.json @@ -8,6 +8,7 @@ "@tanstack/react-query": "^5.29.2", "gql.tada": "^1.4.3", "graphql-tag": "^2.12.6", + "graphql-type-json": "^0.3.2", "nativewind": "^2.0.11" }, "devDependencies": { diff --git a/features/@app-core/resolvers/healthCheck.bridge.ts b/features/@app-core/resolvers/healthCheck.bridge.ts index 859cdf5..1a8b56b 100644 --- a/features/@app-core/resolvers/healthCheck.bridge.ts +++ b/features/@app-core/resolvers/healthCheck.bridge.ts @@ -4,7 +4,8 @@ import { createDataBridge } from '@green-stack/core/schemas/createDataBridge' /* --- Schemas --------------------------------------------------------------------------------- */ export const HealthCheckArgs = schema('HealthCheckArgs', { - echo: z.string().default('Hello World'), + echo: z.string().default('Hello World'), + showContext: z.boolean().default(false), }) export const HealthCheckResponse = schema('HealthCheckResponse', { @@ -33,6 +34,7 @@ export const HealthCheckResponse = schema('HealthCheckResponse', { systemFreeMemory: z.number(), systemTotalMemory: z.number(), systemLoadAverage: z.array(z.number()), + context: z.record(z.string(), z.unknown()).nullish(), }) /* --- Type Aliases ---------------------------------------------------------------------------- */ diff --git a/features/@app-core/resolvers/healthCheck.fetcher.ts b/features/@app-core/resolvers/healthCheck.fetcher.ts index 60f6fae..74c47a0 100644 --- a/features/@app-core/resolvers/healthCheck.fetcher.ts +++ b/features/@app-core/resolvers/healthCheck.fetcher.ts @@ -1,4 +1,4 @@ -import type { HealthCheckArgs, HealthCheckResponse } from './healthCheck' +import type { HealthCheckArgs, HealthCheckResponse } from './healthCheck.bridge' import { appConfig } from '../appConfig' /** --- healthCheckFetcher() ------------------------------------------------------------------- */ diff --git a/features/@app-core/resolvers/healthCheck.graphql b/features/@app-core/resolvers/healthCheck.graphql index b3a0123..e91b713 100644 --- a/features/@app-core/resolvers/healthCheck.graphql +++ b/features/@app-core/resolvers/healthCheck.graphql @@ -4,6 +4,7 @@ type Query { input HealthCheckArgs { echo: String + showContext: Boolean } type HealthCheckData { @@ -13,7 +14,7 @@ type HealthCheckData { kicking: Boolean! now: String! aliveTime: Float! - aliveSince: String! + aliveSince: Date! serverTimezone: String! requestHost: String requestProtocol: String @@ -32,4 +33,5 @@ type HealthCheckData { systemFreeMemory: Float systemTotalMemory: Float systemLoadAverage: [Float] + context: JSON } diff --git a/features/@app-core/resolvers/healthCheck.query.ts b/features/@app-core/resolvers/healthCheck.query.ts index 9f8a3e6..0ec1377 100644 --- a/features/@app-core/resolvers/healthCheck.query.ts +++ b/features/@app-core/resolvers/healthCheck.query.ts @@ -1,6 +1,7 @@ -import { ResultOf, VariablesOf, graphql } from 'gql.tada' +import { ResultOf, VariablesOf } from 'gql.tada' import { bridgedFetcher } from '@green-stack/core/schemas/bridgedFetcher' import { healthCheckBridge } from './healthCheck.bridge' +import { graphql } from '../graphql/graphql' /* --- Query ----------------------------------------------------------------------------------- */ @@ -32,15 +33,16 @@ export const healthCheckQuery = graphql(` systemFreeMemory systemTotalMemory systemLoadAverage + context } } `) /* --- Types ----------------------------------------------------------------------------------- */ -export type HealthCheckQueryVariables = VariablesOf +export type HealthCheckQueryInput = VariablesOf -export type HealthCheckQueryResult = ResultOf +export type HealthCheckQueryOutput = ResultOf /* --- healthCheckFetcher() -------------------------------------------------------------------- */ diff --git a/features/@app-core/resolvers/healthCheck.ts b/features/@app-core/resolvers/healthCheck.ts index 2762a3f..c847ab1 100644 --- a/features/@app-core/resolvers/healthCheck.ts +++ b/features/@app-core/resolvers/healthCheck.ts @@ -10,9 +10,12 @@ const ALIVE_SINCE = new Date() /** --- healthCheck() -------------------------------------------------------------------------- */ /** -i- Check the health status of the server. Includes relevant urls, server time(zone), versions and more */ -export const healthCheck = createResolver(async ({ args, req }) => { +export const healthCheck = createResolver(async ({ args, req, context }) => { // Inputs - const { echo } = args + const { echo, showContext } = args + + // Context + const { req: _, res: __, ...headerContext } = context // Vars const now = new Date() @@ -60,5 +63,7 @@ export const healthCheck = createResolver(async ({ args, req }) => { systemFreeMemory: OS.freemem(), systemTotalMemory: OS.totalmem(), systemLoadAverage: OS.loadavg(), + // CONTEXT + context: showContext ? headerContext : undefined, } }, healthCheckBridge) diff --git a/features/@app-core/screens/HomeScreen.tsx b/features/@app-core/screens/HomeScreen.tsx index d5e49dd..98c4d8b 100644 --- a/features/@app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/HomeScreen.tsx @@ -23,8 +23,8 @@ const HomeScreen = (props: HydratedRouteProps) => { return ( -

Expo + Next.js app routing 🚀

-

Open HomeScreen.tsx in features/@app-core/screens to start working on your app

+

Full-Product, Universal App with the GREEN-stack 🚀

+

Open HomeScreen.tsx in features/@app-core/screens to start working on your app

Test navigation diff --git a/package-lock.json b/package-lock.json index 79ef9ab..401ffbd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -103,6 +103,7 @@ "@tanstack/react-query": "^5.29.2", "gql.tada": "^1.4.3", "graphql-tag": "^2.12.6", + "graphql-type-json": "^0.3.2", "nativewind": "^2.0.11" }, "devDependencies": { @@ -10385,6 +10386,14 @@ "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "node_modules/graphql-type-json": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.3.2.tgz", + "integrity": "sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==", + "peerDependencies": { + "graphql": ">=0.8.0" + } + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", diff --git a/packages/@green-stack-core/global.d.ts b/packages/@green-stack-core/global.d.ts index bd6fbba..0fd1900 100644 --- a/packages/@green-stack-core/global.d.ts +++ b/packages/@green-stack-core/global.d.ts @@ -1,16 +1,17 @@ type Overwrite = Omit & U type FlattenIfArray = T extends (infer R)[] ? R : T + type Unpromisify = T extends Promise ? R : T +type ObjectType = { [key: string]: T } + type HintedKeys = string & {} // eslint-disable-line @typescript-eslint/ban-types type Primitive = string | number | boolean | bigint | symbol | null | undefined; type NonNullableRequired = T extends null | undefined ? never : T; -type TestNullable = NonNullableRequired; - type ExtractPrimitives = { [K in keyof T]: NonNullableRequired extends Primitive ? { [P in K]: string } : ExtractPrimitives; }[keyof NonNullableRequired]; @@ -38,6 +39,11 @@ type LowercaseFirstChar = ? `${Lowercase}${Rest}` : S +type UppercaseFirstChar = + S extends `${infer First}${infer Rest}` + ? `${Uppercase}${Rest}` + : S + type any$Todo = any type any$Unknown = any type any$FixMe = any diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts b/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts index 9957f65..d3cd5c3 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts @@ -73,7 +73,7 @@ export type HydratedRouteProps< export const createQueryBridge = < ARGS extends Record = Record, RES extends Record = Record, - FetcherArgs = Parameters>[0], + FetcherArgs = Parameters>[0], // @ts-ignore FetcherData = Awaited>['routeDataFetcher']>>, FetcherToProps extends (fetcherData: Awaited>>) => unknown = (fetcherData: Awaited>>) => Awaited>>, ParamsToQueryKey extends (routeParams: ExtractRouteParams>[0]>) => QueryKey = (routeParams: ExtractRouteParams>[0]>) => QueryKey, diff --git a/packages/@green-stack-core/schemas/schemas.test.ts b/packages/@green-stack-core/schemas/schemas.test.ts index 0a918c7..746b48b 100644 --- a/packages/@green-stack-core/schemas/schemas.test.ts +++ b/packages/@green-stack-core/schemas/schemas.test.ts @@ -1,5 +1,6 @@ import { expect, test } from 'bun:test' import { z, schema, Metadata } from './index' +import { ZodError } from 'zod' /* --- Schema Essentials ----------------------------------------------------------------------- */ @@ -70,6 +71,33 @@ test("Descriptions persist in introspection, no matter where they're defined", ( expect(metadata.schema?.date.description).toEqual('Some date') }) +test("Supports custom error messages for each validation step", () => { + const ErrorTest = schema('ErrorTest', { + str: z.string().min(1, { message: 'Too short' }).max(10, { message: 'Too long' }), + num: z.number().min(1, { message: 'Too low' }).max(50, { message: 'Too high' }), + }) + // Default Error Messages + expect(() => ErrorTest.shape.num.parse('')).toThrow(new ZodError([{ + code: 'invalid_type', + expected: 'number', + received: 'string', + path: [], + message: 'Expected number, received string', + }])) + expect(() => ErrorTest.shape.str.parse(0)).toThrow(new ZodError([{ + code: 'invalid_type', + expected: 'string', + received: 'number', + path: [], + message: 'Expected string, received number', + }])) + // Custom Error Messages + expect(() => ErrorTest.shape.str.parse('')).toThrow('Too short') + expect(() => ErrorTest.shape.str.parse('Hello World!')).toThrow('Too long') + expect(() => ErrorTest.shape.num.parse(0)).toThrow('Too low') + expect(() => ErrorTest.shape.num.parse(51)).toThrow('Too high') +}) + /* --- Primitives ------------------------------------------------------------------------------ */ test("Primitives z.string(), z.number(), z.boolean() & z.date() work as expected", () => { diff --git a/packages/@green-stack-core/scripts/build-graphql-schema.ts b/packages/@green-stack-core/scripts/build-graphql-schema.ts index 89e3028..b96250b 100644 --- a/packages/@green-stack-core/scripts/build-graphql-schema.ts +++ b/packages/@green-stack-core/scripts/build-graphql-schema.ts @@ -14,6 +14,8 @@ const typeDefsPath = path.resolve(currentDir, '../../../features/@app-core/graph const disclaimer = `-i- This file was generated by the 'build-graphql-schema' script. Don't modify it manually.\n` +const CUSTOM_SCALARS = ['scalar Date', 'scalar JSON', 'scalar JSONObject'] as const + /** --- createSchemaDefinitions() -------------------------------------------------------------- */ /** -i- Combine all custom and other (e.g. generated) .graphql schema definitions */ export const createSchemaDefinitions = () => { @@ -21,6 +23,7 @@ export const createSchemaDefinitions = () => { const schemaPathPattern = `${rootDir}/(features|packages)/**/!(schema).graphql` const customGraphQLDefinitions = loadFilesSync(schemaPathPattern) return mergeTypeDefs([ + ...CUSTOM_SCALARS, ...customGraphQLDefinitions, /* TODO: Support other custom typedefs? */ ]) diff --git a/packages/@green-stack-core/utils/apiUtils.ts b/packages/@green-stack-core/utils/apiUtils.ts index f4a24c1..23ca8a6 100644 --- a/packages/@green-stack-core/utils/apiUtils.ts +++ b/packages/@green-stack-core/utils/apiUtils.ts @@ -3,7 +3,7 @@ import type { NextRequest } from 'next/server' // @ts-ignore import CryptoJS from 'crypto-js' import { appConfig } from '@app/core/appConfig' import { normalizeObjectProps } from './objectUtils' -import { isEmpty } from './commonUtils' +import { isEmpty, warnOnce } from './commonUtils' /* --- Types ----------------------------------------------------------------------------------- */ @@ -106,7 +106,7 @@ export const createMiddlewareHeaderContext = async ( ) => { // Warn and abort early when we won't be able to add and sign the data const APP_SECRET = appConfig.appSecret - if (!APP_SECRET) console.warn('APP_SECRET variable is required to create header context, skipping context generation until it is set') // prettier-ignore + if (!APP_SECRET) warnOnce('APP_SECRET variable is required to create header context, skipping context generation until it is set') // prettier-ignore if (!req?.headers) throw new Error('Request headers are required to create header context, skipping context generation until they are available') // prettier-ignore // Set all extra headers first const requestHeaders = new Headers(req.headers) diff --git a/packages/@green-stack-core/utils/commonUtils.ts b/packages/@green-stack-core/utils/commonUtils.ts index 9c01afc..ae65605 100644 --- a/packages/@green-stack-core/utils/commonUtils.ts +++ b/packages/@green-stack-core/utils/commonUtils.ts @@ -1,7 +1,7 @@ -/* --- Types ----------------------------------------------------------------------------------- */ +/* --- Constants ------------------------------------------------------------------------------- */ -type ObjectType = { [key: string]: T } +const LOGS: string[] = [] /** --- isEmpty() ------------------------------------------------------------------------------ */ /** -i- checks for null, undefined & empty strings, objects or arrays */ @@ -14,3 +14,20 @@ export const isEmpty = ( if (typeof val === 'object' && !Object.values(val).length) return true // objects & arrays return false // not empty } + +/** --- logOnce() ------------------------------------------------------------------------------ */ +/** -i- Log out to the console only once, skip on subsequent logs. Good for one-off messages. */ +export const logOnce = (message: string, logger = console.log) => { + if (!LOGS.includes(message)) { + logger(message) + LOGS.push(message) + } +} + +/** --- errorOnce() ---------------------------------------------------------------------------- */ +/** -i- Warn to the console only once, skip on subsequent logs. Good for one-off errors. */ +export const errorOnce = (message: string) => logOnce(message, console.error) + +/** --- warnOnce() ----------------------------------------------------------------------------- */ +/** -i- Error to the console only once, skip on subsequent logs. Good for one-off warnings. */ +export const warnOnce = (message: string) => logOnce(message, console.warn) diff --git a/turbo.json b/turbo.json index 49b292d..bedaae9 100644 --- a/turbo.json +++ b/turbo.json @@ -33,7 +33,7 @@ }, "@green-stack/core#build:schema": { "outputs": ["**/schema.graphql", "**/schema.ts", "**/graphql-env.d.ts"], - "inputs": ["**/*.ts", "**/*.graphql"], + "inputs": [], "cache": true }, "env:local": { From 29d82e0cbc14db4256aaf56b4d0eea0dc34ab6b2 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Thu, 6 Jun 2024 21:36:00 +0200 Subject: [PATCH 021/126] feat: Add plugin tests for createSchemaPlugin() --- README.md | 8 +- apps/expo/app.json | 6 +- features/@app-core/screens/HomeScreen.tsx | 5 +- package-lock.json | 4 +- package.json | 2 +- packages/@green-stack-core/package.json | 2 +- packages/@green-stack-core/preload.test.ts | 28 +++++ .../schemas/bridgedFetcher.ts | 3 +- .../schemas/createDataBridge.test.ts | 49 -------- .../schemas/createSchemaPlugin.ts | 52 ++++++++ packages/@green-stack-core/schemas/index.ts | 8 +- .../schemas/tests/bridges.test.ts | 47 ++++++++ .../schemas/tests/plugins.test.ts | 112 ++++++++++++++++++ .../schemas/{ => tests}/schemas.test.ts | 2 +- 14 files changed, 259 insertions(+), 69 deletions(-) create mode 100644 packages/@green-stack-core/preload.test.ts delete mode 100644 packages/@green-stack-core/schemas/createDataBridge.test.ts create mode 100644 packages/@green-stack-core/schemas/createSchemaPlugin.ts create mode 100644 packages/@green-stack-core/schemas/tests/bridges.test.ts create mode 100644 packages/@green-stack-core/schemas/tests/plugins.test.ts rename packages/@green-stack-core/schemas/{ => tests}/schemas.test.ts (99%) diff --git a/README.md b/README.md index 6d5492c..ccdd575 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ It's a good starting point if you want to: - ✅ have a minimal monorepo setup with Typescript but no monorepo tool yet - ✅ leave all other tech choices for e.g. styling, dbs, component libs, etc. up to you -> This template repo is the result of a frequent exercise where I attempt to recreate [Aetherspace](https://github.com/Aetherspace/green-stack-starter) from scratch. I usually do this using the latest recommended expo + next.js starter from the Expo docs. This helps me see whether the setup and config for aetherspace can be simplified. Also handy to notice where issues occur and how to fix them. +> This template repo is the result of a frequent exercise where I attempt to recreate the core functionality of the [FullProduct.dev Starterkit](https://github.com/Aetherspace/green-stack-starter) from scratch. I usually do this using the latest recommended expo + next.js starter from the Expo docs. This helps me see whether the setup and config for FullProduct.dev can be further simplified. Also handy to notice where issues occur and how to fix them. ## Getting Started @@ -32,11 +32,11 @@ All docs for this basic Universal Starter can be found at [universal-base-starte See [How to choose cross-platform tech](https://dev.to/codinsonn/why-use-react-native-over-flutter-a-recap-57b0) on dev.to for our more detailed list of alternatives. -**Our main recommendation for a more opinionated, more automated and extensible Universal Expo + Next.js starter to [move fast and build things](https://dev.to/codinsonn/how-to-compete-with-elons-twitter-a-dev-perspective-4j64) will always be Aetherspace 👇** +**Our main recommendation for a more opinionated, more automated and extensible Universal Expo + Next.js starter to [move fast and build things](https://dev.to/codinsonn/how-to-compete-with-elons-twitter-a-dev-perspective-4j64) will always be FullProduct.dev 👇** -## Main Aetherspace Universal App starter +## Main FullProduct.dev Universal App starter -- [Aetherspace GREEN stack starter](https://github.com/Aetherspace/green-stack-starter-demo) +- [FullProduct.dev GREEN stack starter](https://github.com/Aetherspace/green-stack-starter-demo)

diff --git a/apps/expo/app.json b/apps/expo/app.json index 49d3652..58344f5 100644 --- a/apps/expo/app.json +++ b/apps/expo/app.json @@ -1,8 +1,8 @@ { "expo": { - "name": "@aetherspace/universal-app-router", - "slug": "aetherspace-universal-app-router", - "scheme": "aetherspace-universal-app-router", + "name": "@fullproduct-dot-dev/universal-app-router", + "slug": "fullproduct-dot-dev-universal-app-router", + "scheme": "fullproduct-dot-dev-universal-app-router", "plugins": [ "expo-router" ], diff --git a/features/@app-core/screens/HomeScreen.tsx b/features/@app-core/screens/HomeScreen.tsx index 98c4d8b..2d62648 100644 --- a/features/@app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/HomeScreen.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { View, Link, Image, P, H3 } from '../components/styled' +import { View, Link, Image, P, H3, Text } from '../components/styled' import { healthCheckFetcher } from '../resolvers/healthCheck.query' import { HydratedRouteProps, createQueryBridge } from '@green-stack/core/navigation/UniversalRouteScreen.helpers' @@ -24,7 +24,8 @@ const HomeScreen = (props: HydratedRouteProps) => {

Full-Product, Universal App with the GREEN-stack 🚀

-

Open HomeScreen.tsx in features/@app-core/screens to start working on your app

+

+ Open HomeScreen.tsx in features/@app-core/screens to start working on your app

Test navigation diff --git a/package-lock.json b/package-lock.json index 401ffbd..7c57bfc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "@aetherspace/universal-app-router", + "name": "@fullproduct-dot-dev/universal-app-router", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@aetherspace/universal-app-router", + "name": "@fullproduct-dot-dev/universal-app-router", "version": "1.0.0", "workspaces": [ "apps/*", diff --git a/package.json b/package.json index 802f494..ec77d06 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@aetherspace/universal-app-router", + "name": "@fullproduct-dot-dev/universal-app-router", "version": "1.0.0", "private": true, "workspaces": [ diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index ffcd10f..1c3c57f 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -15,6 +15,6 @@ }, "scripts": { "build:schema": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./scripts/build-graphql-schema.ts", - "test": "bun test --tsconfig-override tsconfig.test.json --verbose" + "test": "bun test --preload ./preload.test.ts --tsconfig-override tsconfig.test.json --verbose" } } diff --git a/packages/@green-stack-core/preload.test.ts b/packages/@green-stack-core/preload.test.ts new file mode 100644 index 0000000..68c99e7 --- /dev/null +++ b/packages/@green-stack-core/preload.test.ts @@ -0,0 +1,28 @@ +import { mock } from 'bun:test' + +/* --- Mock 'expo-constants' ------------------------------------------------------------------- */ + +const expoConstantsMock = { + default: { + expoGoConfig: { + debuggerHost: 'localhost:19000', + }, + manifest2: { + extra: { + expoGo: { + debuggerHost: 'localhost:19000', + }, + }, + }, + } +} + +mock.module('expo-constants', () => expoConstantsMock) +mock.module(require.resolve('expo-constants'), () => expoConstantsMock) + +/* --- Mock 'react-native' --------------------------------------------------------------------- */ + +// @ts-ignore +mock.module('react-native', () => import('react-native-web')) +// @ts-ignore +mock.module(require.resolve('react-native'), () => import('react-native-web')) diff --git a/packages/@green-stack-core/schemas/bridgedFetcher.ts b/packages/@green-stack-core/schemas/bridgedFetcher.ts index eccbf87..565f749 100644 --- a/packages/@green-stack-core/schemas/bridgedFetcher.ts +++ b/packages/@green-stack-core/schemas/bridgedFetcher.ts @@ -1,5 +1,5 @@ import type { TadaDocumentNode, VariablesOf, ResultOf } from 'gql.tada' -import { graphqlQuery } from '@app/core/graphql/graphqlQuery' +import { graphqlQuery } from '@app/core/graphql/graphqlQuery' // '@app/core/graphql/graphqlQuery' /** --- bridgedFetcher() ----------------------------------------------------------------------- */ /** -i- Helper to create a typed fetcher from config created by `createDataBridge()` */ @@ -37,7 +37,6 @@ export const bridgedFetcher = < const query = getGraphqlQuery() as unknown as Exclude return (async (variables: VariablesOf>) => { const result = await graphqlQuery(query, { variables }) - console.log({ result, query, variables }) return result as ResultOf }) as (variables: VariablesOf) => Promise> } diff --git a/packages/@green-stack-core/schemas/createDataBridge.test.ts b/packages/@green-stack-core/schemas/createDataBridge.test.ts deleted file mode 100644 index 0c122d2..0000000 --- a/packages/@green-stack-core/schemas/createDataBridge.test.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { expect, test } from 'bun:test' -import { print } from 'graphql' -import { z, schema } from './index' -import { createDataBridge } from './createDataBridge' -import { bridgedFetcher } from './bridgedFetcher' - -const healtCheckBridge = createDataBridge({ - resolverName: 'healthCheck', - argsSchema: schema('HealthCheckArgs', { echo: z.string().default('Hello World') }), - responseSchema: schema('HealthCheckResponse', { echo: z.string().optional() }), - apiPath: '/api/health', - allowedMethods: ['GET'], -}) - -test("Bridges created by createDataBridge infer the right argsName & query type", () => { - expect(healtCheckBridge.resolverName).toBe('healthCheck') - expect(healtCheckBridge.resolverArgsName).toBe('healthCheckArgs') - expect(healtCheckBridge.resolverType).toBe('query') -}) - -const expectedQuery = `query healthCheck($healthCheckArgs: HealthCheckArgs) { - healthCheck(args: $healthCheckArgs) { - echo - } -}` - -test("Bridges created by createDataBridge can build the graphql query from args & response schemas", () => { - const graphqlQuery = healtCheckBridge.getGraphqlQuery() - expect(print(graphqlQuery)).toBe(expectedQuery) -}) - -// TODO: Figure out why using healthCheckQuery here causes "error: Unexpected typeof" from react-native? (Flow issues with Bun?) -// test("Bridges created by createDataBridge can use a custom graphql query", async () => { -// // Lazily import the query to avoid circular dependencies -// const { healthCheckQuery } = await (import('@app/core/resolvers/healthCheck.query')) -// const bridgeWithCustomQuery = createDataBridge({ -// ...healtCheckBridge, -// graphqlQuery: healthCheckQuery, -// }) -// const graphqlQuery = bridgeWithCustomQuery.getGraphqlQuery() -// expect(print(graphqlQuery)).not.toBe(expectedQuery) -// }) - -// TODO: Figure out why using bridgedFetcher here causes "error: Unexpected typeof" from react-native? (Flow issues with Bun?) -// test("bridgedFetcher() can create a fetcher from a DataBridge", () => { -// expect(() => bridgedFetcher(healtCheckBridge)).not.toThrow() -// const fetcher = bridgedFetcher(healtCheckBridge) -// expect(fetcher).toBeInstanceOf(Function) -// }) diff --git a/packages/@green-stack-core/schemas/createSchemaPlugin.ts b/packages/@green-stack-core/schemas/createSchemaPlugin.ts new file mode 100644 index 0000000..810162d --- /dev/null +++ b/packages/@green-stack-core/schemas/createSchemaPlugin.ts @@ -0,0 +1,52 @@ +import { z, SCHEMA_TYPE, Metadata } from './index' + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type SchemaTypeMap = { + [key in SCHEMA_TYPE]?: (schemaKey: string, fieldMeta: Metadata) => unknown +} + +export type SchemaPluginMap = SchemaTypeMap & { + [key in keyof S]?: (schemaKey: string, fieldMeta: Metadata) => unknown +} + +/** --- createSchemaPlugin() ------------------------------------------------------------------- */ +/** -i- Maps a schema as single source of truth to another data structure + * @param schema - The schema to map to a new structure + * @param schemaTypeMap - Object providing a builder fn for possible baseType, zodType or schemaKey + * @example ``` + * createSchemaPlugin(UserSchema, { + * // e.g. Base Types (can be overridden by more specific types) + * String: createDef(MongoString), + * // e.g. Zod Types (more specific, overrides base types) + * ZodBoolean: createDef(MongoBool), + * // e.g. Schema Property keys (most specific, highest priority) + * userID: createDef(MongoObjectID), + * }) + * ``` */ +export const createSchemaPlugin = < + S extends z.ZodRawShape, + P extends SchemaPluginMap +>( + schema: z.ZodObject, + schemaTypeMap: P +) => { + const metadata = schema.introspect() as Metadata> + const mappedSchema = Object.entries(metadata.schema!).reduce((result, [schemaKey, fieldMeta]) => { + const { baseType, typeName: zodType } = fieldMeta + // Figure out the builder to use, going from least specific to most specific + let mappedSchemaBuilder + if (schemaTypeMap[baseType]) mappedSchemaBuilder = schemaTypeMap[baseType] + if (schemaTypeMap[zodType]) mappedSchemaBuilder = schemaTypeMap[zodType] + if (schemaTypeMap[schemaKey]) mappedSchemaBuilder = schemaTypeMap[schemaKey] + // Skip if no builder was found + if (!mappedSchemaBuilder) return result + // Return mapped schema with new key + const newStructure = mappedSchemaBuilder(schemaKey, fieldMeta) + return { ...result, [schemaKey]: newStructure } + }, {}) + // Return mapped schema + return mappedSchema as { + [K in keyof S]: SchemaPluginMap[K] extends (schemaKey: string, fieldMeta: Metadata) => infer R ? R : unknown + } +} diff --git a/packages/@green-stack-core/schemas/index.ts b/packages/@green-stack-core/schemas/index.ts index 43681d0..1c11b31 100644 --- a/packages/@green-stack-core/schemas/index.ts +++ b/packages/@green-stack-core/schemas/index.ts @@ -41,14 +41,14 @@ export type ZOD_TYPE = keyof typeof BASE_TYPE_MAP export type BASE_TYPE = typeof BASE_TYPE_MAP[ZOD_TYPE] export type SCHEMA_TYPE = (ZOD_TYPE | BASE_TYPE) & {} -export type Metadata | any[]> = { +export type Metadata | any$Unknown[]> = { typeName: ZOD_TYPE, baseType: BASE_TYPE, schemaName?: string, isOptional?: boolean, isNullable?: boolean, - defaultValue?: any, - exampleValue?: any, + defaultValue?: any$Unknown, + exampleValue?: any$Unknown, description?: string, minLength?: number, maxLength?: number, @@ -56,7 +56,7 @@ export type Metadata | any[]> = { minValue?: number, maxValue?: number, isInt?: boolean, - literalValue?: any, + literalValue?: any$Unknown, schema?: S, } diff --git a/packages/@green-stack-core/schemas/tests/bridges.test.ts b/packages/@green-stack-core/schemas/tests/bridges.test.ts new file mode 100644 index 0000000..e79ecfb --- /dev/null +++ b/packages/@green-stack-core/schemas/tests/bridges.test.ts @@ -0,0 +1,47 @@ +import { expect, test } from 'bun:test' +import { print } from 'graphql' +import { z, schema } from '../index' +import { createDataBridge } from '../createDataBridge' +import { bridgedFetcher } from '../bridgedFetcher' + +const healtCheckBridge = createDataBridge({ + resolverName: 'healthCheck', + argsSchema: schema('HealthCheckArgs', { echo: z.string().default('Hello World') }), + responseSchema: schema('HealthCheckResponse', { echo: z.string().optional() }), + apiPath: '/api/health', + allowedMethods: ['GET', 'GRAPHQL'], +}) + +const expectedQuery = `query healthCheck($healthCheckArgs: HealthCheckArgs) { + healthCheck(args: $healthCheckArgs) { + echo + } +}` + +test("Bridges created by createDataBridge infer the right argsName & query type", () => { + expect(healtCheckBridge.resolverName).toBe('healthCheck') + expect(healtCheckBridge.resolverArgsName).toBe('healthCheckArgs') + expect(healtCheckBridge.resolverType).toBe('query') +}) + +test("Bridges created by createDataBridge can build the graphql query from args & response schemas", () => { + const graphqlQuery = healtCheckBridge.getGraphqlQuery() + expect(print(graphqlQuery)).toBe(expectedQuery) +}) + +test("Bridges created by createDataBridge can use a custom graphql query", async () => { + // Lazily import the query to avoid circular dependencies + const { healthCheckQuery } = await (import('@app/core/resolvers/healthCheck.query')) + const bridgeWithCustomQuery = createDataBridge({ + ...healtCheckBridge, + graphqlQuery: healthCheckQuery, + }) + const graphqlQuery = bridgeWithCustomQuery.getGraphqlQuery() + expect(print(graphqlQuery)).not.toBe(expectedQuery) +}) + +test("bridgedFetcher() can create a fetcher from a DataBridge", async () => { + expect(() => bridgedFetcher(healtCheckBridge)).not.toThrow() + const fetcher = bridgedFetcher(healtCheckBridge) + expect(fetcher).toBeInstanceOf(Function) +}) diff --git a/packages/@green-stack-core/schemas/tests/plugins.test.ts b/packages/@green-stack-core/schemas/tests/plugins.test.ts new file mode 100644 index 0000000..eba29ca --- /dev/null +++ b/packages/@green-stack-core/schemas/tests/plugins.test.ts @@ -0,0 +1,112 @@ +import { expect, test } from 'bun:test' +import { z, schema } from '../index' +import { createSchemaPlugin } from '../createSchemaPlugin' + +const UserSchema = schema('UserSchema', { + name: z.string(), + email: z.string(), + age: z.number(), + birthdate: z.date(), +}) + +test("createSchemaPlugin() applies the correct builder pattern for baseTypes", () => { + // Schema transformer to test + const testPlugin = createSchemaPlugin(UserSchema, { + Boolean: (schemaKey, fieldMeta) => 'BaseBool', + String: (schemaKey, fieldMeta) => 'BaseString', + Number: (schemaKey, fieldMeta) => 'BaseNumber', + Date: (schemaKey, fieldMeta) => 'BaseDate', + }) + // Check the result + expect(testPlugin.name).toBe('BaseString') + expect(testPlugin.email).toBe('BaseString') + expect(testPlugin.age).toBe('BaseNumber') + expect(testPlugin.birthdate).toBe('BaseDate') +}) + +test("createSchemaPlugin() overrides baseType builders for zodType builders", () => { + // Schema transformer to test + const testPlugin = createSchemaPlugin(UserSchema, { + // Least specific: Should be overridden by more specific mappers + Boolean: (schemaKey, fieldMeta) => 'BaseBool', + String: (schemaKey, fieldMeta) => 'BaseString', + Number: (schemaKey, fieldMeta) => 'BaseNumber', + Date: (schemaKey, fieldMeta) => 'BaseDate', + // More specific: Should override any generic builder + ZodBoolean: (schemaKey, fieldMeta) => 'ZodBool', + ZodString: (schemaKey, fieldMeta) => 'ZodString', + ZodNumber: (schemaKey, fieldMeta) => 'ZodNumber', + ZodDate: (schemaKey, fieldMeta) => 'ZodDate', + }) + // Check the result + expect(testPlugin.name).toBe('ZodString') + expect(testPlugin.email).toBe('ZodString') + expect(testPlugin.age).toBe('ZodNumber') + expect(testPlugin.birthdate).toBe('ZodDate') +}) + +test("createSchemaPlugin() overrides zodType builder for schemaKey builders", () => { + // Schema transformer to test + const testPlugin = createSchemaPlugin(UserSchema, { + // Least specific: Should be overridden by more specific mappers + Boolean: (schemaKey, fieldMeta) => 'BaseBool', + String: (schemaKey, fieldMeta) => 'BaseString', + // More specific: Should override any generic builder + ZodNumber: (schemaKey, fieldMeta) => 'ZodNumber', + ZodDate: (schemaKey, fieldMeta) => 'ZodDate', + // Most specific: Should override all other builders + name: (schemaKey, fieldMeta) => 'KeyString', + email: (schemaKey, fieldMeta) => 'KeyString', + age: (schemaKey, fieldMeta) => 'KeyNumber', + birthdate: (schemaKey, fieldMeta) => 'KeyDate', + }) + // Check the result + expect(testPlugin.name).toBe('KeyString') + expect(testPlugin.email).toBe('KeyString') + expect(testPlugin.age).toBe('KeyNumber') + expect(testPlugin.birthdate).toBe('KeyDate') +}) + +test("createSchemaPlugin() skips fields without a builder", () => { + // Schema transformer to test + const testPlugin = createSchemaPlugin(UserSchema, { + // Only provide a builder for the 'name' field + name: (schemaKey, fieldMeta) => 'KeyString', + }) + // Check the result + expect(testPlugin.name).toBe('KeyString') + // All other fields should be skipped + expect(testPlugin.email).toBe(undefined) + expect(testPlugin.age).toBe(undefined) + expect(testPlugin.birthdate).toBe(undefined) +}) + +test("createSchemaPlugin() builder functions recieve schemaKey as the first arg", () => { + // Schema transformer to test + const testPlugin = createSchemaPlugin(UserSchema, { + name: (schemaKey, fieldMeta) => schemaKey, + email: (schemaKey, fieldMeta) => schemaKey, + age: (schemaKey, fieldMeta) => schemaKey, + birthdate: (schemaKey, fieldMeta) => schemaKey, + }) + // Check the result + expect(testPlugin.name).toBe('name') + expect(testPlugin.email).toBe('email') + expect(testPlugin.age).toBe('age') + expect(testPlugin.birthdate).toBe('birthdate') +}) + +test("createSchemaPlugin() builder functions recieve fieldMeta as the second arg", () => { + // Schema transformer to test + const testPlugin = createSchemaPlugin(UserSchema, { + name: (schemaKey, fieldMeta) => JSON.stringify(fieldMeta), + email: (schemaKey, fieldMeta) => JSON.stringify(fieldMeta), + age: (schemaKey, fieldMeta) => JSON.stringify(fieldMeta), + birthdate: (schemaKey, fieldMeta) => JSON.stringify(fieldMeta), + }) + // Check the result + expect(testPlugin.name).toBe(JSON.stringify(UserSchema.shape.name.introspect())) + expect(testPlugin.email).toBe(JSON.stringify(UserSchema.shape.email.introspect())) + expect(testPlugin.age).toBe(JSON.stringify(UserSchema.shape.age.introspect())) + expect(testPlugin.birthdate).toBe(JSON.stringify(UserSchema.shape.birthdate.introspect())) +}) diff --git a/packages/@green-stack-core/schemas/schemas.test.ts b/packages/@green-stack-core/schemas/tests/schemas.test.ts similarity index 99% rename from packages/@green-stack-core/schemas/schemas.test.ts rename to packages/@green-stack-core/schemas/tests/schemas.test.ts index 746b48b..84440a6 100644 --- a/packages/@green-stack-core/schemas/schemas.test.ts +++ b/packages/@green-stack-core/schemas/tests/schemas.test.ts @@ -1,5 +1,5 @@ import { expect, test } from 'bun:test' -import { z, schema, Metadata } from './index' +import { z, schema, Metadata } from '../index' import { ZodError } from 'zod' /* --- Schema Essentials ----------------------------------------------------------------------- */ From 91dfea95621ea0c717573cd30b9167df3dd8e6ce Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 7 Jun 2024 16:21:55 +0200 Subject: [PATCH 022/126] chore: Rename 'typeName' in introspection meta to 'zodType' --- .../schemas/createDataBridge.ts | 2 +- .../schemas/createResolver.ts | 8 +- .../schemas/createSchemaPlugin.ts | 2 +- packages/@green-stack-core/schemas/index.ts | 130 +++++++++--------- .../schemas/tests/schemas.test.ts | 38 ++--- 5 files changed, 91 insertions(+), 89 deletions(-) diff --git a/packages/@green-stack-core/schemas/createDataBridge.ts b/packages/@green-stack-core/schemas/createDataBridge.ts index a74d3ef..d5afed2 100644 --- a/packages/@green-stack-core/schemas/createDataBridge.ts +++ b/packages/@green-stack-core/schemas/createDataBridge.ts @@ -37,7 +37,7 @@ export const renderGraphqlQuery = { // @ts-ignore const fieldConfig = (schema.schema?.[fieldKey] || schema[fieldKey]) as Metadata - const zodType = fieldConfig.typeName + const zodType = fieldConfig.zodType const fieldType = fieldConfig.baseType const spacing = ' '.repeat(depth) diff --git a/packages/@green-stack-core/schemas/createResolver.ts b/packages/@green-stack-core/schemas/createResolver.ts index c519502..08f0167 100644 --- a/packages/@green-stack-core/schemas/createResolver.ts +++ b/packages/@green-stack-core/schemas/createResolver.ts @@ -40,7 +40,9 @@ export type ResolverConfigType = { handleError: (err: any, sendResponse?: boolean) => unknown | void parseArgs: (args: ArgsInput) => ArgsInput withDefaults: (response: ResInput) => ResOutput - context: Record + context: Record & { + req: NextApiRequest | Request | GetServerSidePropsContext['req'] + }, user?: Record | null config: ResolverConfigType req?: NextApiRequest | Request | GetServerSidePropsContext['req'] @@ -95,7 +97,7 @@ export const createResolver = < } // Context normalization const headerContext = getHeaderContext(req) - const fullContext = { ...headerContext, ...config } // Always override header context with config + const fullContext = { ...headerContext, ...config, req: config.req || req } // Always override header context with config const user = fullContext?.user as Record | undefined | null // Error handling const handleError = (err: any$FixMe, sendResponse = false) => { @@ -128,7 +130,7 @@ export const createResolver = < } // Return resolver return resolverFn({ - req, + req: fullContext.req, res, args: normalizedArgs as ArgsInput, user, diff --git a/packages/@green-stack-core/schemas/createSchemaPlugin.ts b/packages/@green-stack-core/schemas/createSchemaPlugin.ts index 810162d..d2cd103 100644 --- a/packages/@green-stack-core/schemas/createSchemaPlugin.ts +++ b/packages/@green-stack-core/schemas/createSchemaPlugin.ts @@ -33,7 +33,7 @@ export const createSchemaPlugin = < ) => { const metadata = schema.introspect() as Metadata> const mappedSchema = Object.entries(metadata.schema!).reduce((result, [schemaKey, fieldMeta]) => { - const { baseType, typeName: zodType } = fieldMeta + const { baseType, zodType } = fieldMeta // Figure out the builder to use, going from least specific to most specific let mappedSchemaBuilder if (schemaTypeMap[baseType]) mappedSchemaBuilder = schemaTypeMap[baseType] diff --git a/packages/@green-stack-core/schemas/index.ts b/packages/@green-stack-core/schemas/index.ts index 1c11b31..7ad9c00 100644 --- a/packages/@green-stack-core/schemas/index.ts +++ b/packages/@green-stack-core/schemas/index.ts @@ -42,7 +42,7 @@ export type BASE_TYPE = typeof BASE_TYPE_MAP[ZOD_TYPE] export type SCHEMA_TYPE = (ZOD_TYPE | BASE_TYPE) & {} export type Metadata | any$Unknown[]> = { - typeName: ZOD_TYPE, + zodType: ZOD_TYPE, baseType: BASE_TYPE, schemaName?: string, isOptional?: boolean, @@ -61,7 +61,7 @@ export type Metadata | any$Unknown[]> = { } type StackedMeta = Metadata & { - zodType?: z.ZodType & { _def: z.ZodTypeDef & { typeName: ZOD_TYPE } }, + zodStruct?: z.ZodType & { _def: z.ZodTypeDef & { typeName: ZOD_TYPE } }, } /* --- Zod extensions -------------------------------------------------------------------------- */ @@ -123,43 +123,43 @@ if (!ZodType.prototype.metadata) { ZodType.prototype.ex = ZodType.prototype.example const getStackedMeta = ( - zodType: Z, + zodStruct: Z, stackedMeta = [] as StackedMeta[] ): StackedMeta[] => { // Start with actual metadata - const meta = { ...zodType.metadata() } + const meta = { ...zodStruct.metadata() } // Include the type in the stack, we'll remove it again later - meta.zodType = zodType - const typeName = zodType._def.typeName + meta.zodStruct = zodStruct + const zodType = zodStruct._def.typeName // Check optionality - if (typeName === 'ZodOptional') meta.isOptional = true - if (typeName === 'ZodDefault') meta.isOptional = true - if (typeName === 'ZodNullable') meta.isNullable = true + if (zodType === 'ZodOptional') meta.isOptional = true + if (zodType === 'ZodDefault') meta.isOptional = true + if (zodType === 'ZodNullable') meta.isNullable = true // Figure out the default & example values if there are any - if (zodType._def.defaultValue) meta.defaultValue = zodType._def.defaultValue() + if (zodStruct._def.defaultValue) meta.defaultValue = zodStruct._def.defaultValue() if (meta.defaultValue instanceof Set) meta.defaultValue = Array.from(meta.defaultValue) if (meta.exampleValue instanceof Set) meta.exampleValue = Array.from(meta.exampleValue) if (meta.defaultValue instanceof Map) meta.defaultValue = Object.fromEntries(meta.defaultValue) if (meta.exampleValue instanceof Map) meta.exampleValue = Object.fromEntries(meta.exampleValue) // Add the description if there is one - if (zodType._def.description) meta.description = zodType._def.description + if (zodStruct._def.description) meta.description = zodStruct._def.description // Add array metadata if present - if (zodType._def.minLength) meta.minLength = zodType._def.minLength.value - if (zodType._def.maxLength) meta.maxLength = zodType._def.maxLength.value - if (zodType._def.exactLength) meta.exactLength = zodType._def.exactLength.value + if (zodStruct._def.minLength) meta.minLength = zodStruct._def.minLength.value + if (zodStruct._def.maxLength) meta.maxLength = zodStruct._def.maxLength.value + if (zodStruct._def.exactLength) meta.exactLength = zodStruct._def.exactLength.value // Add string metadata if present - const stringType = zodType as unknown as z.ZodString + const stringType = zodStruct as unknown as z.ZodString if (stringType.minLength) meta.minLength = stringType.minLength if (stringType.maxLength) meta.maxLength = stringType.maxLength // Add number metadata if present - const numberType = zodType as unknown as z.ZodNumber + const numberType = zodStruct as unknown as z.ZodNumber if (numberType.minValue) meta.minValue = numberType.minValue if (numberType.maxValue) meta.maxValue = numberType.maxValue if (numberType.isInt) meta.isInt = numberType.isInt // Literals - if (typeName === 'ZodLiteral') { - const _zodType = zodType as unknown as z.ZodLiteral - meta.literalValue = _zodType.value + if (zodType === 'ZodLiteral') { + const _zodStruct = zodStruct as unknown as z.ZodLiteral + meta.literalValue = _zodStruct.value if (typeof meta.literalValue === 'string') meta.baseType = 'String' if (typeof meta.literalValue === 'number') meta.baseType = 'Number' if (typeof meta.literalValue === 'boolean') meta.baseType = 'Boolean' @@ -168,87 +168,87 @@ if (!ZodType.prototype.metadata) { if (Array.isArray(meta.literalValue)) meta.baseType = 'Array' } // Enums - if (typeName === 'ZodEnum') { - const _zodType = zodType as unknown as z.ZodEnum - meta.schema = _zodType.options?.reduce((acc: Record, value: any) => { + if (zodType === 'ZodEnum') { + const _zodStruct = zodStruct as unknown as z.ZodEnum + meta.schema = _zodStruct.options?.reduce((acc: Record, value: any) => { return { ...acc, [value]: value } }, {}) } // Tuples - if (typeName === 'ZodTuple') { - const _zodType = zodType as unknown as z.ZodTuple - meta.schema = _zodType.items.map((item: any) => item.introspect?.()).filter(Boolean) + if (zodType === 'ZodTuple') { + const _zodStruct = zodStruct as unknown as z.ZodTuple + meta.schema = _zodStruct.items.map((item: any) => item.introspect?.()).filter(Boolean) } // Unions - if (typeName === 'ZodUnion') { - const _zodType = zodType as unknown as z.ZodUnion - meta.schema = _zodType.options.map((option: any) => option.introspect?.()).filter(Boolean) + if (zodType === 'ZodUnion') { + const _zodStruct = zodStruct as unknown as z.ZodUnion + meta.schema = _zodStruct.options.map((option: any) => option.introspect?.()).filter(Boolean) } // Intersections - if (typeName === 'ZodIntersection') { - const _zodType = zodType as unknown as z.ZodIntersection + if (zodType === 'ZodIntersection') { + const _zodStruct = zodStruct as unknown as z.ZodIntersection meta.schema = { - left: _zodType._def.left.introspect?.(), - right: _zodType._def.right.introspect?.(), + left: _zodStruct._def.left.introspect?.(), + right: _zodStruct._def.right.introspect?.(), } } // Discriminated Unions - if (typeName === 'ZodDiscriminatedUnion') { - const _zodType = zodType as unknown as z.ZodDiscriminatedUnion - meta.schema = _zodType.options.reduce((acc: any, option: any) => { + if (zodType === 'ZodDiscriminatedUnion') { + const _zodStruct = zodStruct as unknown as z.ZodDiscriminatedUnion + meta.schema = _zodStruct.options.reduce((acc: any, option: any) => { return { ...acc, types: [...acc.types, option.introspect?.()] } - }, { discriminator: _zodType._def.discriminator, types: [] }) + }, { discriminator: _zodStruct._def.discriminator, types: [] }) } // Arrays - if (typeName === 'ZodArray') { - const _zodType = zodType as unknown as z.ZodArray - meta.schema = _zodType._def.type.introspect?.() + if (zodType === 'ZodArray') { + const _zodStruct = zodStruct as unknown as z.ZodArray + meta.schema = _zodStruct._def.type.introspect?.() } // Schemas & Objects - if (typeName === 'ZodObject') { - const _zodType = zodType as unknown as z.ZodObject - meta.schema = Object.entries(_zodType.shape).reduce((acc, [key, fieldType]) => { + if (zodType === 'ZodObject') { + const _zodStruct = zodStruct as unknown as z.ZodObject + meta.schema = Object.entries(_zodStruct.shape).reduce((acc, [key, fieldType]) => { // @ts-ignore return { ...acc, [key]: fieldType.introspect?.() } }, {}) } // Records - if (typeName === 'ZodRecord') { - const _zodType = zodType as unknown as z.ZodRecord - meta.schema = _zodType._def.valueType.introspect?.() + if (zodType === 'ZodRecord') { + const _zodStruct = zodStruct as unknown as z.ZodRecord + meta.schema = _zodStruct._def.valueType.introspect?.() } // Sets - if (typeName === 'ZodSet') { - const _zodType = zodType as unknown as z.ZodSet - meta.schema = _zodType._def.valueType.introspect?.() + if (zodType === 'ZodSet') { + const _zodStruct = zodStruct as unknown as z.ZodSet + meta.schema = _zodStruct._def.valueType.introspect?.() } // Maps - if (typeName === 'ZodMap') { - const _zodType = zodType as unknown as z.ZodMap + if (zodType === 'ZodMap') { + const _zodStruct = zodStruct as unknown as z.ZodMap meta.schema = { - key: _zodType._def.keyType.introspect?.(), - value: _zodType._def.valueType.introspect?.(), + key: _zodStruct._def.keyType.introspect?.(), + value: _zodStruct._def.valueType.introspect?.(), } } // Functions - if (typeName === 'ZodFunction') { - const _zodType = zodType as unknown as z.ZodFunction + if (zodType === 'ZodFunction') { + const _zodStruct = zodStruct as unknown as z.ZodFunction meta.schema = { - input: _zodType._def.args.introspect?.(), - output: _zodType._def.returns.introspect?.(), + input: _zodStruct._def.args.introspect?.(), + output: _zodStruct._def.returns.introspect?.(), } } // Promises - if (typeName === 'ZodPromise') { - const _zodType = zodType as unknown as z.ZodPromise - meta.schema = _zodType._def.type.introspect?.() + if (zodType === 'ZodPromise') { + const _zodStruct = zodStruct as unknown as z.ZodPromise + meta.schema = _zodStruct._def.type.introspect?.() } // Add the metadata for the current type const currentMetaStack = [...stackedMeta, meta as Metadata] // If we've reached the innermost type, end recursion, return all metadata - if (!zodType._def.innerType) return currentMetaStack + if (!zodStruct._def.innerType) return currentMetaStack // If there's another inner layer, unwrap it, add to the stack - return getStackedMeta(zodType._def.innerType, currentMetaStack) + return getStackedMeta(zodStruct._def.innerType, currentMetaStack) } ZodType.prototype.introspect = function () { @@ -256,15 +256,15 @@ if (!ZodType.prototype.metadata) { const stackedMeta = getStackedMeta(this) const reversedMeta = [...stackedMeta].reverse() const [innermostMeta] = reversedMeta - const typeName = innermostMeta.zodType!._def.typeName as unknown as ZOD_TYPE - const baseType = BASE_TYPE_MAP[typeName as ZOD_TYPE] + const zodType = innermostMeta.zodStruct!._def.typeName as unknown as ZOD_TYPE + const baseType = BASE_TYPE_MAP[zodType as ZOD_TYPE] // Flatten stacked metadata in reverse order - const flatMeta = reversedMeta.reduce((acc, { zodType: _, ...meta }) => ({ + const flatMeta = reversedMeta.reduce((acc, { zodStruct: _, ...meta }) => ({ ...acc, ...meta, }), {}) // Return all introspected metadata - const meta = { ...flatMeta, typeName, baseType } + const meta = { ...flatMeta, zodType, baseType } return meta } diff --git a/packages/@green-stack-core/schemas/tests/schemas.test.ts b/packages/@green-stack-core/schemas/tests/schemas.test.ts index 84440a6..a70ef59 100644 --- a/packages/@green-stack-core/schemas/tests/schemas.test.ts +++ b/packages/@green-stack-core/schemas/tests/schemas.test.ts @@ -13,11 +13,11 @@ test("Schemas can be introspected", () => { expect(User.introspect).toBeInstanceOf(Function) expect(User.introspect()).toEqual({ name: 'User', - typeName: 'ZodObject', + zodType: 'ZodObject', baseType: 'Object', schema: { - name: { typeName: 'ZodString', baseType: 'String' }, - age: { typeName: 'ZodNumber', baseType: 'Number' }, + name: { zodType: 'ZodString', baseType: 'String' }, + age: { zodType: 'ZodNumber', baseType: 'Number' }, }, }) }) @@ -108,10 +108,10 @@ test("Primitives z.string(), z.number(), z.boolean() & z.date() work as expected expect(metadata.schema?.bln.baseType).toEqual('Boolean') expect(metadata.schema?.date.baseType).toEqual('Date') // Type Names - expect(metadata.schema?.str.typeName).toEqual('ZodString') - expect(metadata.schema?.num.typeName).toEqual('ZodNumber') - expect(metadata.schema?.bln.typeName).toEqual('ZodBoolean') - expect(metadata.schema?.date.typeName).toEqual('ZodDate') + expect(metadata.schema?.str.zodType).toEqual('ZodString') + expect(metadata.schema?.num.zodType).toEqual('ZodNumber') + expect(metadata.schema?.bln.zodType).toEqual('ZodBoolean') + expect(metadata.schema?.date.zodType).toEqual('ZodDate') // Min / Max expect(metadata.schema?.str.minLength).toEqual(1) expect(metadata.schema?.str.maxLength).toEqual(10) @@ -146,10 +146,10 @@ test("Advanced types z.enum(), z.tuple(), z.union() & z.array() work as expected expect(metadata.schema?.union.baseType).toEqual('Any') // String | Number, serialized as JSON expect(metadata.schema?.array.baseType).toEqual('Array') // Type Names - expect(metadata.schema?.enum.typeName).toEqual('ZodEnum') - expect(metadata.schema?.tuple.typeName).toEqual('ZodTuple') - expect(metadata.schema?.union.typeName).toEqual('ZodUnion') - expect(metadata.schema?.array.typeName).toEqual('ZodArray') + expect(metadata.schema?.enum.zodType).toEqual('ZodEnum') + expect(metadata.schema?.tuple.zodType).toEqual('ZodTuple') + expect(metadata.schema?.union.zodType).toEqual('ZodUnion') + expect(metadata.schema?.array.zodType).toEqual('ZodArray') // Enums expect(metadata.schema?.enum.schema).toEqual({ A: 'A', @@ -158,16 +158,16 @@ test("Advanced types z.enum(), z.tuple(), z.union() & z.array() work as expected }) // Tuples expect(metadata.schema?.tuple.schema).toEqual([ - { typeName: 'ZodString', baseType: 'String' }, - { typeName: 'ZodNumber', baseType: 'Number' }, + { zodType: 'ZodString', baseType: 'String' }, + { zodType: 'ZodNumber', baseType: 'Number' }, ]) // Unions expect(metadata.schema?.union.schema).toEqual([ - { typeName: 'ZodString', baseType: 'String' }, - { typeName: 'ZodNumber', baseType: 'Number' }, + { zodType: 'ZodString', baseType: 'String' }, + { zodType: 'ZodNumber', baseType: 'Number' }, ]) // Array - expect(metadata.schema?.array.schema).toEqual({ typeName: 'ZodString', baseType: 'String' }) + expect(metadata.schema?.array.schema).toEqual({ zodType: 'ZodString', baseType: 'String' }) expect(metadata.schema?.array.minLength).toEqual(0) expect(metadata.schema?.array.maxLength).toEqual(5) // Parsing Happy Paths @@ -228,9 +228,9 @@ const Nested = schema('Nested', { test("Nested schemas work as expected", () => { const metadata = Nested.introspect() as Metadata> // Nested Schemas - expect(metadata.schema?.user.typeName).toEqual('ZodObject') - expect(metadata.schema?.primitives.typeName).toEqual('ZodObject') - expect(metadata.schema?.advanced.typeName).toEqual('ZodObject') + expect(metadata.schema?.user.zodType).toEqual('ZodObject') + expect(metadata.schema?.primitives.zodType).toEqual('ZodObject') + expect(metadata.schema?.advanced.zodType).toEqual('ZodObject') // Parsing Happy Paths expect(Nested.shape.user.parse({ name: 'John', age: 42 })).toEqual({ name: 'John', age: 42 }) expect(Nested.shape.primitives.parse({ str: 'Hello', num: 42, bln: true, date: new Date('2020-01-01') })).toEqual({ From 9f9178728b736517a289de319e0dcbdee1eb0271 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Wed, 12 Jun 2024 16:27:52 +0200 Subject: [PATCH 023/126] feat: Add automagic GraphQL codegen for both executable schema & SDL --- features/@app-core/graphql-env.d.ts | 4 +- features/@app-core/graphql/schema.graphql | 10 +- features/@app-core/graphql/schema.ts | 38 +- features/@app-core/graphql/typeDefs.ts | 10 +- .../@app-core/resolvers/healthCheck.bridge.ts | 36 +- .../resolvers/healthCheck.fetcher.web.ts | 4 +- .../@app-core/resolvers/healthCheck.graphql | 37 -- ...healthCheck.ts => healthCheck.resolver.ts} | 0 features/@app-core/routes/api/health/route.ts | 7 +- package-lock.json | 523 +++++++++++++++++- package.json | 3 + .../__mocks__/expo-constants.ts | 27 + packages/@green-stack-core/esbuild-setup.ts | 11 + packages/@green-stack-core/global.d.ts | 14 +- packages/@green-stack-core/package.json | 8 +- packages/@green-stack-core/preload.test.ts | 29 +- packages/@green-stack-core/run-script.js | 11 + .../schemas/createDataBridge.ts | 22 +- .../schemas/createGraphResolver.ts | 28 + .../schemas/createGraphSchemaDefs.ts | 233 ++++++++ .../schemas/createSchemaPlugin.ts | 24 +- packages/@green-stack-core/schemas/index.ts | 113 ++-- .../schemas/tests/bridges.test.ts | 7 +- .../schemas/tests/plugins.test.ts | 134 ++++- .../schemas/tests/schemas.test.ts | 57 +- .../scripts/build-graphql-schema.ts | 12 +- .../@green-stack-core/tsconfig.scripts.json | 21 + .../@green-stack-core/utils/commonUtils.ts | 23 +- packages/@registries/package.json | 9 + packages/@registries/resolversRegistry.ts | 1 + packages/@registries/tsconfig.json | 12 + 31 files changed, 1252 insertions(+), 216 deletions(-) delete mode 100644 features/@app-core/resolvers/healthCheck.graphql rename features/@app-core/resolvers/{healthCheck.ts => healthCheck.resolver.ts} (100%) create mode 100644 packages/@green-stack-core/__mocks__/expo-constants.ts create mode 100644 packages/@green-stack-core/esbuild-setup.ts create mode 100644 packages/@green-stack-core/run-script.js create mode 100644 packages/@green-stack-core/schemas/createGraphResolver.ts create mode 100644 packages/@green-stack-core/schemas/createGraphSchemaDefs.ts create mode 100644 packages/@green-stack-core/tsconfig.scripts.json create mode 100644 packages/@registries/package.json create mode 100644 packages/@registries/resolversRegistry.ts create mode 100644 packages/@registries/tsconfig.json diff --git a/features/@app-core/graphql-env.d.ts b/features/@app-core/graphql-env.d.ts index d48c33b..82ac35e 100644 --- a/features/@app-core/graphql-env.d.ts +++ b/features/@app-core/graphql-env.d.ts @@ -19,11 +19,11 @@ export type introspection = { 'Date': unknown; 'Float': unknown; 'HealthCheckArgs': { kind: 'INPUT_OBJECT'; name: 'HealthCheckArgs'; isOneOf: false; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'showContext'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }]; }; - 'HealthCheckData': { kind: 'OBJECT'; name: 'HealthCheckData'; fields: { 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'backendURL': { name: 'backendURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'context': { name: 'context'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'graphURL': { name: 'graphURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; + 'HealthCheckResponse': { kind: 'OBJECT'; name: 'HealthCheckResponse'; fields: { 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'backendURL': { name: 'backendURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'context': { name: 'context'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'graphURL': { name: 'graphURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; 'Int': unknown; 'JSON': unknown; 'JSONObject': unknown; - 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'healthCheck': { name: 'healthCheck'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'HealthCheckData'; ofType: null; }; } }; }; }; + 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'healthCheck': { name: 'healthCheck'; type: { kind: 'OBJECT'; name: 'HealthCheckResponse'; ofType: null; } }; }; }; 'String': unknown; }; }; diff --git a/features/@app-core/graphql/schema.graphql b/features/@app-core/graphql/schema.graphql index 021b62e..d7f60f8 100644 --- a/features/@app-core/graphql/schema.graphql +++ b/features/@app-core/graphql/schema.graphql @@ -6,16 +6,12 @@ scalar JSON scalar JSONObject -type Query { - healthCheck(args: HealthCheckArgs): HealthCheckData! -} - input HealthCheckArgs { echo: String showContext: Boolean } -type HealthCheckData { +type HealthCheckResponse { echo: String status: String! alive: Boolean! @@ -44,6 +40,10 @@ type HealthCheckData { context: JSON } +type Query { + healthCheck(args: HealthCheckArgs): HealthCheckResponse +} + schema { query: Query } diff --git a/features/@app-core/graphql/schema.ts b/features/@app-core/graphql/schema.ts index 67a16db..f177748 100644 --- a/features/@app-core/graphql/schema.ts +++ b/features/@app-core/graphql/schema.ts @@ -2,47 +2,55 @@ import { mergeResolvers } from '@graphql-tools/merge' import { makeExecutableSchema } from '@graphql-tools/schema' import { GraphQLJSON, GraphQLJSONObject } from 'graphql-type-json' import { gql } from 'graphql-tag' -import type { RequestContext } from '../middleware/createRequestContext' import { typeDefs } from './typeDefs' -import { healthCheck } from '../resolvers/healthCheck' +import * as resolvers from '@app/registries/resolversRegistry' +import { createGraphSchemaDefs } from '@green-stack/core/schemas/createGraphSchemaDefs' /* --- Notes ----------------------------------------------------------------------------------- */ // -i- Workspace package '@green-stack/core' expects this file to be at '/features/app-core/graphql/schema.ts' // -i- Please keep it here to avoid issues -/** --- createResolver() ----------------------------------------------------------------------- */ -/** -i- Helper to wrap a resolver function and map context and args to it */ -export const createResolver = (resolver: (input: { args: A, context: RequestContext }) => Promise) => { - return async (parent: unknown, { args }: { args: A }, context: RequestContext, info: unknown) => { - return resolver({ args, context: { ...context, parent, info } }) - } +/* --- Types ----------------------------------------------------------------------------------- */ + +export type ResolverFn = (parent: any, args: any, context: any, info: any) => any$Unknown + +export type ResolversMap = { + Query?: { [queryName: string]: ResolverFn } + Mutation?: { [mutationName: string]: ResolverFn } } /* --- Custom Resolvers ------------------------------------------------------------------------ */ -const customResolvers = { - Query: { - healthCheck: createResolver(healthCheck), - }, +const customResolvers: ResolversMap = { + // Query: { + // healthCheck: resolvers.healthCheck, // -i- Example of a custom resolver + // }, } /** --- createRootResolver() ------------------------------------------------------------------- */ /** -i- Combine all custom and other (e.g. injected) resolvers */ -export const createRootResolver = () => mergeResolvers([ +export const createRootResolver = (extraResolvers?: ResolversMap) => mergeResolvers([ customResolvers, - /* other resolvers? */ + // Extra resolvers, like from codegen + extraResolvers, + // Custom scalars { JSON: GraphQLJSON, JSONObject: GraphQLJSONObject, } ]) +/* --- Codegen --------------------------------------------------------------------------------- */ + +// -i- Create a resolver map from the resolvers created with createResolver() & createGraphResolver() +const { generatedResolvers } = createGraphSchemaDefs(resolvers) + /* --- Schema ---------------------------------------------------------------------------------- */ export const schemaBundle = { typeDefs: gql`${typeDefs}`, - resolvers: createRootResolver(), + resolvers: createRootResolver(generatedResolvers), } export const executableSchema = makeExecutableSchema(schemaBundle) diff --git a/features/@app-core/graphql/typeDefs.ts b/features/@app-core/graphql/typeDefs.ts index ac60971..a42a74d 100644 --- a/features/@app-core/graphql/typeDefs.ts +++ b/features/@app-core/graphql/typeDefs.ts @@ -6,16 +6,12 @@ scalar JSON scalar JSONObject -type Query { - healthCheck(args: HealthCheckArgs): HealthCheckData! -} - input HealthCheckArgs { echo: String showContext: Boolean } -type HealthCheckData { +type HealthCheckResponse { echo: String status: String! alive: Boolean! @@ -44,6 +40,10 @@ type HealthCheckData { context: JSON } +type Query { + healthCheck(args: HealthCheckArgs): HealthCheckResponse +} + schema { query: Query }` diff --git a/features/@app-core/resolvers/healthCheck.bridge.ts b/features/@app-core/resolvers/healthCheck.bridge.ts index 1a8b56b..2b3b7d4 100644 --- a/features/@app-core/resolvers/healthCheck.bridge.ts +++ b/features/@app-core/resolvers/healthCheck.bridge.ts @@ -15,25 +15,25 @@ export const HealthCheckResponse = schema('HealthCheckResponse', { kicking: z.boolean(), now: z.string(), aliveTime: z.number(), - aliveSince: z.string(), + aliveSince: z.date(), serverTimezone: z.string(), - requestHost: z.string(), - requestProtocol: z.string(), - requestURL: z.string(), - baseURL: z.string(), - backendURL: z.string(), - apiURL: z.string(), - graphURL: z.string(), - port: z.number().nullable(), - debugPort: z.number().nullable(), - nodeVersion: z.string(), - v8Version: z.string(), - systemArch: z.string(), - systemPlatform: z.string(), - systemRelease: z.string(), - systemFreeMemory: z.number(), - systemTotalMemory: z.number(), - systemLoadAverage: z.array(z.number()), + requestHost: z.string().optional(), + requestProtocol: z.string().optional(), + requestURL: z.string().optional(), + baseURL: z.string().optional(), + backendURL: z.string().optional(), + apiURL: z.string().optional(), + graphURL: z.string().optional(), + port: z.number().int().nullable(), + debugPort: z.number().int().nullable(), + nodeVersion: z.string().optional(), + v8Version: z.string().optional(), + systemArch: z.string().optional(), + systemPlatform: z.string().optional(), + systemRelease: z.string().optional(), + systemFreeMemory: z.number().optional(), + systemTotalMemory: z.number().optional(), + systemLoadAverage: z.array(z.number()).optional(), context: z.record(z.string(), z.unknown()).nullish(), }) diff --git a/features/@app-core/resolvers/healthCheck.fetcher.web.ts b/features/@app-core/resolvers/healthCheck.fetcher.web.ts index ff29138..70539dc 100644 --- a/features/@app-core/resolvers/healthCheck.fetcher.web.ts +++ b/features/@app-core/resolvers/healthCheck.fetcher.web.ts @@ -1,5 +1,5 @@ import type { NextRequest, NextResponse } from 'next/server' -import type { HealthCheckArgs, HealthCheckResponse } from './healthCheck' +import type { HealthCheckArgs, HealthCheckResponse } from './healthCheck.bridge' import { appConfig } from '../appConfig' /** --- healthCheckFetcher() ------------------------------------------------------------------- */ @@ -23,7 +23,7 @@ export const healthCheckFetcher = async (args: HealthCheckArgs) => { // -- Server -- - const { healthCheck } = await import('./healthCheck') + const { healthCheck } = await import('./healthCheck.resolver') const data = await healthCheck({ args, context: { diff --git a/features/@app-core/resolvers/healthCheck.graphql b/features/@app-core/resolvers/healthCheck.graphql deleted file mode 100644 index e91b713..0000000 --- a/features/@app-core/resolvers/healthCheck.graphql +++ /dev/null @@ -1,37 +0,0 @@ -type Query { - healthCheck(args: HealthCheckArgs): HealthCheckData! -} - -input HealthCheckArgs { - echo: String - showContext: Boolean -} - -type HealthCheckData { - echo: String - status: String! - alive: Boolean! - kicking: Boolean! - now: String! - aliveTime: Float! - aliveSince: Date! - serverTimezone: String! - requestHost: String - requestProtocol: String - requestURL: String - baseURL: String - backendURL: String - apiURL: String - graphURL: String - port: Int - debugPort: Int - nodeVersion: String - v8Version: String - systemArch: String - systemPlatform: String - systemRelease: String - systemFreeMemory: Float - systemTotalMemory: Float - systemLoadAverage: [Float] - context: JSON -} diff --git a/features/@app-core/resolvers/healthCheck.ts b/features/@app-core/resolvers/healthCheck.resolver.ts similarity index 100% rename from features/@app-core/resolvers/healthCheck.ts rename to features/@app-core/resolvers/healthCheck.resolver.ts diff --git a/features/@app-core/routes/api/health/route.ts b/features/@app-core/routes/api/health/route.ts index 38b14c5..7f60ff0 100644 --- a/features/@app-core/routes/api/health/route.ts +++ b/features/@app-core/routes/api/health/route.ts @@ -1,8 +1,13 @@ +import { createGraphResolver } from '@green-stack/core/schemas/createGraphResolver' import { createNextRouteHandler } from '@green-stack/core/schemas/createNextRouteHandler' -import { healthCheck } from '../../../resolvers/healthCheck' +import { healthCheck } from '@app/core/resolvers/healthCheck.resolver' /* --- Routes ---------------------------------------------------------------------------------- */ export const GET = createNextRouteHandler(healthCheck) export const POST = createNextRouteHandler(healthCheck) + +/* --- GraphQL --------------------------------------------------------------------------------- */ + +export const graphResolver = createGraphResolver(healthCheck) diff --git a/package-lock.json b/package-lock.json index 7c57bfc..30a543d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,9 @@ "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", "turbo": "^1.13.2" + }, + "engines": { + "node": ">=18.19.1" } }, "apps/expo": { @@ -411,6 +414,10 @@ "resolved": "apps/next", "link": true }, + "node_modules/@app/registries": { + "resolved": "packages/@registries", + "link": true + }, "node_modules/@as-integrations/next": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@as-integrations/next/-/next-3.0.0.tgz", @@ -2494,7 +2501,8 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2506,12 +2514,381 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@expo/bunyan": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", @@ -6575,25 +6952,29 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/@types/body-parser": { "version": "1.19.5", @@ -7173,7 +7554,8 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.4.0" } @@ -8498,7 +8880,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/cross-fetch": { "version": "3.1.8", @@ -8892,7 +9275,8 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.3.1" } @@ -9176,6 +9560,56 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/esbuild-register": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", + "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -10246,6 +10680,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/getenv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", @@ -12340,7 +12786,8 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/makeerror": { "version": "1.0.12", @@ -13060,6 +13507,12 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", + "dev": true + }, "node_modules/mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", @@ -14983,6 +15436,15 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", @@ -16453,7 +16915,8 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -16496,13 +16959,33 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/tsx": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.2.tgz", + "integrity": "sha512-kIZTOCmR37nEw0qxQks2dR+eZWSXydhTGmz7yx94vEiJtJGBTkUl0D/jt/5fey+CNdm6i3Cp+29WKRay9ScQUw==", + "dev": true, + "dependencies": { + "esbuild": "~0.21.4", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/turbo": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.13.3.tgz", @@ -16992,7 +17475,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/valid-url": { "version": "1.0.9", @@ -17578,7 +18062,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=6" } @@ -17610,9 +18095,12 @@ "zod": "^3.23.7" }, "devDependencies": { + "@app/registries": "*", "@graphql-tools/load-files": "^7.0.0", "@types/bun": "^1.1.2", - "ts-node": "^10.9.2", + "esbuild-register": "^3.5.0", + "module-alias": "^2.2.3", + "tsx": "^4.15.2", "typescript": "5.3.3" } }, @@ -17628,6 +18116,11 @@ "engines": { "node": ">=14.17" } + }, + "packages/@registries": { + "name": "@app/registries", + "version": "0.0.1", + "devDependencies": {} } } } diff --git a/package.json b/package.json index ec77d06..96a60e4 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,9 @@ "features/*", "packages/*" ], + "engines": { + "node": ">=18.19.1" + }, "overrides": { "graphql": "16.8.1", "next": "~14.0.4" diff --git a/packages/@green-stack-core/__mocks__/expo-constants.ts b/packages/@green-stack-core/__mocks__/expo-constants.ts new file mode 100644 index 0000000..ec4deeb --- /dev/null +++ b/packages/@green-stack-core/__mocks__/expo-constants.ts @@ -0,0 +1,27 @@ +// Mock expo-constants +export const expoConstants = { + expoGoConfig: { + debuggerHost: 'localhost:19000', + }, + manifest2: { + extra: { + expoGo: { + debuggerHost: 'localhost:19000', + }, + }, + }, + default: { + expoGoConfig: { + debuggerHost: 'localhost:19000' + }, + manifest2: { + extra: { + expoGo: { + debuggerHost: 'localhost:19000' + } + } + } + } +} + +export default expoConstants diff --git a/packages/@green-stack-core/esbuild-setup.ts b/packages/@green-stack-core/esbuild-setup.ts new file mode 100644 index 0000000..e83bce8 --- /dev/null +++ b/packages/@green-stack-core/esbuild-setup.ts @@ -0,0 +1,11 @@ +import 'esbuild-register/dist/node' // @ts-ignore +import { addAliases } from 'module-alias' + +/* --- Aliases --------------------------------------------------------------------------------- */ + +addAliases({ + // -i- We need aliases for these as they touch parts of react-native that ship Flow types + // -i- ...which typescript can't deal with. + 'expo-constants': './__mocks__/expo-constants.ts', + 'react-native': 'react-native-web' +}) diff --git a/packages/@green-stack-core/global.d.ts b/packages/@green-stack-core/global.d.ts index 0fd1900..25bfe81 100644 --- a/packages/@green-stack-core/global.d.ts +++ b/packages/@green-stack-core/global.d.ts @@ -8,19 +8,19 @@ type ObjectType = { [key: string]: T } type HintedKeys = string & {} // eslint-disable-line @typescript-eslint/ban-types -type Primitive = string | number | boolean | bigint | symbol | null | undefined; +type Primitive = string | number | boolean | bigint | symbol | null | undefined -type NonNullableRequired = T extends null | undefined ? never : T; +type NonNullableRequired = T extends null | undefined ? never : T type ExtractPrimitives = { - [K in keyof T]: NonNullableRequired extends Primitive ? { [P in K]: string } : ExtractPrimitives; -}[keyof NonNullableRequired]; + [K in keyof T]: NonNullableRequired extends Primitive ? { [P in K]: string } : ExtractPrimitives +}[keyof NonNullableRequired] type DeepFlattenRequired = { - [K in keyof T]-?: NonNullableRequired extends Primitive ? NonNullableRequired : DeepFlattenRequired>; -}; + [K in keyof T]-?: NonNullableRequired extends Primitive ? NonNullableRequired : DeepFlattenRequired> +} -type MergeUnion = (T extends any ? (x: T) => void : never) extends (x: infer R) => void ? { [K in keyof R]: R[K] } : T; +type MergeUnion = (T extends any ? (x: T) => void : never) extends (x: infer R) => void ? { [K in keyof R]: R[K] } : T type ExtractRouteParams = Partial>>> diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index 1c3c57f..d9b27b4 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -2,19 +2,21 @@ "name": "@green-stack/core", "version": "0.0.1", "private": true, - "type": "module", "dependencies": { "crypto-js": "^4.2.0", "zod": "^3.23.7" }, "devDependencies": { + "@app/registries": "*", "@graphql-tools/load-files": "^7.0.0", "@types/bun": "^1.1.2", - "ts-node": "^10.9.2", + "esbuild-register": "^3.5.0", + "module-alias": "^2.2.3", + "tsx": "^4.15.2", "typescript": "5.3.3" }, "scripts": { - "build:schema": "node -r ts-node/register --loader ts-node/esm --experimental-specifier-resolution=node ./scripts/build-graphql-schema.ts", + "build:schema": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/build-graphql-schema.ts", "test": "bun test --preload ./preload.test.ts --tsconfig-override tsconfig.test.json --verbose" } } diff --git a/packages/@green-stack-core/preload.test.ts b/packages/@green-stack-core/preload.test.ts index 68c99e7..e5b0bda 100644 --- a/packages/@green-stack-core/preload.test.ts +++ b/packages/@green-stack-core/preload.test.ts @@ -1,28 +1,11 @@ import { mock } from 'bun:test' -/* --- Mock 'expo-constants' ------------------------------------------------------------------- */ +/* --- Mock Flow typed modules ----------------------------------------------------------------- */ -const expoConstantsMock = { - default: { - expoGoConfig: { - debuggerHost: 'localhost:19000', - }, - manifest2: { - extra: { - expoGo: { - debuggerHost: 'localhost:19000', - }, - }, - }, - } -} +// -i- We need aliases for these as they touch parts of react-native that ship Flow types +// -i- ...which typescript can't deal with. -mock.module('expo-constants', () => expoConstantsMock) -mock.module(require.resolve('expo-constants'), () => expoConstantsMock) - -/* --- Mock 'react-native' --------------------------------------------------------------------- */ - -// @ts-ignore -mock.module('react-native', () => import('react-native-web')) -// @ts-ignore +mock.module('expo-constants', () => import('./__mocks__/expo-constants')) +mock.module(require.resolve('expo-constants'), () => import('./__mocks__/expo-constants')) // @ts-ignore +mock.module('react-native', () => import('react-native-web')) // @ts-ignore mock.module(require.resolve('react-native'), () => import('react-native-web')) diff --git a/packages/@green-stack-core/run-script.js b/packages/@green-stack-core/run-script.js new file mode 100644 index 0000000..6c10601 --- /dev/null +++ b/packages/@green-stack-core/run-script.js @@ -0,0 +1,11 @@ +const { tsImport } = require('tsx/esm/api') +tsImport('./esbuild-setup.ts', __filename) + +const scriptToRun = process.argv[2] + +if (!scriptToRun) { + console.error('No script provided') + process.exit(1) +} + +tsImport(scriptToRun, __filename) diff --git a/packages/@green-stack-core/schemas/createDataBridge.ts b/packages/@green-stack-core/schemas/createDataBridge.ts index d5afed2..9ea8983 100644 --- a/packages/@green-stack-core/schemas/createDataBridge.ts +++ b/packages/@green-stack-core/schemas/createDataBridge.ts @@ -1,7 +1,17 @@ import { TadaDocumentNode, graphql, VariablesOf, ResultOf } from 'gql.tada' import { print } from 'graphql' -import { Metadata, z } from './index' -import { lowercaseFirstChar } from '@green-stack/core/utils/stringUtils' +import { z, Metadata, Meta$Schema } from './index' +import { lowercaseFirstChar } from '../utils/stringUtils' + +/* --- Helpers --------------------------------------------------------------------------------- */ + +export const normalizeInputSchemaName = (schemaName: string, prefix: 'type' | 'input') => { + // Append with 'Input', only if there isn't already an indicator of input in there + const INPUT_INDICATORS = ['Input', 'Args', 'Arguments'] + const isInputSchemaName = INPUT_INDICATORS.some((term) => schemaName?.includes(term)) + if (prefix === 'input' && !isInputSchemaName) return `${schemaName}Input` + return schemaName +} /** --- renderGraphqlQuery() ------------------------------------------------------------------- */ /** -i- Accepts a resolverName, argsSchema and responseSchema and spits out a graphql query that stops at 3 levels (or a custom number) of depth */ @@ -23,7 +33,7 @@ export const renderGraphqlQuery = >, depth: number, fieldName?: string) => { + const renderFields = (schema: Meta$Schema, depth: number, fieldName?: string) => { try { const fieldKeys = Object.keys(schema.schema || schema) const fieldEntries = fieldKeys.map((fieldKey): string => { @@ -70,7 +80,7 @@ export const renderGraphqlQuery = > + let objectSchema = fieldConfig.schema as Meta$Schema return `${spacing}${fieldKey} {\n${renderFields(objectSchema, depth + 1, fieldKey)}\n${spacing}}` }) return fieldEntries.filter(Boolean).join('\n') @@ -81,7 +91,7 @@ export const renderGraphqlQuery = >, 2) + const fields = renderFields(responseSchemaDefs as Meta$Schema, 2) query = query.replace('{{fields}}', fields) return query } diff --git a/packages/@green-stack-core/schemas/createGraphResolver.ts b/packages/@green-stack-core/schemas/createGraphResolver.ts new file mode 100644 index 0000000..749f739 --- /dev/null +++ b/packages/@green-stack-core/schemas/createGraphResolver.ts @@ -0,0 +1,28 @@ +import { z } from '@green-stack/core/schemas' +import type { RequestContext } from '@app/core/middleware/createRequestContext' + +/** --- createGraphResolver() ------------------------------------------------------------------ **/ +/** -i- Codegen: Build a graphQL resolver from aether an resolver */ +export const createGraphResolver = < + ArgsShape extends z.ZodRawShape, + ResShape extends z.ZodRawShape, + ArgsInput = z.ZodObject['_input'], + ResOutput = z.ZodObject['_output'], +>( + resolver: ((input: { args: ArgsInput, context: RequestContext }) => Promise) & { + argSchema: z.ZodObject, + resSchema: z.ZodObject, + isMutation?: boolean + }, +) => { + const wrappedResolver = async (parent: unknown, { args }: { args: ArgsInput }, context: RequestContext, info: unknown) => { + return resolver({ args, context: { ...context, parent, info } }) + } + return Object.assign(wrappedResolver, { + argSchema: resolver.argSchema, + resSchema: resolver.resSchema, + _input: undefined as ArgsInput, + _output: undefined as ResOutput, + isMutation: resolver.isMutation, + }) +} diff --git a/packages/@green-stack-core/schemas/createGraphSchemaDefs.ts b/packages/@green-stack-core/schemas/createGraphSchemaDefs.ts new file mode 100644 index 0000000..43b2d08 --- /dev/null +++ b/packages/@green-stack-core/schemas/createGraphSchemaDefs.ts @@ -0,0 +1,233 @@ +import { gql } from 'graphql-tag' +import { Metadata, Meta$Schema, ZodSchema } from './index' +import { normalizeInputSchemaName } from './createDataBridge' +import { createSchemaPlugin } from './createSchemaPlugin' +import { isEmpty, warnOnce } from '../utils/commonUtils' + +/* --- Constants ------------------------------------------------------------------------------- */ + +const SCHEMA_PRIMITIVES_LOOKUP = { + Boolean: 'Boolean', + Number: 'Float', + Int: 'Int', + Float: 'Float', + String: 'String', + Date: 'Date', +} as const + +/* --- Types ----------------------------------------------------------------------------------- */ + +type ResolverFnType = ((...args: any[]) => Promise) & { + argSchema: ZodSchema, + resSchema: ZodSchema, + isMutation?: boolean +} + +type ResolversMapType = { + [key: string]: ResolverFnType +} + +type ResolverConfig = { + resolverName: string + argSchema: ZodSchema, + resSchema: ZodSchema, + isMutation?: boolean + resolver: ResolverFnType +} + +/** --- createResolverDefinition() ------------------------------------------------------------- */ +/** -i- Creates the base schema definition line to put on the Query or Mutation definition in the GraphQL schema */ +export const createResolverDefinition = (resolverConfig: ResolverConfig) => { + // Vars + const { resolverName, argSchema, resSchema } = resolverConfig + const argsMeta = argSchema?.introspect?.() as Meta$Schema + const resMeta = resSchema?.introspect?.() + // Flags + const hasArgs = !isEmpty(argsMeta) + const areArgsRequired = hasArgs && !argsMeta?.isNullable && !argsMeta?.isOptional + const areArgsOptional = !areArgsRequired || Object.values(argsMeta?.schema!).every((arg) => arg.isOptional || arg.isNullable) // prettier-ignore + const nullableToken = areArgsOptional ? '' : '!' + // If there are args, we need to state an input type for them + if (!argsMeta.name) console.log('argsMeta', argsMeta) + const argsName = normalizeInputSchemaName(argsMeta.name!, 'input') + const argDef = hasArgs ? `(args: ${argsName}${nullableToken})` : '' + // Return resolver definition + return `${resolverName}${argDef}: ${resMeta.name}` +} + +/** --- createDataDefinition() ----------------------------------------------------------------- */ +/** -i- Turns the introspection metadata of a resolver's input / output schema into GraphQL schema definitions */ +export const createSchemaDefinition = ( + schema: Meta$Schema, + prefix: 'type' | 'input' = 'type', +) => { + // Keep track of all (possibly nested) schema definitions + let schemaDefinitions: string[] = [] + // HoC Builder pattern to create schema definitions + const schemaDefinitionBuilder = (graphqlType: string) => { + return (schemaKey: string, fieldMeta: Meta$Schema | Metadata) => { + // Allow overrides of the graphql type to happen in specific cases (e.g. Float vs. Int) + let gqlType = graphqlType + + // Determine nullability + const isNullable = fieldMeta.isNullable || fieldMeta.isOptional + const nullableToken = isNullable ? '' : '!' + + // Extract description - e.g. `"""This is a description"""` + const { description } = fieldMeta + const optionalDescription = description + ? `"""\n ${description}\n """\n ` + : '' + + // Handle Int vs. Float - e.g. `someKey: Int!` + if (fieldMeta.baseType === 'Number' && fieldMeta.isInt) { + gqlType = 'Int' + } + + // Handle nested schemas - e.g. `someKey: SomeData!` + if (graphqlType === 'Schema' && fieldMeta.schema) { + // Add the sub schemas to the list of definitions + schemaDefinitions = [...schemaDefinitions, ...createSchemaDefinition(fieldMeta)] + // Add the definition line for the schema itself + if (!schema.name) console.log('schema', schema) + const schemaName = normalizeInputSchemaName(schema?.name!, prefix) + return `${optionalDescription}${schemaKey}: ${schemaName}${nullableToken}` + } + + // Handle arrays - e.g. `someKey: [String]!` + if (graphqlType === 'Array') { + // Determine the array element type + const primitiveElement = SCHEMA_PRIMITIVES_LOOKUP[fieldMeta.schema.baseType as keyof typeof SCHEMA_PRIMITIVES_LOOKUP] // prettier-ignore + const arrayElementType = primitiveElement || normalizeInputSchemaName(fieldMeta.schema.name!, prefix) // prettier-ignore + // If the array is a schema, we should add that schema's definitions as well + if (!primitiveElement && fieldMeta.schema.schema) { + schemaDefinitions = [ + ...schemaDefinitions, + ...createSchemaDefinition(fieldMeta.schema as unknown as Meta$Schema, prefix), + ] + } + // Add the definition line for the array element + return `${optionalDescription}${schemaKey}: [${arrayElementType}]${nullableToken}` // prettier-ignore + } + + // Handle primitives - e.g. `someKey: String` + return `${optionalDescription}${schemaKey}: ${gqlType}${nullableToken}` + } + } + + // Map the introspection schema types to the GraphQL schema definition types + const schemaMap = createSchemaPlugin(schema, { + Boolean: schemaDefinitionBuilder('Boolean'), + Number: schemaDefinitionBuilder('Float'), + String: schemaDefinitionBuilder('String'), + Date: schemaDefinitionBuilder('Date'), + Array: schemaDefinitionBuilder('Array'), + Object: schemaDefinitionBuilder('Schema'), + Any: schemaDefinitionBuilder('JSON'), + ZodRecord: schemaDefinitionBuilder('JSON'), + }) + + // Transform schema meta into graphql definitions - e.g. `type SomeType { someKey: String! }` + if (!schema.name) console.log('schema', schema) + const finalSchemaName = normalizeInputSchemaName(schema.name!, prefix) + const finalPrefix = finalSchemaName.includes('Input') ? 'input' : prefix + const fullSchemaDef = ` + ${finalPrefix} ${finalSchemaName} { + ${Object.values(schemaMap).join('\n ')} + } + ` + + // Remove excess spacing & newlines + const finalSchemaDef = fullSchemaDef + .split('\n ') + .join('\n') + .replace('\n', '') + .replace('}\n ', '}') + + // Add the schema's own definition to the list + if (!finalSchemaDef.includes('undefined')) { + schemaDefinitions = [finalSchemaDef, ...schemaDefinitions] + } else { + warnOnce(`-!- Skipping schema definition for ${finalSchemaName} due to undefined fields`, { + schema, + prefix, + schemaDefinitions, + }) + } + + // Return results + return schemaDefinitions +} + +/** --- createDataDefinitions() ---------------------------------------------------------------- */ +/** -i- Turns a list of resolvers created with `createResolver()` into GraphQL schema definitions */ +export const createDataDefinitions = (resolverConfigs: ResolverConfig[]) => { + // Use introspection metadata to create schema definitions of the input & output types + const dataDefinitions = resolverConfigs.reduce((acc, { argSchema, resSchema }) => { + const argDefinitions = createSchemaDefinition(argSchema.introspect() as Meta$Schema, 'input') + const resDefinitions = createSchemaDefinition(resSchema.introspect() as Meta$Schema, 'type') + return [...acc, ...argDefinitions, ...resDefinitions] as string[] + }, [] as string[]) + // Flatten the resulting array of definitions (can contain duplicates) + return dataDefinitions.flat() +} + +/** --- createGraphSchemaDefs() ---------------------------------------------------------------- */ +/** -i- Turn a dictionary object of resolvers created with `createResolver()` into GraphQL schema definitions */ +export const createGraphSchemaDefs = (resolvers: ResolversMapType) => { + // Error checks + if (isEmpty(resolvers)) { + warnOnce('-i- No resolvers provided to createGraphSchemaDefs(), no schema definition to generate') + return { + queryResolvers: {}, + mutationResolvers: {}, + graphqlSchemaDefs: gql``, + schemaDefsString: '', + } + } + // Get resolver entries + const resolverEntries = Object.entries(resolvers) + const resolverConfigs = resolverEntries.map(([resolverName, resolver]) => ({ + resolverName, + argSchema: resolver.argSchema, + resSchema: resolver.resSchema, + isMutation: !!resolver.isMutation, + resolver, + })) + // Helper to rebuild the resolvers from their configs + const rebuildFromConfig = (handlers: any, { resolverName, resolver }: ResolverConfig) => ({ + ...handlers, [resolverName]: resolver, + }) + // Figure out the mutation definitions + const mutationConfigs = resolverConfigs.filter((config) => !!config.isMutation) + const mutationResolvers = mutationConfigs.reduce(rebuildFromConfig, {}) + const mutationDefs = mutationConfigs.map(createResolverDefinition).filter(Boolean) + const hasMutations = mutationDefs.length > 0 + const mutationDef = hasMutations ? `type Mutation {\n ${mutationDefs.join('\n ')}\n}` : '' // prettier-ignore + // Figure out the query definitions + const queryConfigs = resolverConfigs.filter((config) => !config.isMutation) + const queryResolvers = queryConfigs.reduce(rebuildFromConfig, {}) + const queryDefs = queryConfigs.map(createResolverDefinition).filter(Boolean) + const hasQueries = queryDefs.length > 0 + const queryDef = hasQueries ? `type Query {\n ${queryDefs.join('\n ')}\n}` : '' + // Figure out the data definitions + const dataSchemaDefs = Array.from(new Set(createDataDefinitions(resolverConfigs))) + // Combine all definitions + const allSchemaDefs = [...dataSchemaDefs, queryDef, mutationDef].filter(Boolean) + const schemaDefsString = allSchemaDefs.join('\n\n') + const graphqlSchemaDefs = gql`${schemaDefsString}` + // Combine all resolvers + const generatedResolvers = { + ...(hasQueries ? { Query: queryResolvers } : {}), + ...(hasMutations ? { Mutation: mutationResolvers } : {}), + } + // Return results + return { + hasQueries, + hasMutations, + generatedResolvers, + graphqlSchemaDefs, + schemaDefsString, + } +} + diff --git a/packages/@green-stack-core/schemas/createSchemaPlugin.ts b/packages/@green-stack-core/schemas/createSchemaPlugin.ts index d2cd103..03556e3 100644 --- a/packages/@green-stack-core/schemas/createSchemaPlugin.ts +++ b/packages/@green-stack-core/schemas/createSchemaPlugin.ts @@ -1,4 +1,4 @@ -import { z, SCHEMA_TYPE, Metadata } from './index' +import { SCHEMA_TYPE, Metadata } from './index' /* --- Types ----------------------------------------------------------------------------------- */ @@ -6,7 +6,7 @@ export type SchemaTypeMap = { [key in SCHEMA_TYPE]?: (schemaKey: string, fieldMeta: Metadata) => unknown } -export type SchemaPluginMap = SchemaTypeMap & { +export type SchemaPluginMap> = SchemaTypeMap & { [key in keyof S]?: (schemaKey: string, fieldMeta: Metadata) => unknown } @@ -25,14 +25,22 @@ export type SchemaPluginMap = SchemaTypeMap & { * }) * ``` */ export const createSchemaPlugin = < - S extends z.ZodRawShape, - P extends SchemaPluginMap + M extends Record = any, + P extends SchemaPluginMap = SchemaPluginMap >( - schema: z.ZodObject, + schemaMeta: Metadata, schemaTypeMap: P ) => { - const metadata = schema.introspect() as Metadata> - const mappedSchema = Object.entries(metadata.schema!).reduce((result, [schemaKey, fieldMeta]) => { + // @ts-expect-error + if (typeof schemaMeta.introspect === 'function') { + throw new Error("createSchemaPlugin() was passed a zod schema instead of it's metadata, please use .introspect() on the schema instead") + } + if (!schemaMeta.schema) { + console.log(schemaMeta) + throw new Error("createSchemaPlugin() was passed a schema without a schema property") + } + // Map schema to new structure + const mappedSchema = Object.entries(schemaMeta.schema!).reduce((result, [schemaKey, fieldMeta]) => { const { baseType, zodType } = fieldMeta // Figure out the builder to use, going from least specific to most specific let mappedSchemaBuilder @@ -47,6 +55,6 @@ export const createSchemaPlugin = < }, {}) // Return mapped schema return mappedSchema as { - [K in keyof S]: SchemaPluginMap[K] extends (schemaKey: string, fieldMeta: Metadata) => infer R ? R : unknown + [K in keyof M]: SchemaPluginMap[K] extends (schemaKey: string, fieldMeta: Metadata) => infer R ? R : unknown } } diff --git a/packages/@green-stack-core/schemas/index.ts b/packages/@green-stack-core/schemas/index.ts index 7ad9c00..773d2d7 100644 --- a/packages/@green-stack-core/schemas/index.ts +++ b/packages/@green-stack-core/schemas/index.ts @@ -1,6 +1,6 @@ import { z, ZodObject, ZodType } from 'zod' -/* --- Types ----------------------------------------------------------------------------------- */ +/* --- Constants ------------------------------------------------------------------------------- */ export const BASE_TYPE_MAP = { // - Primitives - @@ -37,6 +37,8 @@ export const BASE_TYPE_MAP = { ZodEffects: 'Any', // Unsure how to handle, attempted to serialize as JSON } as const +/* --- Types ----------------------------------------------------------------------------------- */ + export type ZOD_TYPE = keyof typeof BASE_TYPE_MAP export type BASE_TYPE = typeof BASE_TYPE_MAP[ZOD_TYPE] export type SCHEMA_TYPE = (ZOD_TYPE | BASE_TYPE) & {} @@ -44,7 +46,7 @@ export type SCHEMA_TYPE = (ZOD_TYPE | BASE_TYPE) & {} export type Metadata | any$Unknown[]> = { zodType: ZOD_TYPE, baseType: BASE_TYPE, - schemaName?: string, + name?: string, isOptional?: boolean, isNullable?: boolean, defaultValue?: any$Unknown, @@ -57,13 +59,33 @@ export type Metadata | any$Unknown[]> = { maxValue?: number, isInt?: boolean, literalValue?: any$Unknown, + literalType?: 'string' | 'boolean' | 'number', + literalBase?: BASE_TYPE, schema?: S, + // only included when calling with .introspect(true) + zodStruct?: z.ZodType & { _def: z.ZodTypeDef & { typeName: ZOD_TYPE } }, } +export type Meta$Schema = Metadata> +export type Meta$Tuple = Metadata +export type Meta$Union = Metadata +export type Meta$Intersection = Metadata<{ left: Metadata, right: Metadata }> + type StackedMeta = Metadata & { zodStruct?: z.ZodType & { _def: z.ZodTypeDef & { typeName: ZOD_TYPE } }, } +export type ZodSchema = z.ZodObject + | z.ZodNullable> + | z.ZodOptional> + | z.ZodDefault> + | z.ZodNullable>> + | z.ZodNullable>> + | z.ZodOptional>> + | z.ZodOptional>> + | z.ZodDefault>> + | z.ZodDefault>> + /* --- Zod extensions -------------------------------------------------------------------------- */ declare module 'zod' { @@ -73,7 +95,7 @@ declare module 'zod' { example(exampleValue: T): this eg(exampleValue: T): this ex(exampleValue: T): this - introspect(): Metadata & Record + introspect(includeZodStruct?: boolean): Meta$Schema & Record } interface ZodObject< @@ -124,7 +146,8 @@ if (!ZodType.prototype.metadata) { const getStackedMeta = ( zodStruct: Z, - stackedMeta = [] as StackedMeta[] + stackedMeta = [] as StackedMeta[], + includeZodStruct = false ): StackedMeta[] => { // Start with actual metadata const meta = { ...zodStruct.metadata() } @@ -158,113 +181,115 @@ if (!ZodType.prototype.metadata) { if (numberType.isInt) meta.isInt = numberType.isInt // Literals if (zodType === 'ZodLiteral') { - const _zodStruct = zodStruct as unknown as z.ZodLiteral - meta.literalValue = _zodStruct.value + const _zodLiteral = zodStruct as unknown as z.ZodLiteral + meta.literalValue = _zodLiteral.value + meta.literalType = typeof meta.literalValue if (typeof meta.literalValue === 'string') meta.baseType = 'String' if (typeof meta.literalValue === 'number') meta.baseType = 'Number' if (typeof meta.literalValue === 'boolean') meta.baseType = 'Boolean' - if (typeof meta.literalValue === 'object') meta.baseType = 'Object' - if (meta.literalValue instanceof Date) meta.baseType = 'Date' - if (Array.isArray(meta.literalValue)) meta.baseType = 'Array' + meta.literalBase = meta.baseType } // Enums if (zodType === 'ZodEnum') { - const _zodStruct = zodStruct as unknown as z.ZodEnum - meta.schema = _zodStruct.options?.reduce((acc: Record, value: any) => { + const _zodEnum = zodStruct as unknown as z.ZodEnum + meta.schema = _zodEnum.options?.reduce((acc: Record, value: any) => { return { ...acc, [value]: value } }, {}) } // Tuples if (zodType === 'ZodTuple') { - const _zodStruct = zodStruct as unknown as z.ZodTuple - meta.schema = _zodStruct.items.map((item: any) => item.introspect?.()).filter(Boolean) + const _zodTuple = zodStruct as unknown as z.ZodTuple + meta.schema = _zodTuple.items.map((item: any) => item.introspect?.(includeZodStruct)).filter(Boolean) } // Unions if (zodType === 'ZodUnion') { - const _zodStruct = zodStruct as unknown as z.ZodUnion - meta.schema = _zodStruct.options.map((option: any) => option.introspect?.()).filter(Boolean) + const _zodUnion = zodStruct as unknown as z.ZodUnion + meta.schema = _zodUnion.options.map((option: any) => option.introspect?.(includeZodStruct)).filter(Boolean) } // Intersections if (zodType === 'ZodIntersection') { - const _zodStruct = zodStruct as unknown as z.ZodIntersection + const _zodIntersection = zodStruct as unknown as z.ZodIntersection meta.schema = { - left: _zodStruct._def.left.introspect?.(), - right: _zodStruct._def.right.introspect?.(), + left: _zodIntersection._def.left.introspect?.(includeZodStruct), + right: _zodIntersection._def.right.introspect?.(includeZodStruct), } } // Discriminated Unions if (zodType === 'ZodDiscriminatedUnion') { - const _zodStruct = zodStruct as unknown as z.ZodDiscriminatedUnion - meta.schema = _zodStruct.options.reduce((acc: any, option: any) => { - return { ...acc, types: [...acc.types, option.introspect?.()] } - }, { discriminator: _zodStruct._def.discriminator, types: [] }) + const _zodUnion = zodStruct as unknown as z.ZodDiscriminatedUnion + meta.schema = _zodUnion.options.reduce((acc: any, option: any) => { + return { ...acc, types: [...acc.types, option.introspect?.(includeZodStruct)] } + }, { discriminator: _zodUnion._def.discriminator, types: [] }) } // Arrays if (zodType === 'ZodArray') { - const _zodStruct = zodStruct as unknown as z.ZodArray - meta.schema = _zodStruct._def.type.introspect?.() + const _zodArray = zodStruct as unknown as z.ZodArray + meta.schema = _zodArray._def.type.introspect?.(includeZodStruct) } // Schemas & Objects if (zodType === 'ZodObject') { - const _zodStruct = zodStruct as unknown as z.ZodObject - meta.schema = Object.entries(_zodStruct.shape).reduce((acc, [key, fieldType]) => { + const _zodObject = zodStruct as unknown as z.ZodObject + meta.schema = Object.entries(_zodObject.shape).reduce((acc, [key, fieldType]) => { // @ts-ignore - return { ...acc, [key]: fieldType.introspect?.() } + return { ...acc, [key]: fieldType.introspect?.(includeZodStruct) } }, {}) } // Records if (zodType === 'ZodRecord') { - const _zodStruct = zodStruct as unknown as z.ZodRecord - meta.schema = _zodStruct._def.valueType.introspect?.() + const _zodRecord = zodStruct as unknown as z.ZodRecord + meta.schema = _zodRecord._def.valueType.introspect?.(includeZodStruct) } // Sets if (zodType === 'ZodSet') { - const _zodStruct = zodStruct as unknown as z.ZodSet - meta.schema = _zodStruct._def.valueType.introspect?.() + const _zodSet = zodStruct as unknown as z.ZodSet + meta.schema = _zodSet._def.valueType.introspect?.(includeZodStruct) } // Maps if (zodType === 'ZodMap') { - const _zodStruct = zodStruct as unknown as z.ZodMap + const _zodMap = zodStruct as unknown as z.ZodMap meta.schema = { - key: _zodStruct._def.keyType.introspect?.(), - value: _zodStruct._def.valueType.introspect?.(), + key: _zodMap._def.keyType.introspect?.(includeZodStruct), + value: _zodMap._def.valueType.introspect?.(includeZodStruct), } } // Functions if (zodType === 'ZodFunction') { - const _zodStruct = zodStruct as unknown as z.ZodFunction + const _zodFunction = zodStruct as unknown as z.ZodFunction meta.schema = { - input: _zodStruct._def.args.introspect?.(), - output: _zodStruct._def.returns.introspect?.(), + input: _zodFunction._def.args.introspect?.(includeZodStruct), + output: _zodFunction._def.returns.introspect?.(includeZodStruct), } } // Promises if (zodType === 'ZodPromise') { - const _zodStruct = zodStruct as unknown as z.ZodPromise - meta.schema = _zodStruct._def.type.introspect?.() + const _zodPromise = zodStruct as unknown as z.ZodPromise + meta.schema = _zodPromise._def.type.introspect?.(includeZodStruct) } // Add the metadata for the current type const currentMetaStack = [...stackedMeta, meta as Metadata] // If we've reached the innermost type, end recursion, return all metadata if (!zodStruct._def.innerType) return currentMetaStack // If there's another inner layer, unwrap it, add to the stack - return getStackedMeta(zodStruct._def.innerType, currentMetaStack) + return getStackedMeta(zodStruct._def.innerType, currentMetaStack, includeZodStruct) } - ZodType.prototype.introspect = function () { + ZodType.prototype.introspect = function (includeZodStruct = false) { // Figure out nested metadata - const stackedMeta = getStackedMeta(this) + const stackedMeta = getStackedMeta(this, [], includeZodStruct) const reversedMeta = [...stackedMeta].reverse() const [innermostMeta] = reversedMeta const zodType = innermostMeta.zodStruct!._def.typeName as unknown as ZOD_TYPE const baseType = BASE_TYPE_MAP[zodType as ZOD_TYPE] // Flatten stacked metadata in reverse order - const flatMeta = reversedMeta.reduce((acc, { zodStruct: _, ...meta }) => ({ + const flatMeta = reversedMeta.reduce((acc, { zodStruct, ...meta }) => ({ ...acc, ...meta, + ...(includeZodStruct ? { zodStruct } : {}) }), {}) - // Return all introspected metadata const meta = { ...flatMeta, zodType, baseType } + // @ts-ignore + if (meta.literalBase) meta.baseType = meta.literalBase + // Return all introspected metadata return meta } diff --git a/packages/@green-stack-core/schemas/tests/bridges.test.ts b/packages/@green-stack-core/schemas/tests/bridges.test.ts index e79ecfb..5148823 100644 --- a/packages/@green-stack-core/schemas/tests/bridges.test.ts +++ b/packages/@green-stack-core/schemas/tests/bridges.test.ts @@ -6,13 +6,14 @@ import { bridgedFetcher } from '../bridgedFetcher' const healtCheckBridge = createDataBridge({ resolverName: 'healthCheck', - argsSchema: schema('HealthCheckArgs', { echo: z.string().default('Hello World') }), + argsSchema: schema('HealthCheck', { echo: z.string().default('Hello World') }), responseSchema: schema('HealthCheckResponse', { echo: z.string().optional() }), apiPath: '/api/health', allowedMethods: ['GET', 'GRAPHQL'], }) -const expectedQuery = `query healthCheck($healthCheckArgs: HealthCheckArgs) { +// -i- When it's an input, we append 'Input' to the name if it doesn't already have it or 'Args' +const expectedQuery = `query healthCheck($healthCheckArgs: HealthCheckInput) { healthCheck(args: $healthCheckArgs) { echo } @@ -40,7 +41,7 @@ test("Bridges created by createDataBridge can use a custom graphql query", async expect(print(graphqlQuery)).not.toBe(expectedQuery) }) -test("bridgedFetcher() can create a fetcher from a DataBridge", async () => { +test("bridgedFetcher() can create a fetcher function from a DataBridge", async () => { expect(() => bridgedFetcher(healtCheckBridge)).not.toThrow() const fetcher = bridgedFetcher(healtCheckBridge) expect(fetcher).toBeInstanceOf(Function) diff --git a/packages/@green-stack-core/schemas/tests/plugins.test.ts b/packages/@green-stack-core/schemas/tests/plugins.test.ts index eba29ca..632afc6 100644 --- a/packages/@green-stack-core/schemas/tests/plugins.test.ts +++ b/packages/@green-stack-core/schemas/tests/plugins.test.ts @@ -1,6 +1,11 @@ import { expect, test } from 'bun:test' +import { print } from 'graphql' import { z, schema } from '../index' import { createSchemaPlugin } from '../createSchemaPlugin' +import { createGraphSchemaDefs } from '../createGraphSchemaDefs' +import { healthCheck } from '../../../@registries/resolversRegistry' + +/* --- createSchemaPlugin() -------------------------------------------------------------------- */ const UserSchema = schema('UserSchema', { name: z.string(), @@ -11,7 +16,7 @@ const UserSchema = schema('UserSchema', { test("createSchemaPlugin() applies the correct builder pattern for baseTypes", () => { // Schema transformer to test - const testPlugin = createSchemaPlugin(UserSchema, { + const testPlugin = createSchemaPlugin(UserSchema.introspect(), { Boolean: (schemaKey, fieldMeta) => 'BaseBool', String: (schemaKey, fieldMeta) => 'BaseString', Number: (schemaKey, fieldMeta) => 'BaseNumber', @@ -26,7 +31,7 @@ test("createSchemaPlugin() applies the correct builder pattern for baseTypes", ( test("createSchemaPlugin() overrides baseType builders for zodType builders", () => { // Schema transformer to test - const testPlugin = createSchemaPlugin(UserSchema, { + const testPlugin = createSchemaPlugin(UserSchema.introspect(), { // Least specific: Should be overridden by more specific mappers Boolean: (schemaKey, fieldMeta) => 'BaseBool', String: (schemaKey, fieldMeta) => 'BaseString', @@ -47,7 +52,7 @@ test("createSchemaPlugin() overrides baseType builders for zodType builders", () test("createSchemaPlugin() overrides zodType builder for schemaKey builders", () => { // Schema transformer to test - const testPlugin = createSchemaPlugin(UserSchema, { + const testPlugin = createSchemaPlugin(UserSchema.introspect(), { // Least specific: Should be overridden by more specific mappers Boolean: (schemaKey, fieldMeta) => 'BaseBool', String: (schemaKey, fieldMeta) => 'BaseString', @@ -69,7 +74,7 @@ test("createSchemaPlugin() overrides zodType builder for schemaKey builders", () test("createSchemaPlugin() skips fields without a builder", () => { // Schema transformer to test - const testPlugin = createSchemaPlugin(UserSchema, { + const testPlugin = createSchemaPlugin(UserSchema.introspect(), { // Only provide a builder for the 'name' field name: (schemaKey, fieldMeta) => 'KeyString', }) @@ -83,7 +88,7 @@ test("createSchemaPlugin() skips fields without a builder", () => { test("createSchemaPlugin() builder functions recieve schemaKey as the first arg", () => { // Schema transformer to test - const testPlugin = createSchemaPlugin(UserSchema, { + const testPlugin = createSchemaPlugin(UserSchema.introspect(), { name: (schemaKey, fieldMeta) => schemaKey, email: (schemaKey, fieldMeta) => schemaKey, age: (schemaKey, fieldMeta) => schemaKey, @@ -98,7 +103,7 @@ test("createSchemaPlugin() builder functions recieve schemaKey as the first arg" test("createSchemaPlugin() builder functions recieve fieldMeta as the second arg", () => { // Schema transformer to test - const testPlugin = createSchemaPlugin(UserSchema, { + const testPlugin = createSchemaPlugin(UserSchema.introspect(), { name: (schemaKey, fieldMeta) => JSON.stringify(fieldMeta), email: (schemaKey, fieldMeta) => JSON.stringify(fieldMeta), age: (schemaKey, fieldMeta) => JSON.stringify(fieldMeta), @@ -110,3 +115,120 @@ test("createSchemaPlugin() builder functions recieve fieldMeta as the second arg expect(testPlugin.age).toBe(JSON.stringify(UserSchema.shape.age.introspect())) expect(testPlugin.birthdate).toBe(JSON.stringify(UserSchema.shape.birthdate.introspect())) }) + +/* --- createGraphSchemaDefs() ----------------------------------------------------------------- */ + +const ByID = schema('ByID', { id: z.string() }).nullish() + +const getUser = Object.assign(async () => {}, { + argSchema: ByID, + resSchema: UserSchema, +}) + +const updateUser = Object.assign(async () => {}, { + argSchema: UserSchema, + resSchema: UserSchema.nullable(), + isMutation: true, +}) + +test("createGraphSchemaDefs() generates a valid GraphQL schema from a list of resolvers", () => { + const { graphqlSchemaDefs } = createGraphSchemaDefs({ getUser, updateUser }) + // Check if the generated schema is valid + expect(() => print(graphqlSchemaDefs)).not.toThrow() +}) + +test("createGraphSchemaDefs() correctly splits resolvers into queries & mutations", () => { + // Only queries + const queryOnly = createGraphSchemaDefs({ getUser }) + expect(queryOnly.hasQueries).toBe(true) + expect(queryOnly.hasMutations).toBe(false) + expect(Object.keys(queryOnly.generatedResolvers!.Query)).toContain('getUser') + expect(queryOnly.generatedResolvers!.Mutation).toBeUndefined() + // Only mutations + const mutationOnly = createGraphSchemaDefs({ updateUser }) + expect(mutationOnly.hasQueries).toBe(false) + expect(mutationOnly.hasMutations).toBe(true) + expect(mutationOnly.generatedResolvers!.Query).toBeUndefined() + expect(Object.keys(mutationOnly.generatedResolvers!.Mutation)).toContain('updateUser') + // Both queries & mutations + const both = createGraphSchemaDefs({ getUser, updateUser }) + expect(both.hasQueries).toBe(true) + expect(both.hasMutations).toBe(true) + expect(Object.keys(both.generatedResolvers!.Query)).toContain('getUser') + expect(Object.keys(both.generatedResolvers!.Mutation)).toContain('updateUser') +}) + +test("createGraphSchemaDefs() generates correct Query { .. } & Mutation { ... } definitions", () => { + const { graphqlSchemaDefs } = createGraphSchemaDefs({ getUser, updateUser }) + const printedSchema = print(graphqlSchemaDefs) + // Check queries + expect(printedSchema).toContain('Query {') + expect(printedSchema).toContain('getUser(args: ByIDInput): UserSchema') + // Check mutations + expect(printedSchema).toContain('Mutation {') + expect(printedSchema).toContain('updateUser(args: UserSchemaInput!): UserSchema') +}) + +test("createGraphSchemaDefs() generates correct Input & Data definitions", () => { + const { graphqlSchemaDefs } = createGraphSchemaDefs({ getUser, updateUser }) + const printedSchema = print(graphqlSchemaDefs) + // Check input data definitions + expect(printedSchema).toContain('input ByIDInput {') + expect(printedSchema).toContain('input UserSchemaInput {') + // Check output data definitions + expect(printedSchema).toContain('type UserSchema {') + // Check field definitions + expect(printedSchema).toContain('name: String!') + expect(printedSchema).toContain('email: String!') + expect(printedSchema).toContain('age: Float!') + expect(printedSchema).toContain('birthdate: Date!') +}) + +test("createGraphSchemaDefs() generates correct nullable output data definitions", () => { + const { graphqlSchemaDefs } = createGraphSchemaDefs({ + testOptionals: Object.assign(async () => {}, { + argSchema: schema('Optional', { + nullable: z.string().nullable(), + optional: z.string().optional(), + defaulted: z.string().default('default'), + }), + resSchema: schema('Optional', { + nullable: z.string().nullable(), + optional: z.string().optional(), + defaulted: z.string().default('default'), + }), + }), + }) + const printedSchema = print(graphqlSchemaDefs) + // Check nullable field definitions + expect(printedSchema).toContain('nullable: String') + expect(printedSchema).not.toContain('nullable: String!') +}) + +test("createGraphSchemaDefs() can handle resolvers created by createGraphResolver()", () => { + const { graphqlSchemaDefs } = createGraphSchemaDefs({ healthCheck }) + const printedSchema = print(graphqlSchemaDefs) + // Check queries + expect(printedSchema).toContain('Query {') + expect(printedSchema).toContain('healthCheck(args: HealthCheckArgs): HealthCheckResponse') + // Check input definitions + expect(printedSchema).toContain('input HealthCheckArgs {') + // Check output definitions + expect(printedSchema).toContain('type HealthCheckResponse {') +}) + +test("createGraphSchemaDefs() correctly differentiates between Int & Float", () => { + const testSchema = schema('TestSchema', { + int: z.number().int(), + float: z.number(), // Default is Float + }) + const testResolver = Object.assign(async () => {}, { + argSchema: testSchema, + resSchema: testSchema, + }) + const { graphqlSchemaDefs } = createGraphSchemaDefs({ testResolver }) + const printedSchema = print(graphqlSchemaDefs) + // Check field definitions + expect(printedSchema).toContain('int: Int!') + expect(printedSchema).toContain('float: Float!') +}) diff --git a/packages/@green-stack-core/schemas/tests/schemas.test.ts b/packages/@green-stack-core/schemas/tests/schemas.test.ts index a70ef59..5e50769 100644 --- a/packages/@green-stack-core/schemas/tests/schemas.test.ts +++ b/packages/@green-stack-core/schemas/tests/schemas.test.ts @@ -1,5 +1,5 @@ import { expect, test } from 'bun:test' -import { z, schema, Metadata } from '../index' +import { z, schema, Meta$Schema } from '../index' import { ZodError } from 'zod' /* --- Schema Essentials ----------------------------------------------------------------------- */ @@ -37,7 +37,7 @@ const Primitives = schema('Primitives', { }) test("Optionality, defaults & example values persist in schema introspection", () => { - const metadata = Primitives.introspect() as Metadata> + const metadata = Primitives.introspect() as Meta$Schema // Optionality expect(metadata.schema?.str.isOptional).toEqual(true) expect(metadata.schema?.str.isNullable).toEqual(true) @@ -64,7 +64,7 @@ test("Descriptions persist in introspection, no matter where they're defined", ( bln: z.coerce.boolean().example(true).describe('Some boolean').optional(), date: z.coerce.date().describe('Some date').nullable(), }) - const metadata = DescriptionTest.introspect() as Metadata> + const metadata = DescriptionTest.introspect() as Meta$Schema expect(metadata.schema?.str.description).toEqual('Some string') expect(metadata.schema?.num.description).toEqual('Some number') expect(metadata.schema?.bln.description).toEqual('Some boolean') @@ -101,7 +101,7 @@ test("Supports custom error messages for each validation step", () => { /* --- Primitives ------------------------------------------------------------------------------ */ test("Primitives z.string(), z.number(), z.boolean() & z.date() work as expected", () => { - const metadata = Primitives.introspect() as Metadata> + const metadata = Primitives.introspect() as Meta$Schema // Base Types expect(metadata.schema?.str.baseType).toEqual('String') expect(metadata.schema?.num.baseType).toEqual('Number') @@ -129,6 +129,17 @@ test("Primitives z.string(), z.number(), z.boolean() & z.date() work as expected expect(() => Primitives.shape.num.parse(51)).toThrow() // Too high }) +/* --- Subtypes -------------------------------------------------------------------------------- */ + +test("Adds the .isInt metadata to z.number().int()", () => { + const Int = schema('Int', { + int: z.number().int(), + }) + const metadata = Int.introspect() as Meta$Schema + expect(metadata.schema?.int.zodType).toEqual('ZodNumber') + expect(metadata.schema?.int.isInt).toEqual(true) +}) + /* --- Advanced Types -------------------------------------------------------------------------- */ const AdvancedTypes = schema('AdvancedTypes', { @@ -139,7 +150,7 @@ const AdvancedTypes = schema('AdvancedTypes', { }) test("Advanced types z.enum(), z.tuple(), z.union() & z.array() work as expected", () => { - const metadata = AdvancedTypes.introspect() as Metadata> + const metadata = AdvancedTypes.introspect() as Meta$Schema // Base Types expect(metadata.schema?.enum.baseType).toEqual('String') expect(metadata.schema?.tuple.baseType).toEqual('Any') // Experimental support, serialized as JSON @@ -182,6 +193,31 @@ test("Advanced types z.enum(), z.tuple(), z.union() & z.array() work as expected expect(() => AdvancedTypes.shape.array.parse(['world', '24'])).toThrow() // Too long }) +test("Recognizes z.literal() based on the primitive type of the literal's value", () => { + const Literal = schema('Literal', { + literalStr: z.literal('Hello'), + literalNum: z.literal(42), + literalBln: z.literal(true), + }) + const metadata = Literal.introspect() as Meta$Schema + // Metadata should contain the literal value + expect(metadata.schema?.literalStr.literalValue).toEqual('Hello') + expect(metadata.schema?.literalNum.literalValue).toEqual(42) + expect(metadata.schema?.literalBln.literalValue).toEqual(true) + // Metadata should contain the literal type + expect(metadata.schema?.literalStr.literalType).toEqual('string') + expect(metadata.schema?.literalNum.literalType).toEqual('number') + expect(metadata.schema?.literalBln.literalType).toEqual('boolean') + // Metadata should contain the literal baseType + expect(metadata.schema?.literalStr.literalBase).toEqual('String') + expect(metadata.schema?.literalNum.literalBase).toEqual('Number') + expect(metadata.schema?.literalBln.literalBase).toEqual('Boolean') + // Base Types + expect(metadata.schema?.literalStr.baseType).toEqual('String') + expect(metadata.schema?.literalNum.baseType).toEqual('Number') + expect(metadata.schema?.literalBln.baseType).toEqual('Boolean') +}) + /* --- Derived Schemas ------------------------------------------------------------------------- */ test("Deriving schemas with .extendSchema(), .omitSchema(), .pickSchema() work as expected", () => { @@ -226,7 +262,7 @@ const Nested = schema('Nested', { }) test("Nested schemas work as expected", () => { - const metadata = Nested.introspect() as Metadata> + const metadata = Nested.introspect() as Meta$Schema // Nested Schemas expect(metadata.schema?.user.zodType).toEqual('ZodObject') expect(metadata.schema?.primitives.zodType).toEqual('ZodObject') @@ -247,3 +283,12 @@ test("Nested schemas work as expected", () => { }) }) +/* --- Introspection flags --------------------------------------------------------------------- */ + +test("Calling .introspect(true) includes the correct zodStruct", () => { + const metadata = Nested.introspect(true) as Meta$Schema + // Nested Schemas + expect(metadata.schema?.user.zodStruct).toEqual(User) + expect(metadata.schema?.primitives.zodStruct).toEqual(Primitives) + expect(metadata.schema?.advanced.zodStruct).toEqual(AdvancedTypes) +}) diff --git a/packages/@green-stack-core/scripts/build-graphql-schema.ts b/packages/@green-stack-core/scripts/build-graphql-schema.ts index b96250b..d0971d6 100644 --- a/packages/@green-stack-core/scripts/build-graphql-schema.ts +++ b/packages/@green-stack-core/scripts/build-graphql-schema.ts @@ -1,10 +1,14 @@ #!/usr/bin/env node --experimental-specifier-resolution=node +// import 'tsconfig-paths/register' +// import 'ts-node/register/transpile-only' import path from 'path' import fs from 'fs' import { fileURLToPath } from 'node:url' import { loadFilesSync } from '@graphql-tools/load-files' import { mergeTypeDefs } from '@graphql-tools/merge' import { print } from 'graphql' +import { createGraphSchemaDefs } from '../schemas/createGraphSchemaDefs' +import * as resolvers from '@app/registries/resolversRegistry' /* --- Constants ------------------------------------------------------------------------------- */ @@ -18,21 +22,23 @@ const CUSTOM_SCALARS = ['scalar Date', 'scalar JSON', 'scalar JSONObject'] as co /** --- createSchemaDefinitions() -------------------------------------------------------------- */ /** -i- Combine all custom and other (e.g. generated) .graphql schema definitions */ -export const createSchemaDefinitions = () => { +export const createSchemaDefinitions = (extraResolvers: any[] = []) => { const rootDir = path.resolve(currentDir, '../../..') const schemaPathPattern = `${rootDir}/(features|packages)/**/!(schema).graphql` const customGraphQLDefinitions = loadFilesSync(schemaPathPattern) return mergeTypeDefs([ ...CUSTOM_SCALARS, ...customGraphQLDefinitions, - /* TODO: Support other custom typedefs? */ + ...extraResolvers, ]) } /* --- Script ---------------------------------------------------------------------------------- */ const buildSchemaDefinitions = async () => { - const schemaDefinitions = createSchemaDefinitions() + // @ts-ignore + const { graphqlSchemaDefs } = createGraphSchemaDefs(resolvers) + const schemaDefinitions = createSchemaDefinitions([graphqlSchemaDefs]) const typeDefsString = print(schemaDefinitions) fs.writeFileSync(schemaPath, `## ${disclaimer}\n${typeDefsString}\n`) fs.writeFileSync(typeDefsPath, `// ${disclaimer}\nexport const typeDefs = \`${typeDefsString}\`\n`) diff --git a/packages/@green-stack-core/tsconfig.scripts.json b/packages/@green-stack-core/tsconfig.scripts.json new file mode 100644 index 0000000..048163c --- /dev/null +++ b/packages/@green-stack-core/tsconfig.scripts.json @@ -0,0 +1,21 @@ +{ + "extends": "@app/core/tsconfig", + "compilerOptions": { + "module": "CommonJS", + "target": "ESNext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "baseUrl": ".", + }, + "include": [ + "**/*.ts", + "**/*.tsx", + "../../features/**/*.ts", + "../../features/**/*.tsx", + "../../features/app-core/graphql-env.d.ts", + "global.d.ts" + ], + "exclude": ["node_modules"] +} diff --git a/packages/@green-stack-core/utils/commonUtils.ts b/packages/@green-stack-core/utils/commonUtils.ts index ae65605..a192dc3 100644 --- a/packages/@green-stack-core/utils/commonUtils.ts +++ b/packages/@green-stack-core/utils/commonUtils.ts @@ -1,4 +1,3 @@ - /* --- Constants ------------------------------------------------------------------------------- */ const LOGS: string[] = [] @@ -15,19 +14,29 @@ export const isEmpty = ( return false // not empty } -/** --- logOnce() ------------------------------------------------------------------------------ */ +/** --- consoleOnce() ------------------------------------------------------------------------------ */ /** -i- Log out to the console only once, skip on subsequent logs. Good for one-off messages. */ -export const logOnce = (message: string, logger = console.log) => { +export const consoleOnce = (message: string, logger = console.log, ...restMessages: any$Unknown[]) => { if (!LOGS.includes(message)) { logger(message) LOGS.push(message) } } -/** --- errorOnce() ---------------------------------------------------------------------------- */ -/** -i- Warn to the console only once, skip on subsequent logs. Good for one-off errors. */ -export const errorOnce = (message: string) => logOnce(message, console.error) +/** --- logOnce() ------------------------------------------------------------------------------ */ +/** -i- Log out to the console only once, skip on subsequent logs. Good for one-off messages. */ +export const logOnce = (message: string, ...restMessages: any$Unknown[]) => { + return consoleOnce(message, console.log, ...restMessages) +} /** --- warnOnce() ----------------------------------------------------------------------------- */ /** -i- Error to the console only once, skip on subsequent logs. Good for one-off warnings. */ -export const warnOnce = (message: string) => logOnce(message, console.warn) +export const warnOnce = (message: string, ...restMessages: any$Unknown[]) => { + return consoleOnce(message, console.warn, ...restMessages) +} + +/** --- errorOnce() ---------------------------------------------------------------------------- */ +/** -i- Warn to the console only once, skip on subsequent logs. Good for one-off errors. */ +export const errorOnce = (message: string, ...restMessages: any$Unknown[]) => { + return consoleOnce(message, console.error, ...restMessages) +} diff --git a/packages/@registries/package.json b/packages/@registries/package.json new file mode 100644 index 0000000..0c7237e --- /dev/null +++ b/packages/@registries/package.json @@ -0,0 +1,9 @@ +{ + "name": "@app/registries", + "version": "0.0.1", + "private": true, + "type": "module", + "dependencies": {}, + "devDependencies": {}, + "scripts": {} +} diff --git a/packages/@registries/resolversRegistry.ts b/packages/@registries/resolversRegistry.ts new file mode 100644 index 0000000..8f68c93 --- /dev/null +++ b/packages/@registries/resolversRegistry.ts @@ -0,0 +1 @@ +export { graphResolver as healthCheck } from '@app/core/routes/api/health/route' diff --git a/packages/@registries/tsconfig.json b/packages/@registries/tsconfig.json new file mode 100644 index 0000000..c4a1ae8 --- /dev/null +++ b/packages/@registries/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@app/core/tsconfig", + "include": [ + "**/*.ts", + "**/*.tsx", + "../../features/**/*.ts", + "../../features/**/*.tsx", + "../../features/app-core/graphql-env.d.ts", + "../@green-stack-core/global.d.ts" + ], + "exclude": ["node_modules"] +} From 57312978006a52f953e7f43d9889f0f610a19d4f Mon Sep 17 00:00:00 2001 From: codinsonn Date: Thu, 13 Jun 2024 17:03:23 +0200 Subject: [PATCH 024/126] feat: Add scriptUtils to build scripts and generators with --- .../@app-core/resolvers/healthCheck.bridge.ts | 45 +--- features/@app-core/schemas/HealthCheckArgs.ts | 12 + .../@app-core/schemas/HealthCheckResponse.ts | 36 +++ features/@app-core/tsconfig.json | 3 +- package-lock.json | 17 ++ packages/@green-stack-core/package.json | 1 + .../schemas/createDataBridge.ts | 18 +- .../scripts/helpers/scriptUtils.test.ts | 176 +++++++++++++ .../scripts/helpers/scriptUtils.ts | 249 ++++++++++++++++++ packages/@green-stack-core/tsconfig.json | 2 +- .../@green-stack-core/utils/stringUtils.ts | 16 +- 11 files changed, 524 insertions(+), 51 deletions(-) create mode 100644 features/@app-core/schemas/HealthCheckArgs.ts create mode 100644 features/@app-core/schemas/HealthCheckResponse.ts create mode 100644 packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts create mode 100644 packages/@green-stack-core/scripts/helpers/scriptUtils.ts diff --git a/features/@app-core/resolvers/healthCheck.bridge.ts b/features/@app-core/resolvers/healthCheck.bridge.ts index 2b3b7d4..2829c8c 100644 --- a/features/@app-core/resolvers/healthCheck.bridge.ts +++ b/features/@app-core/resolvers/healthCheck.bridge.ts @@ -1,47 +1,6 @@ -import { z, schema } from '@green-stack/core/schemas' import { createDataBridge } from '@green-stack/core/schemas/createDataBridge' - -/* --- Schemas --------------------------------------------------------------------------------- */ - -export const HealthCheckArgs = schema('HealthCheckArgs', { - echo: z.string().default('Hello World'), - showContext: z.boolean().default(false), -}) - -export const HealthCheckResponse = schema('HealthCheckResponse', { - echo: z.string().optional(), - status: z.literal('OK'), - alive: z.boolean(), - kicking: z.boolean(), - now: z.string(), - aliveTime: z.number(), - aliveSince: z.date(), - serverTimezone: z.string(), - requestHost: z.string().optional(), - requestProtocol: z.string().optional(), - requestURL: z.string().optional(), - baseURL: z.string().optional(), - backendURL: z.string().optional(), - apiURL: z.string().optional(), - graphURL: z.string().optional(), - port: z.number().int().nullable(), - debugPort: z.number().int().nullable(), - nodeVersion: z.string().optional(), - v8Version: z.string().optional(), - systemArch: z.string().optional(), - systemPlatform: z.string().optional(), - systemRelease: z.string().optional(), - systemFreeMemory: z.number().optional(), - systemTotalMemory: z.number().optional(), - systemLoadAverage: z.array(z.number()).optional(), - context: z.record(z.string(), z.unknown()).nullish(), -}) - -/* --- Type Aliases ---------------------------------------------------------------------------- */ - -export type HealthCheckArgs = z.infer - -export type HealthCheckResponse = z.infer +import { HealthCheckArgs } from '../schemas/HealthCheckArgs' +import { HealthCheckResponse } from '../schemas/HealthCheckResponse' /* --- Bridge ---------------------------------------------------------------------------------- */ diff --git a/features/@app-core/schemas/HealthCheckArgs.ts b/features/@app-core/schemas/HealthCheckArgs.ts new file mode 100644 index 0000000..b733726 --- /dev/null +++ b/features/@app-core/schemas/HealthCheckArgs.ts @@ -0,0 +1,12 @@ +import { z, schema } from '@green-stack/core/schemas' + +/* --- Schemas --------------------------------------------------------------------------------- */ + +export const HealthCheckArgs = schema('HealthCheckArgs', { + echo: z.string().default('Hello World'), + showContext: z.boolean().default(false), +}) + +/* --- Type Alias ------------------------------------------------------------------------------ */ + +export type HealthCheckArgs = z.infer diff --git a/features/@app-core/schemas/HealthCheckResponse.ts b/features/@app-core/schemas/HealthCheckResponse.ts new file mode 100644 index 0000000..98e3833 --- /dev/null +++ b/features/@app-core/schemas/HealthCheckResponse.ts @@ -0,0 +1,36 @@ +import { z, schema } from '@green-stack/core/schemas' + +/* --- Schemas --------------------------------------------------------------------------------- */ + +export const HealthCheckResponse = schema('HealthCheckResponse', { + echo: z.string().optional(), + status: z.literal('OK'), + alive: z.boolean(), + kicking: z.boolean(), + now: z.string(), + aliveTime: z.number(), + aliveSince: z.date(), + serverTimezone: z.string(), + requestHost: z.string().optional(), + requestProtocol: z.string().optional(), + requestURL: z.string().optional(), + baseURL: z.string().optional(), + backendURL: z.string().optional(), + apiURL: z.string().optional(), + graphURL: z.string().optional(), + port: z.number().int().nullable(), + debugPort: z.number().int().nullable(), + nodeVersion: z.string().optional(), + v8Version: z.string().optional(), + systemArch: z.string().optional(), + systemPlatform: z.string().optional(), + systemRelease: z.string().optional(), + systemFreeMemory: z.number().optional(), + systemTotalMemory: z.number().optional(), + systemLoadAverage: z.array(z.number()).optional(), + context: z.record(z.string(), z.unknown()).nullish(), +}) + +/* --- Type Alias ------------------------------------------------------------------------------ */ + +export type HealthCheckResponse = z.infer diff --git a/features/@app-core/tsconfig.json b/features/@app-core/tsconfig.json index 013da6a..6934705 100644 --- a/features/@app-core/tsconfig.json +++ b/features/@app-core/tsconfig.json @@ -22,7 +22,8 @@ "schema": "./graphql/schema.graphql", "tadaOutputLocation": "./graphql-env.d.ts" } - ] + ], + "types": ["node", "glob"] }, "include": [ "next-env.d.ts", diff --git a/package-lock.json b/package-lock.json index 30a543d..2abfdd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7057,6 +7057,16 @@ "@types/send": "*" } }, + "node_modules/@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "dev": true, + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -7098,6 +7108,12 @@ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, "node_modules/@types/node": { "version": "20.12.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", @@ -18098,6 +18114,7 @@ "@app/registries": "*", "@graphql-tools/load-files": "^7.0.0", "@types/bun": "^1.1.2", + "@types/glob": "^8.1.0", "esbuild-register": "^3.5.0", "module-alias": "^2.2.3", "tsx": "^4.15.2", diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index d9b27b4..8f2b895 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -10,6 +10,7 @@ "@app/registries": "*", "@graphql-tools/load-files": "^7.0.0", "@types/bun": "^1.1.2", + "@types/glob": "^8.1.0", "esbuild-register": "^3.5.0", "module-alias": "^2.2.3", "tsx": "^4.15.2", diff --git a/packages/@green-stack-core/schemas/createDataBridge.ts b/packages/@green-stack-core/schemas/createDataBridge.ts index 9ea8983..3a266a6 100644 --- a/packages/@green-stack-core/schemas/createDataBridge.ts +++ b/packages/@green-stack-core/schemas/createDataBridge.ts @@ -3,11 +3,21 @@ import { print } from 'graphql' import { z, Metadata, Meta$Schema } from './index' import { lowercaseFirstChar } from '../utils/stringUtils' -/* --- Helpers --------------------------------------------------------------------------------- */ +/* --- Constants ------------------------------------------------------------------------------- */ +const INPUT_INDICATORS = ['Input', 'Args', 'Arguments'] as const + +const ALLOWED_METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'GRAPHQL'] as const + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type INPUT_INDICATORS = typeof INPUT_INDICATORS[number] + +export type ALLOWED_METHODS = typeof ALLOWED_METHODS[number] + +/** --- normalizeInputSchemaName() ------------------------------------------------------------- */ +/** -i- Appends schema name with 'Input', but only if there isn't already an indicator of input in there */ export const normalizeInputSchemaName = (schemaName: string, prefix: 'type' | 'input') => { - // Append with 'Input', only if there isn't already an indicator of input in there - const INPUT_INDICATORS = ['Input', 'Args', 'Arguments'] const isInputSchemaName = INPUT_INDICATORS.some((term) => schemaName?.includes(term)) if (prefix === 'input' && !isInputSchemaName) return `${schemaName}Input` return schemaName @@ -125,7 +135,7 @@ export const createDataBridge = < argsSchema: z.ZodObject responseSchema: z.ZodObject apiPath?: string - allowedMethods?: ('GRAPHQL' | 'GET' | 'POST' | 'PUT' | 'DELETE')[] + allowedMethods?: ALLOWED_METHODS[] graphqlQuery?: CustomQuery isMutation?: boolean }) => { diff --git a/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts b/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts new file mode 100644 index 0000000..f839945 --- /dev/null +++ b/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts @@ -0,0 +1,176 @@ +import { test, expect } from 'bun:test' +import * as utils from './scriptUtils' + +/* --- String utils ---------------------------------------------------------------------------- */ + +test('snakeToCamel() converts snake_case to camelCase', () => { + const result = utils.snakeToCamel('snake_case') + expect(result).toBe('snakeCase') +}) + +test('snakeToDash() converts snake_case to kebab-case', () => { + const result = utils.snakeToDash('snake_case') + expect(result).toBe('snake-case') +}) + +test('dashToCamel() converts kebab-case to camelCase', () => { + const result = utils.dashToCamel('kebab-case') + expect(result).toBe('kebabCase') +}) + +test('dashToSnake() converts kebab-case to snake_case', () => { + const result = utils.dashToSnake('kebab-case') + expect(result).toBe('kebab_case') +}) + +test('camelToSnake() converts camelCase to snake_case', () => { + const result = utils.camelToSnake('camelCase') + expect(result).toBe('camel_case') +}) + +test('camelToDash() converts camelCase to kebab-case', () => { + const result = utils.camelToDash('camelCase') + expect(result).toBe('camel-case') +}) + +test('uppercaseFirstChar() converts the first character of a string to uppercase', () => { + const result = utils.uppercaseFirstChar('test') + expect(result).toBe('Test') +}) + +test('lowercaseFirstChar() converts the first character of a string to lowercase', () => { + const result = utils.lowercaseFirstChar('Test') + expect(result).toBe('test') +}) + +test('replaceStringVars() replaces placeholders in a string with values from an object', () => { + const result = utils.replaceStringVars('Hello {name}', { name: 'John' }) + expect(result).toBe('Hello John') +}) + +test('findTargetString() extracts a target string from a source string', () => { + const result = utils.findTargetString( + 'some/path/to/specific-folder/icons/', + 'some/path/to/$target$/icons/', + ) + expect(result).toBe('specific-folder') +}) + +test('replaceMany() replaces multiple strings in a source string with a replacement string', () => { + const result1 = utils.replaceMany('useUpdateDataForm()', ['Update', 'Add'], '') + expect(result1).toBe('useDataForm()') + const result2 = utils.replaceMany('useAddUserForm()', ['Update', 'Add'], '') + expect(result2).toBe('useUserForm()') +}) + + +/* --- Script utils ---------------------------------------------------------------------------- */ + +test('excludeDirs() removes folders from a list of file paths', () => { + const paths = ['a/b/c', 'a/b/c.ts', 'a/b/e', 'a/b/c.tsx'] + const result = paths.filter(utils.excludeDirs) + expect(result).toEqual(['a/b/c.ts', 'a/b/c.tsx']) +}) + +test('excludeModules() removes node_modules folders from a list of file paths', () => { + const paths = ['a/b/c', 'a/b/c.ts', 'a/b/node_modules', 'a/b/c.tsx'] + const result = paths.filter(utils.excludeModules) + expect(result).toEqual(['a/b/c', 'a/b/c.ts', 'a/b/c.tsx']) +}) + +test('normalizeName() removes all non-letter characters from a string', () => { + const result = utils.normalizeName('a1b2c3.,!@#') + expect(result).toBe('abc') +}) + +test('matchMethods() checks if a method name is included in a list of method names', () => { + const methods = ['GET', 'POST', 'GRAPHQL'] + const result = utils.matchMethods(methods, 'GET') + expect(result).toBe(true) +}) + +test('includesOption() returns a filter method that checks if a string includes any of the options', () => { + const includesGet = utils.includesOption(['GET', 'POST']) + const result = ['GET', 'POST', 'PUT'].filter(includesGet) + expect(result).toEqual(['GET', 'POST']) +}) + +test('createAutocompleteSource() returns a function that filters options based on input', () => { + const autocompleteSource = utils.createAutocompleteSource(['GET', 'POST', 'PUT']) + expect(autocompleteSource({}, 'P')).resolves.toEqual(['POST', 'PUT']) + expect(autocompleteSource({}, 'G')).resolves.toEqual(['GET']) + expect(autocompleteSource({}, 'PU')).resolves.toEqual(['PUT']) +}) + +test('validateNonEmptyNoSpaces() returns an error message if the input is empty or contains spaces', () => { + expect(utils.validateNonEmptyNoSpaces('')).toBe('Please enter a non-empty value') + expect(utils.validateNonEmptyNoSpaces('with spaces')).toBe('Please enter a value without spaces') + expect(utils.validateNonEmptyNoSpaces('no-spaces')).toBe(true) +}) + +test('parseWorkspaces() returns all workspace info and mappings', () => { + const { + workspaceConfigs, + workspaceImports, + workspacePathsMap, + workspacePaths, + workspacePackages + } = utils.parseWorkspaces('../../') + // Verify we can retrieve the package.json config for the @green-stack/core workspace + expect(workspaceConfigs['packages/@green-stack-core']).toBeDefined() + expect(workspaceConfigs['packages/@green-stack-core'].name).toBe('@green-stack/core') + // Check that the 'packages/@green-stack-core' workspace is mapped to the '@green-stack/core' package + expect(workspaceImports['packages/@green-stack-core']).toBe('@green-stack/core') + // Check that the '@green-stack/core' package is mapped to the 'packages/@green-stack-core' workspace + expect(workspacePathsMap['@green-stack/core']).toBe('packages/@green-stack-core') + // Check that the workspace paths work as expected + expect(workspacePaths).toContain('packages/@green-stack-core') + // Check that the workspace packages work as expected + expect(workspacePackages).toContain('@green-stack/core') +}) + +test('getWorkspaceOptions() lists all available workspace path options for generators to use', () => { + const workspaceOptions = utils.getWorkspaceOptions() + // Check that the @green-stack/core package is omitted + expect(workspaceOptions["packages/@green-stack-core -- importable from: '@green-stack/core'"]).toBeUndefined() + // Check that the @app/core workspace is included + expect(workspaceOptions["features/@app-core -- importable from: '@app/core'"]).toBe("features/@app-core") +}) + +test('getAvailableSchemas() lists all available schemas in the codebase for generators to use', () => { + const schemaConfigMap = utils.getAvailableSchemas() + // Check that the healthCheck input & output schemas are included + expect(schemaConfigMap['@app/core - HealthCheckArgs']).toBeDefined() + expect(schemaConfigMap['@app/core - HealthCheckResponse']).toBeDefined() + // Check that the config for the healthCheck input schema is correct + const HealthCheckArgsInfo = schemaConfigMap['@app/core - HealthCheckArgs'] + expect(HealthCheckArgsInfo.schemaName).toBe('HealthCheckArgs') + expect(HealthCheckArgsInfo.schemaPath).toBe('features/@app-core/schemas/HealthCheckArgs.ts') + expect(HealthCheckArgsInfo.workspacePath).toBe('features/@app-core') + expect(HealthCheckArgsInfo.workspaceName).toBe('@app/core') + expect(HealthCheckArgsInfo.isNamedExport).toBe(true) + expect(HealthCheckArgsInfo.isDefaultExport).toBe(false) + // Check that the config for the healthCheck output schema is correct + const HealthCheckResponseInfo = schemaConfigMap['@app/core - HealthCheckResponse'] + expect(HealthCheckResponseInfo.schemaName).toBe('HealthCheckResponse') + expect(HealthCheckResponseInfo.schemaPath).toBe('features/@app-core/schemas/HealthCheckResponse.ts') + expect(HealthCheckResponseInfo.workspacePath).toBe('features/@app-core') + expect(HealthCheckResponseInfo.workspaceName).toBe('@app/core') + expect(HealthCheckResponseInfo.isNamedExport).toBe(true) + expect(HealthCheckResponseInfo.isDefaultExport).toBe(false) +}) + +test('getAvailableDataBridges() lists all available DataBridges in the codebase for generators to use', () => { + const dataBridgeConfigMap = utils.getAvailableDataBridges() + // Check that the healthCheck DataBridge is included + expect(dataBridgeConfigMap['@app/core >>> healthCheck()']).toBeDefined() + // Check that the config for the healthCheck DataBridge is correct + const healthCheckBridgeInfo = dataBridgeConfigMap['@app/core >>> healthCheck()'] + expect(healthCheckBridgeInfo.bridgePath).toBe('features/@app-core/resolvers/healthCheck.bridge.ts') + expect(healthCheckBridgeInfo.bridgeName).toBe('healthCheckBridge') + expect(healthCheckBridgeInfo.workspacePath).toBe('features/@app-core') + expect(healthCheckBridgeInfo.workspaceName).toBe('@app/core') + expect(healthCheckBridgeInfo.resolverName).toBe('healthCheck') + expect(healthCheckBridgeInfo.isNamedExport).toBe(true) + expect(healthCheckBridgeInfo.isDefaultExport).toBe(false) +}) diff --git a/packages/@green-stack-core/scripts/helpers/scriptUtils.ts b/packages/@green-stack-core/scripts/helpers/scriptUtils.ts new file mode 100644 index 0000000..960a3db --- /dev/null +++ b/packages/@green-stack-core/scripts/helpers/scriptUtils.ts @@ -0,0 +1,249 @@ +import glob from 'glob' +import fs from 'fs' +import type { ALLOWED_METHODS } from '../../schemas/createDataBridge' +export * from '../../utils/stringUtils' + +/* --- Types ----------------------------------------------------------------------------------- */ + +type HINTED_METHODS = ALLOWED_METHODS | HintedKeys + +/** --- excludeDirs() -------------------------------------------------------------------------- */ +/** -i- Filter function to exclude folders and directories */ +export const excludeDirs = (pth: string) => pth.split('/').pop()?.includes('.') + +/** --- excludeModules() ----------------------------------------------------------------------- */ +/** -i- Filter function to exclude node_modules folders */ +export const excludeModules = (pth: string) => !pth.includes('node_modules') + +/** --- normalizeName() ------------------------------------------------------------------------ */ +/** -i- Make sure only lowercase and uppercase letters are left in a given string */ +export const normalizeName = (str: string) => str.replace(/[^a-zA-Z]/g, '') + +/** --- matchMethods() ------------------------------------------------------------------------- */ +/** -i- Checks that a certain method (like `'GET'`, `'POST'`, ...) is included in list of method names */ +export const matchMethods = (methods: HINTED_METHODS[], method: HINTED_METHODS) => { + return methods.includes(method) +} + +/** --- includesOption() ----------------------------------------------------------------------- */ +/** -i- HoC to prefill a list of options that are checked against in the actual filter method + * @example ``` + * const includesGet = includesOption(['GET', 'POST']) + * // => Creates filter method + * const result = ['GET', 'POST', 'PUT'].filter(includesGet) + * // => ['GET', 'POST'] + * ``` */ +export const includesOption = (options: string[]) => { + return (opt: string) => options.some((option) => opt.includes(option)) +} + +/** --- createAutocompleteSource() ------------------------------------------------------------- */ +/** -i- HoC that creates an autocomplete source fn that filters multi-choice cli options based on input */ +export const createAutocompleteSource = (options: string[]) => { + return (answersSoFar: any$Todo, input = '') => { + const filteredBridges = options.filter((option) => option.includes(input)) + return Promise.resolve(filteredBridges) + } +} + +/** --- validateNonEmptyNoSpaces() ------------------------------------------------------------- */ +/** -i- Validates that a string is not empty and does not contain spaces, returns error message if it does */ +export const validateNonEmptyNoSpaces = (input: string) => { + if (!input) return 'Please enter a non-empty value' + if (input.includes(' ')) return 'Please enter a value without spaces' + return true +} + +/** --- parseWorkspaces() ---------------------------------------------------------------------- */ +/** -i- Figure out all info about all workspaces and return mapped linking info for use in scripts */ +export const parseWorkspaces = (folderLevel = '../../') => { + // Get all workspace package.json paths + const packageConfigPaths = glob.sync(`${folderLevel}packages/**/package.json`).filter(excludeModules) // prettier-ignore + const featureConfigPaths = glob.sync(`${folderLevel}features/**/package.json`).filter(excludeModules) // prettier-ignore + const packageJSONPaths = [...packageConfigPaths, ...featureConfigPaths] + + // Map to keep track of all workspace package configs, filled in next step + const workspaceConfigs = {} as Record + + // Build a map of workspace imports as { [workspacePath]: workspacePackage, ... } + const workspaceImports = packageJSONPaths.reduce((acc, wsPath) => { + const packageJSON = JSON.parse(fs.readFileSync(wsPath, 'utf8')) + const workspaceMatcher = wsPath.replace(`${folderLevel}`, '').replace('/package.json', '') + workspaceConfigs[workspaceMatcher] = packageJSON + return { ...acc, [workspaceMatcher]: packageJSON.name } + }, {}) as Record + + // Reverse that map to get a map of workspace packages as { [workspacePackage]: workspacePath, ... } + const workspacePathsMap = Object.entries(workspaceImports).reduce((acc, [wsPath, pkgName]) => { + return { ...acc, [pkgName]: wsPath } + }, {}) as Record + + // Other info we might need (sorted by preferred transpilation order > packages first, then features) + const sortByOrder = (a: string, b: string) => (a.includes('packages') && !b.includes('packages') ? -1 : 1) // prettier-ignore + const workspacePaths = Object.keys(workspaceImports).sort(sortByOrder) + const workspacePackages = workspacePaths.map((path) => workspaceImports[path]) + + // Return all the info we've gathered + return { + /** -i- A mapped object of { [workspacePath]: package.json config, ... } */ + workspaceConfigs, + /** -i- A mapped object of { [workspacePath]: workspace package name, ... } */ + workspaceImports, + /** -i- A mapped object of { [workspacePackage]: workspace path, ... } */ + workspacePathsMap, + /** -i- An array of all workspace paths, e.g. ["packages/@green-stack-core", ...] */ + workspacePaths, + /** -i- An array of all workspace package names, e.g. ["@green-stack/core", ...] */ + workspacePackages, + } +} + +/** --- getWorkspaceOptions() ------------------------------------------------------------------ */ +/** -i- List all the available workspaces for generators to use (map of options to workspace paths) + * @example ``` + * const workspaceOptions = getWorkspaceOptions() + * // => { + * // "features/@app-core -- importable from: '@app/core'": + * // 'features/@app-core', + * // ... + * // } + * ``` */ +export const getWorkspaceOptions = (folderLevel = '../../') => { + const { workspaceImports } = parseWorkspaces(folderLevel) + return Object.keys(workspaceImports).reduce((options, workspacePath) => { + const workspaceName = workspaceImports[workspacePath] + const workspaceOption = `${workspacePath} -- importable from: '${workspaceName}'` + // Skip listing the helper workspaces + if (['green-stack', 'registries'].some(helper => workspaceName.includes(helper))) { + return options + } + // Add the workspace option + return { ...options, [workspaceOption]: workspacePath } + }, {}) as Record +} + +/** --- getAvailableSchemas() ------------------------------------------------------------------ */ +/** -i- List all the available schemas in the codebase that generators can use */ +export const getAvailableSchemas = (folderLevel = '../../') => { + // Get workspace imports + const { workspaceImports } = parseWorkspaces(folderLevel) + + // Get paths of all schemas + const packageSchemaPaths = glob.sync(`${folderLevel}packages/**/schemas/[A-Z]*.ts`).filter(excludeModules) // prettier-ignore + const featureSchemaPaths = glob.sync(`${folderLevel}features/**/schemas/[A-Z]*.ts`).filter(excludeModules) // prettier-ignore + const allSchemaPaths = [...packageSchemaPaths, ...featureSchemaPaths].filter((pth) => { + return !['createSchema', '.bridge', '.resolver', '.enum'].some((excluded) => pth.includes(excluded)) + }) + + // Map to build list of available resolvers to integrate with + const availableSchemas = allSchemaPaths.reduce((acc, schemaPath) => { + // Figure out the schema name and contents + const schemaName = schemaPath.split('/').pop()!.replace('.ts', '') + const workspacePath = schemaPath.split('/schemas/')?.[0]?.replace(`${folderLevel}`, '') + const workspaceName = workspaceImports[workspacePath] + const fileContents = fs.readFileSync(schemaPath, 'utf8') + + // Stop if the schema is not exported of not found due to name not matching + const isNamedExport = fileContents.includes(`export const ${schemaName}`) + const isDefaultExport = fileContents.includes(`export default ${schemaName}`) + if (!isNamedExport && !isDefaultExport) return acc + + // Build the option to display in the CLI + const schemaOption = `${workspaceName} - ${schemaName}` + + // Add the schema to the list of available schemas + return { + ...acc, + [schemaOption]: { + schemaPath: schemaPath?.replace(`${folderLevel}`, ''), + schemaName, + workspacePath, + workspaceName, + isNamedExport, + isDefaultExport, + }, + } + }, {}) as Record< + string, + { + schemaPath: string + schemaName: string + workspacePath: string + workspaceName: string + isNamedExport: boolean + isDefaultExport: boolean + } + > + return availableSchemas +} + +/** --- getAvailableDataBridges() -------------------------------------------------------------- */ +/** -i- List all the available data bridges for generators to use */ +export const getAvailableDataBridges = ( + folderLevel = '../../', + filterType?: 'query' | 'mutation', + allowNonGraphql = false, +) => { + // Get workspace imports + const { workspaceImports } = parseWorkspaces(folderLevel) + + // Get paths of all Data Bridges + const packageBridgePaths = glob.sync(`${folderLevel}packages/**/resolvers/**.bridge.ts`).filter(excludeModules) // prettier-ignore + const featureBridgePaths = glob.sync(`${folderLevel}features/**/resolvers/**.bridge.ts`).filter(excludeModules) // prettier-ignore + const allDataBridgePaths = [...packageBridgePaths, ...featureBridgePaths].filter((pth) => !pth.includes('createDataBridge')) // prettier-ignore + + // Map to build list of available resolvers to integrate with + const availableDataBridges = allDataBridgePaths.reduce((acc, bridgePath) => { + // Figure out the bridge name and contents + const bridgeName = bridgePath.split('/').pop()!.replace('.bridge.ts', 'Bridge') + const workspacePath = bridgePath.split('/resolvers/')[0]?.replace(`${folderLevel}`, '') + const workspaceName = workspaceImports[workspacePath] + const fileContents = fs.readFileSync(bridgePath, 'utf8') + + // Stop if the bridge is not exported of not found due to name not matching + const isNamedExport = fileContents.includes(`export const ${bridgeName}`) + const isDefaultExport = fileContents.includes(`export default ${bridgeName}`) + if (!isNamedExport && !isDefaultExport) return acc + + // Figure out the resolver name + const isCallingCreateDataBridge = fileContents.includes('createDataBridge(') + const resolverName = fileContents.match(/resolverName: '(\w+)'/)?.[1] + if (!isCallingCreateDataBridge || !resolverName) return acc + + // Filter out queries or mutations? + const allowedMethodsLine = fileContents.match(/allowedMethods: \[(.+)\]/)?.[1] + const hasGraphResolver = allowedMethodsLine?.includes('GRAPHQL') + if (!allowNonGraphql && !hasGraphResolver) return acc + const resolverTypeLine = fileContents.match(/resolverType: '(\w+)'/)?.[1] + if (filterType && resolverTypeLine !== filterType) return acc + + // Build the option to display in the CLI + const dataBridgeOption = `${workspaceName} >>> ${resolverName}()` + + // Add the bridge to the list of available bridges + return { + ...acc, + [dataBridgeOption]: { + bridgePath: bridgePath?.replace(`${folderLevel}`, ''), + bridgeName, + workspacePath: workspacePath?.replace(`${folderLevel}`, ''), + workspaceName, + resolverName, + isNamedExport, + isDefaultExport, + }, + } + }, {}) as Record< + string, + { + bridgePath: string + bridgeName: string + workspacePath: string + workspaceName: string + isNamedExport: boolean + isDefaultExport: boolean + resolverName: string + } + > + return availableDataBridges +} diff --git a/packages/@green-stack-core/tsconfig.json b/packages/@green-stack-core/tsconfig.json index 2c757a2..92057d6 100644 --- a/packages/@green-stack-core/tsconfig.json +++ b/packages/@green-stack-core/tsconfig.json @@ -8,5 +8,5 @@ "../../features/app-core/graphql-env.d.ts", "global.d.ts" ], - "exclude": ["node_modules"] + "exclude": ["node_modules", "**/*.test.ts", "**/*.test.tsx"] } diff --git a/packages/@green-stack-core/utils/stringUtils.ts b/packages/@green-stack-core/utils/stringUtils.ts index 0dc5a33..e8c75d3 100644 --- a/packages/@green-stack-core/utils/stringUtils.ts +++ b/packages/@green-stack-core/utils/stringUtils.ts @@ -29,7 +29,13 @@ export const replaceStringVars = ( } /** --- findTargetString() --------------------------------------------------------------------- */ -/** -i- Finds a $target$ string inside another string */ +/** -i- Finds a $target$ string inside another string + * @example ``` + * const folderWithIcons = findTargetString( + * 'some/path/to/specific-folder/icons/', + * 'some/path/to/$target$/icons/' + * ) // => 'specific-folder' + * ``` */ export const findTargetString = (source: string, search = '($target$)') => { const [preTarget, postTarget] = search.split('$target$') const parts = source.split(preTarget) @@ -38,7 +44,13 @@ export const findTargetString = (source: string, search = '($target$)') => { } /** --- replaceMany() -------------------------------------------------------------------------- */ -/** -i- Replaces every string you pass as the 2nd argument with the string in the 3rd argument */ +/** -i- Replaces every string you pass as the targets (2nd arg) with the string in the 3rd argument + * @example ``` + * replaceMany('useUpdateDataForm()', ['Update', 'Add'], '') + * // => 'useDataForm()' + * replaceMany('useAddUserForm()', ['Update', 'Add'], '') + * // => 'useUserForm()' + * ``` */ export const replaceMany = (source: string, targets: string[], replacement: string) => { const allTargets = targets.flatMap((target) => [uppercaseFirstChar(target), lowercaseFirstChar(target)]) // prettier-ignore let result = source From cc329777e21c251b935877a9ba2ed8c8dc45d389 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 14 Jun 2024 22:59:24 +0200 Subject: [PATCH 025/126] feat: Add check-workspaces script to @green-stack/core --- package-lock.json | 26 +++ packages/@green-stack-core/package.json | 2 + .../scripts/check-workspaces.ts | 159 ++++++++++++++++++ .../@green-stack-core/utils/arrayUtils.ts | 24 +++ .../@green-stack-core/utils/objectUtils.ts | 36 ++-- .../transpiledWorkspaces.generated.js | 6 + .../workspaceResolutions.generated.js | 2 + 7 files changed, 235 insertions(+), 20 deletions(-) create mode 100644 packages/@green-stack-core/scripts/check-workspaces.ts create mode 100644 packages/@green-stack-core/utils/arrayUtils.ts create mode 100644 packages/@registries/transpiledWorkspaces.generated.js create mode 100644 packages/@registries/workspaceResolutions.generated.js diff --git a/package-lock.json b/package-lock.json index 2abfdd2..07ec4bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9313,6 +9313,31 @@ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, + "node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dot-prop/node_modules/type-fest": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.0.tgz", + "integrity": "sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -18108,6 +18133,7 @@ "version": "0.0.1", "dependencies": { "crypto-js": "^4.2.0", + "dot-prop": "^9.0.0", "zod": "^3.23.7" }, "devDependencies": { diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index 8f2b895..cc5a597 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "crypto-js": "^4.2.0", + "dot-prop": "^9.0.0", "zod": "^3.23.7" }, "devDependencies": { @@ -18,6 +19,7 @@ }, "scripts": { "build:schema": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/build-graphql-schema.ts", + "check:workspaces": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/check-workspaces.ts", "test": "bun test --preload ./preload.test.ts --tsconfig-override tsconfig.test.json --verbose" } } diff --git a/packages/@green-stack-core/scripts/check-workspaces.ts b/packages/@green-stack-core/scripts/check-workspaces.ts new file mode 100644 index 0000000..5d7a1b1 --- /dev/null +++ b/packages/@green-stack-core/scripts/check-workspaces.ts @@ -0,0 +1,159 @@ +import * as dotenv from 'dotenv' +import glob from 'glob' +import fs from 'fs' +import { excludeDirs, parseWorkspaces } from './helpers/scriptUtils' +import { isEmpty } from '../utils/commonUtils' + +/* --- Goal ------------------------------------------------------------------------------------ */ + +// This script is used to check the workspaces in the monorepo for any missing dependencies or env vars + +/* --- Constants ------------------------------------------------------------------------------- */ + +const KNOWN_ENV_VARS = ['NODE_ENV', 'TZ', 'PORT', 'MAX_TRIES', 'IS_DEEP_CHECK', 'ENDPOINT', 'HEALTH_ENDPOINT', 'GRAPHQL_ENDPOINT', 'TIME_INCREMENT'] // prettier-ignore +const SKIPPED_WORKSPACES = ['@green-stack/core', '@app/registries'] + +/* --- Templates ------------------------------------------------------------------------------- */ + +const template = `// -i- Auto generated with "yarn check-workspaces" +module.exports = {{exports}}\n` + +/* --- check-workspaces ------------------------------------------------------------------------ */ + +const checkWorkspaces = async (isDeepCheck = true) => { + try { + // Load .env file in dev mode + const isDev = process.env.NODE_ENV !== 'production' + const hasEnvFile = fs.existsSync('../../apps/next/.env') + if (isDev && hasEnvFile) dotenv.config({ path: '../../apps/next/.env' }) + + // Scan all /features/ and /packages/ workspace .ts & .tsx files + const featureFiles = glob.sync('../../features/**/*.ts*').filter(excludeDirs) + const packageFiles = glob.sync('../../packages/**/*.ts*').filter(excludeDirs) + const allWsFiles = [...featureFiles, ...packageFiles] + + // Figure out import paths from each workspace + const { workspaceConfigs, workspaceImports, workspacePaths, workspacePackages } = parseWorkspaces() // prettier-ignore + + // Loop through each workspace and track its imports and env var uses + const workspaceMap = {} as ObjectType + let workspaceResolutions = {} as Record + await Promise.all(workspacePaths.map(async (workspacePath) => { + const workspacePackage = workspaceImports[workspacePath] + + // Double check based on file paths if a deep check is requested + if (isDeepCheck) { + // Get the related package JSON config + const packageJSON = workspaceConfigs[workspacePath] + const shouldSkip = SKIPPED_WORKSPACES.includes(workspacePackage) + // Get all the lines of code from the workspace + const workspaceFiles = allWsFiles.filter((filePath) => filePath.includes(`${workspacePath}/`)) + const fileContents = workspaceFiles.map((filePath) => fs.readFileSync(filePath, 'utf8')) + const allLinesOfCode = fileContents.map((content) => content.split('\n')).flat() + // Rebuild the related workspaces list + const filterByRelevancy = (line: string) => line.includes(` from '`) && !line.includes(`./`) + const allImportLines = allLinesOfCode.filter(filterByRelevancy) + const allImportPaths = allImportLines.map((line) => line.split(` from '`)[1].split(`'`)[0]) + const containsWorkspaces = (wsPkg: string) => allImportPaths.some((path) => path.includes(`${wsPkg}/`)) + const newRelatedWorkspaces = workspacePackages.filter(containsWorkspaces) + // Rebuild the required env vars list + const allProcessEnvLines = allLinesOfCode.filter((line) => line.includes('process.env.')) + const allProcessEnvVars = allProcessEnvLines.map((line) => line.match(/process\.env\.([A-Z0-9_]+)/)?.[1]) // prettier-ignore + const allGetEnvVarLines = allLinesOfCode.filter((line) => line.includes(`getEnvVar('`)) + const allGetEnvVarVars = allGetEnvVarLines.map((line) => line.match(/getEnvVar\('([A-Z0-9_]+)'\)/)?.[1]) // prettier-ignore + const filterEnvs = (envVar?: string) => { + if (shouldSkip) return false // Don't check @green-stack packages + return !KNOWN_ENV_VARS.includes(envVar!) + } + const newRequiredEnvVars = [...allProcessEnvVars, ...allGetEnvVarVars].filter(filterEnvs) + // Rebuild the "greenStack" config for the package.json + const existingRelations = packageJSON?.greenStack?.relatedWorkspaces || [] + const prevRequiredEnvVars = packageJSON?.greenStack?.requiredEnvVars || [] + const relatedWorkspaces = Array.from(new Set([...existingRelations, ...newRelatedWorkspaces])) // prettier-ignore + const requiredEnvVars = Array.from(new Set([...prevRequiredEnvVars, ...newRequiredEnvVars])) // prettier-ignore + workspaceMap[workspacePath] = { + ...packageJSON.greenStack, + relatedWorkspaces, + requiredEnvVars, + } + // Save the updated package.json? + const hasChangedRelations = existingRelations.join('-') !== relatedWorkspaces.join('-') + const hasChangedEnvVars = prevRequiredEnvVars.join('-') !== requiredEnvVars.join('-') + const hasChanged = !shouldSkip && isDev && (hasChangedRelations || hasChangedEnvVars) + if (hasChanged) { + if (!packageJSON.greenStack) packageJSON.greenStack = { relatedWorkspaces, requiredEnvVars } // prettier-ignore + packageJSON.greenStack.relatedWorkspaces = relatedWorkspaces + packageJSON.greenStack.requiredEnvVars = requiredEnvVars + fs.writeFileSync(`../../${workspacePath}/package.json`, `${JSON.stringify(packageJSON, null, 4)}`) + } + } + + // Do a shallow check of the workspace's package.json + if (!isDeepCheck) { + const packageJSON = workspaceConfigs[workspacePath] + const relatedWorkspaces = packageJSON?.greenStack?.relatedWorkspaces || [] + const requiredEnvVars = packageJSON?.greenStack?.requiredEnvVars || [] + workspaceMap[workspacePath] = { + ...packageJSON.greenStack, + workspacePackage, + relatedWorkspaces, + requiredEnvVars, + } + } + + // Check for missing env vars + const { requiredEnvVars } = workspaceMap[workspacePath] || {} + const getEnvVar = (envVar: string) => process.env[envVar] || process.env[`NEXT_PUBLIC_${envVar}`] || process.env[`EXPO_PUBLIC_${envVar}`] // prettier-ignore + const missingEnvVars = requiredEnvVars.filter((envVar: string) => isEmpty(getEnvVar(envVar))) + + // Check for missing related workspaces + const { relatedWorkspaces } = workspaceMap[workspacePath] + const workspaceIdentifiers = [...workspacePaths, ...workspacePackages] + const missingWorkspaces = relatedWorkspaces.filter((ws: string) => !workspaceIdentifiers.includes(ws)) + + // Check for resolutions to add to next.config.js + const greenStack = workspaceMap[workspacePath] + workspaceResolutions = { ...workspaceResolutions, ...greenStack?.resolutions } + + // Warn of any missing env vars or related workspaces + if (missingEnvVars.length || missingWorkspaces.length) console.warn(`\n-!- --- /${workspacePath}/ ${'-'.repeat(45 - workspacePath.length - 2)} -!-`) // prettier-ignore + if (missingEnvVars.length) { + console.warn(`-!- ⚠️ Missing env vars for '/${workspacePath}/':`, missingEnvVars.join(', ')) + console.warn(`-i- Please add these through a secret manager (like doppler.com) or another env var config like .env`) // prettier-ignore + console.warn(`-i- You may need to prefix them with NEXT_PUBLIC_ or EXPO_PUBLIC_ depending on the target`) // prettier-ignore + if (isDev && !hasEnvFile) console.warn(`-!- Couldn't detect a .env file in /apps/next/ - you may need to create one, see .example.env`) // prettier-ignore + // Log CI env var warnings? + const missingExpoToken = missingEnvVars.includes('EXPO_ACCESS_TOKEN') + const missingCItokens = missingExpoToken + if (missingExpoToken) console.log('-i- EXPO_ACCESS_TOKEN is used for automatically deploying your app to Expo from CI, get it from expo.dev') // prettier-ignore + if (missingCItokens) console.log(`-i- If you don't plan on using CI for these, remove them from the "greenStack" field in this package's package.json`) // prettier-ignore + } + if (missingWorkspaces.length) { + console.warn(`-!- ⚠️ Missing related workspaces for '/${workspacePath}': ${missingWorkspaces.join(', ')}`) // prettier-ignore + console.warn(`-i- Either: a) Merge them in from your copy of the full-product 'green-stack' starter repo`) // prettier-ignore + console.warn(` b) Copy the related workspace over from another project to /features/ or /packages/`) // prettier-ignore + } + if (missingEnvVars.length || missingWorkspaces.length) console.warn(`-!- ${'-'.repeat(50)} -!-\n`) // prettier-ignore + + // No errors? Resolve promise + return true + })) + + // Save transpiledWorkspaces.generated.js to /packages/registries/ workspace + const transpiledWorkspacesPath = '../../packages/@registries/transpiledWorkspaces.generated.js' + const transpiledWorkspaces = template.replace('{{exports}}', JSON.stringify(workspacePackages, null, 2)) // prettier-ignore + fs.writeFileSync(transpiledWorkspacesPath, transpiledWorkspaces, 'utf8') + + // Save workspaceResolutions.generated.js to /packages/registries/ workspace + const workspaceResolutionsPath = '../../packages/@registries/workspaceResolutions.generated.js' + const workspaceResolutionsFile = template.replace('{{exports}}', JSON.stringify(workspaceResolutions, null, 2)) // prettier-ignore + fs.writeFileSync(workspaceResolutionsPath, workspaceResolutionsFile, 'utf8') + } catch (err) { + console.error(err) + process.exit(1) + } +} + +/* --- init ------------------------------------------------------------------------------------ */ + +checkWorkspaces(!!process.env.IS_DEEP_CHECK && !!JSON.parse(process.env.IS_DEEP_CHECK)) diff --git a/packages/@green-stack-core/utils/arrayUtils.ts b/packages/@green-stack-core/utils/arrayUtils.ts new file mode 100644 index 0000000..693bfde --- /dev/null +++ b/packages/@green-stack-core/utils/arrayUtils.ts @@ -0,0 +1,24 @@ + +/** --- addSetItem() --------------------------------------------------------------------------- */ +/** -i- Adds an item to array if it doens't exist already */ +export const addSetItem = (arr: any$Unknown[], item: any$Unknown): any$Unknown[] => { + if (!arr.map((itm) => JSON.stringify(itm)).includes(JSON.stringify(item))) arr.push(item) + return arr +} + +/** --- arrFromSet() --------------------------------------------------------------------------- */ +/** -i- Deduplicates items in an array */ +export const arrFromSet = (arr: any$Unknown[]): any$Unknown[] => Array.from(new Set(arr)) + +/** --- createLookup() ------------------------------------------------------------------------- */ +/** -i- Create a lookup object from an array of objects and a property key to index it for */ +export const createLookup = , K extends keyof T>(array: T[], key: K) => { + return array.reduce( + (lookup, current) => { + const keyValue = current[key] + if (!keyValue) return lookup // Skip if the item doesn't have a value for the key + return { ...lookup, [keyValue]: current } + }, + {} as Record + ) +} diff --git a/packages/@green-stack-core/utils/objectUtils.ts b/packages/@green-stack-core/utils/objectUtils.ts index f6b0e97..b53919e 100644 --- a/packages/@green-stack-core/utils/objectUtils.ts +++ b/packages/@green-stack-core/utils/objectUtils.ts @@ -1,30 +1,26 @@ import { isValidNumber } from './numberUtils' - -/* --- Types ----------------------------------------------------------------------------------- */ - -type ObjectType = Record +export { getProperty, setProperty, deleteProperty, hasProperty, deepKeys } from 'dot-prop' +export { createLookup } from './arrayUtils' /** --- normalizeObjectProps() ----------------------------------------------------------------- */ /** -i- Parses object properties like "1" to 1, and "true" to true */ export const normalizeObjectProps = ( - objToValidate: ObjectType = {}, + objToValidate: ObjectType = {}, ignoredKeys: string[] = [] - ): ObjectType => { +): ObjectType => { const obj: typeof objToValidate = {} Object.keys(objToValidate).forEach((pKey) => { - let val = objToValidate[pKey] - // Normalize 'true' / 'false' to their boolean values - if (['true', 'false'].includes(val)) val = JSON.parse(val) - // Normalize stringified numbers to actual number - else val = Array.isArray(val) || !isValidNumber(val) ? val : +val - // In case of nested objects, use recursion - if (typeof val === 'object' && val !== null && !Array.isArray(val)) { - val = normalizeObjectProps(val, ignoredKeys) - } - // Add value under same key to obj - obj[pKey] = ignoredKeys.includes(pKey) ? objToValidate[pKey] : val + let val = objToValidate[pKey] + // Normalize 'true' / 'false' to their boolean values + if (['true', 'false'].includes(val)) val = JSON.parse(val) + // Normalize stringified numbers to actual number + else val = Array.isArray(val) || !isValidNumber(val) ? val : +val + // In case of nested objects, use recursion + if (typeof val === 'object' && val !== null && !Array.isArray(val)) { + val = normalizeObjectProps(val, ignoredKeys) + } + // Add value under same key to obj + obj[pKey] = ignoredKeys.includes(pKey) ? objToValidate[pKey] : val }) return obj - } - - +} diff --git a/packages/@registries/transpiledWorkspaces.generated.js b/packages/@registries/transpiledWorkspaces.generated.js new file mode 100644 index 0000000..801e0fb --- /dev/null +++ b/packages/@registries/transpiledWorkspaces.generated.js @@ -0,0 +1,6 @@ +// -i- Auto generated with "yarn check-workspaces" +module.exports = [ + "@green-stack/core", + "@app/registries", + "@app/core" +] diff --git a/packages/@registries/workspaceResolutions.generated.js b/packages/@registries/workspaceResolutions.generated.js new file mode 100644 index 0000000..0a309a0 --- /dev/null +++ b/packages/@registries/workspaceResolutions.generated.js @@ -0,0 +1,2 @@ +// -i- Auto generated with "yarn check-workspaces" +module.exports = {} From bd419055491bf117f04283e36d9791392e2c69c3 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sat, 15 Jun 2024 21:20:58 +0200 Subject: [PATCH 026/126] feat: Add collect-resolvers script --- apps/expo/metro.config.js | 20 +++---- features/@app-core/graphql/schema.ts | 2 +- package.json | 4 +- packages/@green-stack-core/package.json | 1 + .../schemas/tests/plugins.test.ts | 8 ++- .../scripts/build-graphql-schema.ts | 2 +- .../scripts/check-workspaces.ts | 2 +- .../scripts/collect-resolvers.ts | 58 +++++++++++++++++++ packages/@registries/resolvers.generated.ts | 2 + packages/@registries/resolversRegistry.ts | 1 - .../transpiledWorkspaces.generated.js | 2 +- .../workspaceResolutions.generated.js | 2 +- turbo.json | 7 +++ 13 files changed, 92 insertions(+), 19 deletions(-) create mode 100644 packages/@green-stack-core/scripts/collect-resolvers.ts create mode 100644 packages/@registries/resolvers.generated.ts delete mode 100644 packages/@registries/resolversRegistry.ts diff --git a/apps/expo/metro.config.js b/apps/expo/metro.config.js index 6e90b6f..873b97a 100644 --- a/apps/expo/metro.config.js +++ b/apps/expo/metro.config.js @@ -1,25 +1,23 @@ // -i- Copied from https://docs.expo.dev/guides/monorepos/#modify-the-metro-config -const { getDefaultConfig } = require('expo/metro-config'); -const path = require('path'); +const { getDefaultConfig } = require('expo/metro-config') +const path = require('path') // Find the project and workspace directories -const projectRoot = __dirname; - -// This can be replaced with `find-yarn-workspace-root` -const workspaceRoot = path.resolve(projectRoot, '../..'); -const config = getDefaultConfig(projectRoot); +const projectRoot = __dirname +const workspaceRoot = path.resolve(projectRoot, '../..') +const config = getDefaultConfig(projectRoot) // 1. Watch all files within the monorepo -config.watchFolders = [workspaceRoot]; +config.watchFolders = [workspaceRoot] // 2. Let Metro know where to resolve packages and in what order config.resolver.nodeModulesPaths = [ path.resolve(projectRoot, 'node_modules'), path.resolve(workspaceRoot, 'node_modules'), -]; +] // 3. Force Metro to resolve (sub)dependencies only from the `nodeModulesPaths` -// config.resolver.disableHierarchicalLookup = true; +// config.resolver.disableHierarchicalLookup = true // Export the modified config -module.exports = config; +module.exports = config diff --git a/features/@app-core/graphql/schema.ts b/features/@app-core/graphql/schema.ts index f177748..9f79f87 100644 --- a/features/@app-core/graphql/schema.ts +++ b/features/@app-core/graphql/schema.ts @@ -3,7 +3,7 @@ import { makeExecutableSchema } from '@graphql-tools/schema' import { GraphQLJSON, GraphQLJSONObject } from 'graphql-type-json' import { gql } from 'graphql-tag' import { typeDefs } from './typeDefs' -import * as resolvers from '@app/registries/resolversRegistry' +import * as resolvers from '@app/registries/resolvers.generated' import { createGraphSchemaDefs } from '@green-stack/core/schemas/createGraphSchemaDefs' /* --- Notes ----------------------------------------------------------------------------------- */ diff --git a/package.json b/package.json index 96a60e4..338e347 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,9 @@ "expo:web": "npx turbo run @app/expo#web", "build": "npx turbo run build", "build:schema": "npx turbo run @green-stack/core#build:schema", - "add-dependencies": "npx turbo run @app-expo#add-dependencies", + "check:workspaces": "npx turbo run @green-stack/core#check:workspaces", + "collect:resolvers": "npx turbo run @green-stack/core#collect:resolvers", + "add:dependencies": "npx turbo run @app-expo#add-dependencies", "env:local": "npx turbo run env:local", "turbo:login": "npx turbo login", "turbo:link": "npx turbo link", diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index cc5a597..2cff519 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -20,6 +20,7 @@ "scripts": { "build:schema": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/build-graphql-schema.ts", "check:workspaces": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/check-workspaces.ts", + "collect:resolvers": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/collect-resolvers.ts", "test": "bun test --preload ./preload.test.ts --tsconfig-override tsconfig.test.json --verbose" } } diff --git a/packages/@green-stack-core/schemas/tests/plugins.test.ts b/packages/@green-stack-core/schemas/tests/plugins.test.ts index 632afc6..5fb3f9c 100644 --- a/packages/@green-stack-core/schemas/tests/plugins.test.ts +++ b/packages/@green-stack-core/schemas/tests/plugins.test.ts @@ -3,7 +3,7 @@ import { print } from 'graphql' import { z, schema } from '../index' import { createSchemaPlugin } from '../createSchemaPlugin' import { createGraphSchemaDefs } from '../createGraphSchemaDefs' -import { healthCheck } from '../../../@registries/resolversRegistry' +import { healthCheck } from '../../../@registries/resolvers.generated' /* --- createSchemaPlugin() -------------------------------------------------------------------- */ @@ -203,6 +203,12 @@ test("createGraphSchemaDefs() generates correct nullable output data definitions // Check nullable field definitions expect(printedSchema).toContain('nullable: String') expect(printedSchema).not.toContain('nullable: String!') + // Check optional field definitions + expect(printedSchema).toContain('optional: String') + expect(printedSchema).not.toContain('optional: String!') + // Check defaulted field definitions + expect(printedSchema).toContain('defaulted: String') + expect(printedSchema).not.toContain('defaulted: String!') }) test("createGraphSchemaDefs() can handle resolvers created by createGraphResolver()", () => { diff --git a/packages/@green-stack-core/scripts/build-graphql-schema.ts b/packages/@green-stack-core/scripts/build-graphql-schema.ts index d0971d6..bb9c9f4 100644 --- a/packages/@green-stack-core/scripts/build-graphql-schema.ts +++ b/packages/@green-stack-core/scripts/build-graphql-schema.ts @@ -8,7 +8,7 @@ import { loadFilesSync } from '@graphql-tools/load-files' import { mergeTypeDefs } from '@graphql-tools/merge' import { print } from 'graphql' import { createGraphSchemaDefs } from '../schemas/createGraphSchemaDefs' -import * as resolvers from '@app/registries/resolversRegistry' +import * as resolvers from '@app/registries/resolvers.generated' /* --- Constants ------------------------------------------------------------------------------- */ diff --git a/packages/@green-stack-core/scripts/check-workspaces.ts b/packages/@green-stack-core/scripts/check-workspaces.ts index 5d7a1b1..dae1f37 100644 --- a/packages/@green-stack-core/scripts/check-workspaces.ts +++ b/packages/@green-stack-core/scripts/check-workspaces.ts @@ -15,7 +15,7 @@ const SKIPPED_WORKSPACES = ['@green-stack/core', '@app/registries'] /* --- Templates ------------------------------------------------------------------------------- */ -const template = `// -i- Auto generated with "yarn check-workspaces" +const template = `// -i- Auto generated with "npm run check-workspaces" module.exports = {{exports}}\n` /* --- check-workspaces ------------------------------------------------------------------------ */ diff --git a/packages/@green-stack-core/scripts/collect-resolvers.ts b/packages/@green-stack-core/scripts/collect-resolvers.ts new file mode 100644 index 0000000..f0309d5 --- /dev/null +++ b/packages/@green-stack-core/scripts/collect-resolvers.ts @@ -0,0 +1,58 @@ +import glob from 'glob' +import fs from 'fs' +import { findTargetString } from '../utils/stringUtils' +import { excludeDirs, parseWorkspaces } from './helpers/scriptUtils' + +/* --- collect-resolvers ---------------------------------------------------------------------- */ + +const collectResolvers = () => { + try { + // Get all resolver file paths in the next app's api folder + const featureAPIRoutes = glob.sync('../../features/**/routes/api/**/route.ts').filter(excludeDirs) // prettier-ignore + const packageAPIRoutes = glob.sync('../../packages/**/routes/api/**/*.ts').filter(excludeDirs) // prettier-ignore + const allAPIRoutes = [...featureAPIRoutes, ...packageAPIRoutes] + + // Figure out import paths from each workspace + const { workspaceImports } = parseWorkspaces() + + // Filter out the next.js api paths that don't work with aether schemas + const resolverRegistry = allAPIRoutes.reduce((acc, resolverPath) => { + // Figure out the workspace import + const [packageParts, routeParts] = resolverPath.split('/routes') as [string, string] + const workspaceMatcher = packageParts.replace('../../', '') + const workspacePackageName = workspaceImports[workspaceMatcher] + const importPath = `${workspacePackageName}/routes${routeParts.replace('.ts', '')}` + // Skip files that don't export an aetherResolver + const pathContents = fs.readFileSync(resolverPath, 'utf8') + const exportsAetherResolver = pathContents.includes('createGraphResolver') + const isCommented = pathContents.includes('// export const graphResolver') + const exportsGraphQLResolver = pathContents.includes('export const graphResolver') && !isCommented // prettier-ignore + if (!exportsAetherResolver || !exportsGraphQLResolver) return acc + // Find the resolver name + const lines = pathContents.split('\n') + const graphResolverLine = lines.find((line) => { + return line.includes('export const graphResolver = createGraphResolver') + }) + const resolverName = findTargetString(graphResolverLine!, 'createGraphResolver($target$)') + if (!resolverName) return acc + // Create export line for the resolver + const exportLine = `export { graphResolver as ${resolverName} } from '${importPath}'` + // Add the resolver to the registry + return `${acc}${exportLine}\n` + }, '// -i- Auto generated with "npm run collect-resolvers" -- /packages/@aetherspace/scripts/collect-resolvers.ts\n') // prettier-ignore + // Write barrel file to 'packages/@registries/resolvers.generated.ts' + fs.writeFileSync('../../packages/@registries/resolvers.generated.ts', resolverRegistry) + console.log('-----------------------------------------------------------------') + console.log('-i- Successfully created resolver registry at:') + console.log('-----------------------------------------------------------------') + console.log(' ✅ packages/@registries/resolvers.generated.ts') + } catch (err) { + console.log(err) + console.error(err) + process.exit(1) + } +} + +/* --- init ------------------------------------------------------------------------------------ */ + +collectResolvers() diff --git a/packages/@registries/resolvers.generated.ts b/packages/@registries/resolvers.generated.ts new file mode 100644 index 0000000..e0d0423 --- /dev/null +++ b/packages/@registries/resolvers.generated.ts @@ -0,0 +1,2 @@ +// -i- Auto generated with "npm run collect-resolvers" -- /packages/@aetherspace/scripts/collect-resolvers.ts +export { graphResolver as healthCheck } from '@app/core/routes/api/health/route' diff --git a/packages/@registries/resolversRegistry.ts b/packages/@registries/resolversRegistry.ts deleted file mode 100644 index 8f68c93..0000000 --- a/packages/@registries/resolversRegistry.ts +++ /dev/null @@ -1 +0,0 @@ -export { graphResolver as healthCheck } from '@app/core/routes/api/health/route' diff --git a/packages/@registries/transpiledWorkspaces.generated.js b/packages/@registries/transpiledWorkspaces.generated.js index 801e0fb..c90c1fd 100644 --- a/packages/@registries/transpiledWorkspaces.generated.js +++ b/packages/@registries/transpiledWorkspaces.generated.js @@ -1,4 +1,4 @@ -// -i- Auto generated with "yarn check-workspaces" +// -i- Auto generated with "npm run check-workspaces" module.exports = [ "@green-stack/core", "@app/registries", diff --git a/packages/@registries/workspaceResolutions.generated.js b/packages/@registries/workspaceResolutions.generated.js index 0a309a0..5153176 100644 --- a/packages/@registries/workspaceResolutions.generated.js +++ b/packages/@registries/workspaceResolutions.generated.js @@ -1,2 +1,2 @@ -// -i- Auto generated with "yarn check-workspaces" +// -i- Auto generated with "npm run check-workspaces" module.exports = {} diff --git a/turbo.json b/turbo.json index bedaae9..c33359a 100644 --- a/turbo.json +++ b/turbo.json @@ -31,11 +31,18 @@ "@app-expo#add-dependencies": { "cache": false }, + "@green-stack/core#collect:resolvers": { + "cache": true + }, "@green-stack/core#build:schema": { "outputs": ["**/schema.graphql", "**/schema.ts", "**/graphql-env.d.ts"], "inputs": [], + "dependsOn": ["@green-stack/core#collect:resolvers"], "cache": true }, + "@green-stack/core#check:workspaces": { + "cache": false + }, "env:local": { "cache": false } From 92bfc5a36b60f027d3fb4b1bac9f18c1866b2f8b Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sun, 16 Jun 2024 17:53:18 +0200 Subject: [PATCH 027/126] feat: Add link-routes script --- apps/expo/app/(generated)/images/index.tsx | 2 + apps/expo/app/(generated)/index.tsx | 2 + .../app/(generated)/subpages/[slug]/index.tsx | 2 + apps/expo/app/(main)/images/index.tsx | 3 - apps/expo/app/(main)/index.tsx | 3 - .../expo/app/(main)/subpages/[slug]/index.tsx | 3 - .../next/app/(generated)/api/graphql/route.ts | 2 + apps/next/app/(generated)/api/health/route.ts | 2 + apps/next/app/(generated)/images/page.tsx | 2 + apps/next/app/(generated)/page.tsx | 2 + .../app/(generated)/subpages/[slug]/page.tsx | 2 + apps/next/app/(main)/api/health/route.ts | 1 - apps/next/app/(main)/images/page.tsx | 4 - apps/next/app/(main)/page.tsx | 4 - apps/next/app/(main)/subpages/[slug]/page.tsx | 4 - features/@app-core/graphql/schema.graphql | 2 +- features/@app-core/graphql/typeDefs.ts | 2 +- .../@app-core/routes}/api/graphql/route.ts | 2 +- features/@app-core/routes/images/index.tsx | 11 + features/@app-core/routes/index.tsx | 2 +- .../routes/subpages/[slug]/index.tsx | 11 + features/@app-core/screens/ImagesScreen.tsx | 3 +- package.json | 1 + ...po-constants.ts => expo-constants.mock.ts} | 0 packages/@green-stack-core/esbuild-setup.ts | 2 +- .../UniversalRouteScreen.helpers.ts | 23 ++ .../navigation/UniversalRouteScreen.tsx | 8 +- .../navigation/UniversalRouteScreen.web.tsx | 10 +- packages/@green-stack-core/package.json | 1 + packages/@green-stack-core/preload.test.ts | 4 +- .../scripts/build-graphql-schema.ts | 2 +- .../scripts/check-workspaces.ts | 6 +- .../scripts/collect-resolvers.ts | 8 +- .../@green-stack-core/scripts/link-routes.ts | 277 ++++++++++++++++++ packages/@registries/resolvers.generated.ts | 2 +- packages/@registries/routeManifest.ts | 9 + .../transpiledWorkspaces.generated.js | 2 +- .../workspaceResolutions.generated.js | 2 +- turbo.json | 7 +- 39 files changed, 386 insertions(+), 49 deletions(-) create mode 100644 apps/expo/app/(generated)/images/index.tsx create mode 100644 apps/expo/app/(generated)/index.tsx create mode 100644 apps/expo/app/(generated)/subpages/[slug]/index.tsx delete mode 100644 apps/expo/app/(main)/images/index.tsx delete mode 100644 apps/expo/app/(main)/index.tsx delete mode 100644 apps/expo/app/(main)/subpages/[slug]/index.tsx create mode 100644 apps/next/app/(generated)/api/graphql/route.ts create mode 100644 apps/next/app/(generated)/api/health/route.ts create mode 100644 apps/next/app/(generated)/images/page.tsx create mode 100644 apps/next/app/(generated)/page.tsx create mode 100644 apps/next/app/(generated)/subpages/[slug]/page.tsx delete mode 100644 apps/next/app/(main)/api/health/route.ts delete mode 100644 apps/next/app/(main)/images/page.tsx delete mode 100644 apps/next/app/(main)/page.tsx delete mode 100644 apps/next/app/(main)/subpages/[slug]/page.tsx rename {apps/next/app/(main) => features/@app-core/routes}/api/graphql/route.ts (84%) create mode 100644 features/@app-core/routes/images/index.tsx create mode 100644 features/@app-core/routes/subpages/[slug]/index.tsx rename packages/@green-stack-core/__mocks__/{expo-constants.ts => expo-constants.mock.ts} (100%) create mode 100644 packages/@green-stack-core/scripts/link-routes.ts create mode 100644 packages/@registries/routeManifest.ts diff --git a/apps/expo/app/(generated)/images/index.tsx b/apps/expo/app/(generated)/images/index.tsx new file mode 100644 index 0000000..956d075 --- /dev/null +++ b/apps/expo/app/(generated)/images/index.tsx @@ -0,0 +1,2 @@ +// -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten +export { default } from '@app/core/routes/images/index' diff --git a/apps/expo/app/(generated)/index.tsx b/apps/expo/app/(generated)/index.tsx new file mode 100644 index 0000000..0f5b0cc --- /dev/null +++ b/apps/expo/app/(generated)/index.tsx @@ -0,0 +1,2 @@ +// -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten +export { default } from '@app/core/routes/index' diff --git a/apps/expo/app/(generated)/subpages/[slug]/index.tsx b/apps/expo/app/(generated)/subpages/[slug]/index.tsx new file mode 100644 index 0000000..7e3b4e8 --- /dev/null +++ b/apps/expo/app/(generated)/subpages/[slug]/index.tsx @@ -0,0 +1,2 @@ +// -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten +export { default } from '@app/core/routes/subpages/[slug]/index' diff --git a/apps/expo/app/(main)/images/index.tsx b/apps/expo/app/(main)/images/index.tsx deleted file mode 100644 index bbf362b..0000000 --- a/apps/expo/app/(main)/images/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import ImagesScreen from '@app/core/screens/ImagesScreen' - -export default ImagesScreen diff --git a/apps/expo/app/(main)/index.tsx b/apps/expo/app/(main)/index.tsx deleted file mode 100644 index d9bf212..0000000 --- a/apps/expo/app/(main)/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import HomeScreen from '@app/core/routes/index' - -export default HomeScreen diff --git a/apps/expo/app/(main)/subpages/[slug]/index.tsx b/apps/expo/app/(main)/subpages/[slug]/index.tsx deleted file mode 100644 index 03d778c..0000000 --- a/apps/expo/app/(main)/subpages/[slug]/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import SlugScreen from '@app/core/screens/SlugScreen' - -export default SlugScreen diff --git a/apps/next/app/(generated)/api/graphql/route.ts b/apps/next/app/(generated)/api/graphql/route.ts new file mode 100644 index 0000000..9685a2d --- /dev/null +++ b/apps/next/app/(generated)/api/graphql/route.ts @@ -0,0 +1,2 @@ +// -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten +export { GET, POST } from '@app/core/routes/api/graphql/route' diff --git a/apps/next/app/(generated)/api/health/route.ts b/apps/next/app/(generated)/api/health/route.ts new file mode 100644 index 0000000..3c64cf9 --- /dev/null +++ b/apps/next/app/(generated)/api/health/route.ts @@ -0,0 +1,2 @@ +// -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten +export { GET, POST } from '@app/core/routes/api/health/route' diff --git a/apps/next/app/(generated)/images/page.tsx b/apps/next/app/(generated)/images/page.tsx new file mode 100644 index 0000000..395d6ac --- /dev/null +++ b/apps/next/app/(generated)/images/page.tsx @@ -0,0 +1,2 @@ +'use client' +export { default } from '@app/core/routes/images/index' diff --git a/apps/next/app/(generated)/page.tsx b/apps/next/app/(generated)/page.tsx new file mode 100644 index 0000000..f66ef70 --- /dev/null +++ b/apps/next/app/(generated)/page.tsx @@ -0,0 +1,2 @@ +'use client' +export { default } from '@app/core/routes/index' diff --git a/apps/next/app/(generated)/subpages/[slug]/page.tsx b/apps/next/app/(generated)/subpages/[slug]/page.tsx new file mode 100644 index 0000000..1d10e20 --- /dev/null +++ b/apps/next/app/(generated)/subpages/[slug]/page.tsx @@ -0,0 +1,2 @@ +'use client' +export { default } from '@app/core/routes/subpages/[slug]/index' diff --git a/apps/next/app/(main)/api/health/route.ts b/apps/next/app/(main)/api/health/route.ts deleted file mode 100644 index a71a7f9..0000000 --- a/apps/next/app/(main)/api/health/route.ts +++ /dev/null @@ -1 +0,0 @@ -export { GET, POST } from '@app/core/routes/api/health/route' diff --git a/apps/next/app/(main)/images/page.tsx b/apps/next/app/(main)/images/page.tsx deleted file mode 100644 index 2af31ea..0000000 --- a/apps/next/app/(main)/images/page.tsx +++ /dev/null @@ -1,4 +0,0 @@ -'use client' -import ImagesScreen from '@app/core/screens/ImagesScreen' - -export default ImagesScreen diff --git a/apps/next/app/(main)/page.tsx b/apps/next/app/(main)/page.tsx deleted file mode 100644 index 12f90ec..0000000 --- a/apps/next/app/(main)/page.tsx +++ /dev/null @@ -1,4 +0,0 @@ -'use client' -import HomeScreen from '@app/core/routes/index' - -export default HomeScreen diff --git a/apps/next/app/(main)/subpages/[slug]/page.tsx b/apps/next/app/(main)/subpages/[slug]/page.tsx deleted file mode 100644 index 1ca1598..0000000 --- a/apps/next/app/(main)/subpages/[slug]/page.tsx +++ /dev/null @@ -1,4 +0,0 @@ -'use client' -import SlugScreen from '@app/core/screens/SlugScreen' - -export default SlugScreen diff --git a/features/@app-core/graphql/schema.graphql b/features/@app-core/graphql/schema.graphql index d7f60f8..053199c 100644 --- a/features/@app-core/graphql/schema.graphql +++ b/features/@app-core/graphql/schema.graphql @@ -1,4 +1,4 @@ -## -i- This file was generated by the 'build-graphql-schema' script. Don't modify it manually. +## -i- This file was generated using the 'npx turbo run @green-stack/core#build:schema' script. Don't modify it manually. scalar Date diff --git a/features/@app-core/graphql/typeDefs.ts b/features/@app-core/graphql/typeDefs.ts index a42a74d..07eba0a 100644 --- a/features/@app-core/graphql/typeDefs.ts +++ b/features/@app-core/graphql/typeDefs.ts @@ -1,4 +1,4 @@ -// -i- This file was generated by the 'build-graphql-schema' script. Don't modify it manually. +// -i- This file was generated using the 'npx turbo run @green-stack/core#build:schema' script. Don't modify it manually. export const typeDefs = `scalar Date diff --git a/apps/next/app/(main)/api/graphql/route.ts b/features/@app-core/routes/api/graphql/route.ts similarity index 84% rename from apps/next/app/(main)/api/graphql/route.ts rename to features/@app-core/routes/api/graphql/route.ts index 153cd10..0a61351 100644 --- a/apps/next/app/(main)/api/graphql/route.ts +++ b/features/@app-core/routes/api/graphql/route.ts @@ -1,5 +1,5 @@ import type { NextRequest } from 'next/server' -import { createGraphQLServerHandler } from '@app/core/graphql/graphqlServer' +import { createGraphQLServerHandler } from '../../../graphql/graphqlServer' /* --- Handler --------------------------------------------------------------------------------- */ diff --git a/features/@app-core/routes/images/index.tsx b/features/@app-core/routes/images/index.tsx new file mode 100644 index 0000000..d12e5ad --- /dev/null +++ b/features/@app-core/routes/images/index.tsx @@ -0,0 +1,11 @@ +import { UniversalRouteScreen } from '@green-stack/core/navigation/UniversalRouteScreen' +import ImagesScreen from '../../screens/ImagesScreen' + +/* --- /images --------------------------------------------------------------------------------- */ + +export default (props: any) => ( + +) diff --git a/features/@app-core/routes/index.tsx b/features/@app-core/routes/index.tsx index 34d1370..d8a3eaf 100644 --- a/features/@app-core/routes/index.tsx +++ b/features/@app-core/routes/index.tsx @@ -1,4 +1,4 @@ -import { UniversalRouteScreen } from '../../../packages/@green-stack-core/navigation/UniversalRouteScreen' +import { UniversalRouteScreen } from '@green-stack/core/navigation/UniversalRouteScreen' import HomeScreen, { queryBridge } from '../screens/HomeScreen' /* --- / --------------------------------------------------------------------------------------- */ diff --git a/features/@app-core/routes/subpages/[slug]/index.tsx b/features/@app-core/routes/subpages/[slug]/index.tsx new file mode 100644 index 0000000..8cbadc4 --- /dev/null +++ b/features/@app-core/routes/subpages/[slug]/index.tsx @@ -0,0 +1,11 @@ +import { UniversalRouteScreen } from '@green-stack/core/navigation/UniversalRouteScreen' +import SlugScreen from '../../../screens/SlugScreen' + +/* --- /subpages/[slug] ------------------------------------------------------------------------ */ + +export default (props: any) => ( + +) diff --git a/features/@app-core/screens/ImagesScreen.tsx b/features/@app-core/screens/ImagesScreen.tsx index 8a03cc0..4068821 100644 --- a/features/@app-core/screens/ImagesScreen.tsx +++ b/features/@app-core/screens/ImagesScreen.tsx @@ -1,3 +1,4 @@ +import type { HydratedRouteProps } from '@green-stack/core/navigation/UniversalRouteScreen.helpers' import React from 'react' import { View, Text, Image, Link } from '../components/styled' @@ -7,7 +8,7 @@ const greenStackLogo = require('../assets/green-stack-logo.png') /* --- ------------------------------------------------------------------------- */ -const ImagesScreen = () => { +const ImagesScreen = (props: HydratedRouteProps) => { return ( any$Unknown, + routeDataFetcher: (...args: any[]) => Promise, + routeParamsToQueryKey: any, + routeParamsToQueryInput: any + initialData?: any } > = ReturnType> & { /** -i- The route key for the query */ @@ -87,3 +93,20 @@ export const createQueryBridge = < fetcherDataToProps: fetcherDataToProps as FetcherToProps, } } + +/* --- Defaults -------------------------------------------------------------------------------- */ + +export const DEFAULT_QUERY_BRIDGE = { + routeParamsToQueryKey: (routeParams: Record) => JSON.stringify(routeParams), + routeParamsToQueryInput: (routeParams: Record) => routeParams, + routeDataFetcher: async () => ({}), + initialData: {}, +} as unknown as QueryBridgeConfig< + Record, + Record, + QueryFn, Record>, + Record, + (data: Record) => Record, + (routeParams: Record) => QueryKey, + (routeParams: Record) => Record +> diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx b/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx index 82f5f6a..d682eee 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx @@ -1,6 +1,6 @@ 'use client' import { useQuery } from '@tanstack/react-query' -import type { UniversalRouteProps, QueryFn } from './UniversalRouteScreen.helpers' +import { type UniversalRouteProps, type QueryFn, DEFAULT_QUERY_BRIDGE } from './UniversalRouteScreen.helpers' import { useRouteParams } from './useRouteParams' /** --- -------------------------------------------------------------------- */ @@ -10,7 +10,7 @@ export const UniversalRouteScreen = < RES extends Record = Record, >(props: UniversalRouteProps) => { // Props - const { params: routeParams, searchParams, queryBridge, routeScreen: RouteScreen, ...screenProps } = props + const { params: routeParams, searchParams, routeScreen: RouteScreen, queryBridge = DEFAULT_QUERY_BRIDGE, ...screenProps } = props const { routeParamsToQueryKey, routeParamsToQueryInput, routeDataFetcher } = queryBridge const fetcherDataToProps = queryBridge.fetcherDataToProps || ((data: Awaited>>) => data) @@ -18,7 +18,7 @@ export const UniversalRouteScreen = < const expoRouterParams = useRouteParams(props) // Vars - const queryParams = { ...routeParams, ...searchParams, ...expoRouterParams } + const queryParams = { ...routeParams, ...searchParams, ...expoRouterParams } as ARGS // @ts-ignore const queryKey = routeParamsToQueryKey(queryParams as any) const queryInput = routeParamsToQueryInput(queryParams as any) @@ -26,7 +26,7 @@ export const UniversalRouteScreen = < const queryConfig = { queryKey, - queryFn: async () => await routeDataFetcher(queryInput), + queryFn: async () => await routeDataFetcher(queryInput as ARGS), initialData: queryBridge.initialData as Awaited, } diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx b/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx index e935c0c..4ea2000 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx @@ -1,7 +1,7 @@ 'use client' import { use, useState, useEffect } from 'react' import { useQueryClient, useQuery, dehydrate, HydrationBoundary } from '@tanstack/react-query' -import type { UniversalRouteProps, QueryFn } from './UniversalRouteScreen.helpers' +import { type UniversalRouteProps, type QueryFn, DEFAULT_QUERY_BRIDGE } from './UniversalRouteScreen.helpers' import { useRouteParams } from './useRouteParams' import { isExpoWebLocal } from '../../../features/@app-core/appConfig' @@ -28,7 +28,7 @@ export const UniversalRouteScreen = < RES extends Record = Record, >(props: UniversalRouteProps) => { // Props - const { params: routeParams, searchParams, queryBridge, routeScreen: RouteScreen, ...screenProps } = props + const { params: routeParams, searchParams, queryBridge = DEFAULT_QUERY_BRIDGE, routeScreen: RouteScreen, ...screenProps } = props const { routeParamsToQueryKey, routeParamsToQueryInput, routeDataFetcher } = queryBridge const fetcherDataToProps = queryBridge.fetcherDataToProps || ((data: Awaited>>) => data) @@ -44,8 +44,8 @@ export const UniversalRouteScreen = < // Vars const isBrowser = typeof window !== 'undefined' - const queryParams = { ...routeParams, ...searchParams, ...nextRouterParams } - const queryKey = routeParamsToQueryKey(queryParams as any) + const queryParams = { ...routeParams, ...searchParams, ...nextRouterParams } // @ts-ignore + const queryKey = routeParamsToQueryKey(queryParams as unknown as ARGS) const queryInput = routeParamsToQueryInput(queryParams as any) // -- Effects -- @@ -61,7 +61,7 @@ export const UniversalRouteScreen = < const queryConfig = { queryKey, - queryFn: async () => await routeDataFetcher(queryInput), + queryFn: async () => await routeDataFetcher(queryInput as unknown as ARGS), initialData: queryBridge.initialData, } diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index 2cff519..87df9ac 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -21,6 +21,7 @@ "build:schema": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/build-graphql-schema.ts", "check:workspaces": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/check-workspaces.ts", "collect:resolvers": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/collect-resolvers.ts", + "link:routes": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/link-routes.ts", "test": "bun test --preload ./preload.test.ts --tsconfig-override tsconfig.test.json --verbose" } } diff --git a/packages/@green-stack-core/preload.test.ts b/packages/@green-stack-core/preload.test.ts index e5b0bda..7f0832e 100644 --- a/packages/@green-stack-core/preload.test.ts +++ b/packages/@green-stack-core/preload.test.ts @@ -5,7 +5,7 @@ import { mock } from 'bun:test' // -i- We need aliases for these as they touch parts of react-native that ship Flow types // -i- ...which typescript can't deal with. -mock.module('expo-constants', () => import('./__mocks__/expo-constants')) -mock.module(require.resolve('expo-constants'), () => import('./__mocks__/expo-constants')) // @ts-ignore +mock.module('expo-constants', () => import('./__mocks__/expo-constants.mock')) +mock.module(require.resolve('expo-constants'), () => import('./__mocks__/expo-constants.mock')) // @ts-ignore mock.module('react-native', () => import('react-native-web')) // @ts-ignore mock.module(require.resolve('react-native'), () => import('react-native-web')) diff --git a/packages/@green-stack-core/scripts/build-graphql-schema.ts b/packages/@green-stack-core/scripts/build-graphql-schema.ts index bb9c9f4..1345550 100644 --- a/packages/@green-stack-core/scripts/build-graphql-schema.ts +++ b/packages/@green-stack-core/scripts/build-graphql-schema.ts @@ -16,7 +16,7 @@ const currentDir = path.dirname(fileURLToPath(import.meta.url)) const schemaPath = path.resolve(currentDir, '../../../features/@app-core/graphql', 'schema.graphql') const typeDefsPath = path.resolve(currentDir, '../../../features/@app-core/graphql', 'typeDefs.ts') -const disclaimer = `-i- This file was generated by the 'build-graphql-schema' script. Don't modify it manually.\n` +const disclaimer = `-i- This file was generated using the 'npx turbo run @green-stack/core#build:schema' script. Don't modify it manually.\n` const CUSTOM_SCALARS = ['scalar Date', 'scalar JSON', 'scalar JSONObject'] as const diff --git a/packages/@green-stack-core/scripts/check-workspaces.ts b/packages/@green-stack-core/scripts/check-workspaces.ts index dae1f37..336a832 100644 --- a/packages/@green-stack-core/scripts/check-workspaces.ts +++ b/packages/@green-stack-core/scripts/check-workspaces.ts @@ -15,8 +15,10 @@ const SKIPPED_WORKSPACES = ['@green-stack/core', '@app/registries'] /* --- Templates ------------------------------------------------------------------------------- */ -const template = `// -i- Auto generated with "npm run check-workspaces" -module.exports = {{exports}}\n` +const template = [ + `// -i- Auto generated with "npx turbo run @green-stack/core#check:workspaces"`, + `module.exports = {{exports}}\n` +].join('\n') /* --- check-workspaces ------------------------------------------------------------------------ */ diff --git a/packages/@green-stack-core/scripts/collect-resolvers.ts b/packages/@green-stack-core/scripts/collect-resolvers.ts index f0309d5..9c3abd1 100644 --- a/packages/@green-stack-core/scripts/collect-resolvers.ts +++ b/packages/@green-stack-core/scripts/collect-resolvers.ts @@ -3,13 +3,17 @@ import fs from 'fs' import { findTargetString } from '../utils/stringUtils' import { excludeDirs, parseWorkspaces } from './helpers/scriptUtils' +/* --- Constants ------------------------------------------------------------------------------ */ + +const genMsg = `// -i- Auto generated with "npx turbo run @green-stack/core#collect:resolvers" -- /packages/@green-stack-core/scripts/collect-resolvers.ts\n` + /* --- collect-resolvers ---------------------------------------------------------------------- */ const collectResolvers = () => { try { // Get all resolver file paths in the next app's api folder const featureAPIRoutes = glob.sync('../../features/**/routes/api/**/route.ts').filter(excludeDirs) // prettier-ignore - const packageAPIRoutes = glob.sync('../../packages/**/routes/api/**/*.ts').filter(excludeDirs) // prettier-ignore + const packageAPIRoutes = glob.sync('../../packages/**/routes/api/**/route.ts').filter(excludeDirs) // prettier-ignore const allAPIRoutes = [...featureAPIRoutes, ...packageAPIRoutes] // Figure out import paths from each workspace @@ -39,7 +43,7 @@ const collectResolvers = () => { const exportLine = `export { graphResolver as ${resolverName} } from '${importPath}'` // Add the resolver to the registry return `${acc}${exportLine}\n` - }, '// -i- Auto generated with "npm run collect-resolvers" -- /packages/@aetherspace/scripts/collect-resolvers.ts\n') // prettier-ignore + }, genMsg) // prettier-ignore // Write barrel file to 'packages/@registries/resolvers.generated.ts' fs.writeFileSync('../../packages/@registries/resolvers.generated.ts', resolverRegistry) console.log('-----------------------------------------------------------------') diff --git a/packages/@green-stack-core/scripts/link-routes.ts b/packages/@green-stack-core/scripts/link-routes.ts new file mode 100644 index 0000000..b282f49 --- /dev/null +++ b/packages/@green-stack-core/scripts/link-routes.ts @@ -0,0 +1,277 @@ +import glob from 'glob' +import fs from 'fs' +import { excludeDirs, parseWorkspaces } from './helpers/scriptUtils' + +/* --- Constants ------------------------------------------------------------------------------- */ + +const genMsg = `// -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten` + +const manifestTemplate = `${genMsg} +export const routeManifest = { +{{routeManifestLines}} +} as const + +// eslint-disable-next-line @typescript-eslint/ban-types +export type KnownRoutes = keyof typeof routeManifest | (string & {}) +` + +/* --- link-routes ----------------------------------------------------------------------------- */ + +const linkRoutes = () => { + try { + // Keep track of routes to save manifest + const routeManifest = {} as ObjectType + + // Get all route paths in the features & package folders + const packageRoutePaths = glob.sync('../../packages/**/routes/**/*.{ts,tsx}').filter(excludeDirs) // prettier-ignore + const featureRoutePaths = glob.sync('../../features/**/routes/**/*.{ts,tsx}').filter(excludeDirs) // prettier-ignore + const allRoutePaths = [...packageRoutePaths, ...featureRoutePaths] + + // Determine each route type + const layoutRoutes = allRoutePaths.filter((pth) => pth.includes('layout.ts')) // e.g. "/**/layout.tsx" + const templateRoutes = allRoutePaths.filter((pth) => pth.includes('template.ts')) // e.g. "/**/template.tsx" + const errorRoutes = allRoutePaths.filter((pth) => pth.includes('error.ts')) // e.g. "/**/error.tsx" + const loadingRoutes = allRoutePaths.filter((pth) => pth.includes('loading.ts')) // e.g. "/**/loading.tsx" + const notFoundRoutes = allRoutePaths.filter((pth) => pth.includes('not-found.ts')) // e.g. "/**/not-found.tsx" + const opengraphImageRoutes = allRoutePaths.filter((pth) => pth.includes('opengraph-image.ts')) // e.g. "/**/not-found.tsx" + const twitterImageRoutes = allRoutePaths.filter((pth) => pth.includes('twitter-image.ts')) // e.g. "/**/not-found.tsx" + const apiRoutes = allRoutePaths.filter((pth) => pth.includes('route.ts')) // e.g. "/**/route.tsx" + const indexRoutes = allRoutePaths.filter((pth) => pth.includes('index.ts')) // e.g. "/**/index.tsx" + const headRoutes = allRoutePaths.filter((pth) => pth.includes('head.ts')) // e.g. "/**/head.tsx" + const paramRoutes = allRoutePaths.filter((pth) => pth.includes('].ts')) // e.g. "/**/[slug].tsx" + + // Figure out import paths from each workspace + const { workspaceImports } = parseWorkspaces() + + // Parse & match each route path to a workspace import + const parsePath = (pth: string, autoDefault = true) => { + let screenComponentName = '' + // Figure out the workspace import + const [packageParts, routeParts] = pth.split('/routes') as [string, string] + const workspaceMatcher = packageParts.replace('../../', '') + const workspacePackageName = workspaceImports[workspaceMatcher] + // Figure out relevant routing exports + const nextExports = autoDefault ? ['default'] : ([] as string[]) + const expoExports = autoDefault ? ['default'] : ([] as string[]) + if ([...indexRoutes, ...paramRoutes, ...apiRoutes].includes(pth)) { + const routeFile = fs.readFileSync(pth, 'utf8') + // Keep track of which Screen component is used? + if (routeFile.includes("/screens/")) + screenComponentName = routeFile.split("/screens/")[1].split("'")[0].trim() // prettier-ignore + if (routeFile.includes('screen={')) + screenComponentName = routeFile.split('screen={')[1].split('}')[0] + if (routeFile.includes('ScreenComponent')) + screenComponentName = routeFile.split('ScreenComponent')[1].split('=')[1].split('\n')[0].trim() // prettier-ignore + if (screenComponentName.includes('.')) + screenComponentName = screenComponentName.split('.').pop() as string + // Always check if there's a default export when autoDefault is false + if (!autoDefault && routeFile.includes('default')) nextExports.push('next') + // Next.js Route Segment Config Exports + if (routeFile.includes('dynamic')) nextExports.push('dynamic') + if (routeFile.includes('dynamicParams')) nextExports.push('dynamicParams') + if (routeFile.includes('revalidate')) nextExports.push('revalidate') + if (routeFile.includes('fetchCache')) nextExports.push('fetchCache') + if (routeFile.includes('runtime')) nextExports.push('runtime') + if (routeFile.includes('preferredRegion')) nextExports.push('preferredRegion') + if (routeFile.includes('generateStaticParams')) nextExports.push('generateStaticParams') + // Next.js API Route Method Exports + if (routeFile.includes('GET')) nextExports.push('GET') + if (routeFile.includes('POST')) nextExports.push('POST') + if (routeFile.includes('PUT')) nextExports.push('PUT') + if (routeFile.includes('PATCH')) nextExports.push('PATCH') + if (routeFile.includes('DELETE')) nextExports.push('DELETE') + if (routeFile.includes('HEAD')) nextExports.push('HEAD') + if (routeFile.includes('OPTIONS')) nextExports.push('OPTIONS') + } else if ([...opengraphImageRoutes, ...twitterImageRoutes].includes(pth)) { + const routeFile = fs.readFileSync(pth, 'utf8') + if (routeFile.includes('alt')) nextExports.push('alt') + if (routeFile.includes('contentType')) nextExports.push('contentType') + if (routeFile.includes('size')) nextExports.push('size') + } + // Return everything + return { workspacePackageName, routeParts, nextExports, expoExports, screenComponentName } + } + // Clear previous generated route files + fs.mkdirSync('../../apps/expo/app/(generated)', { recursive: true }) // create empty folder if it doesn't exist + fs.rmSync('../../apps/expo/app/(generated)', { recursive: true }) + fs.mkdirSync('../../apps/next/app/(generated)', { recursive: true }) // create empty folder if it doesn't exist + fs.rmSync('../../apps/next/app/(generated)', { recursive: true }) + console.log('-----------------------------------------------------------------') + console.log("-i- Auto linking routes with 'npx turbo @green-stack/core#link:routes' ...") + console.log('-----------------------------------------------------------------') + + // Reexport fs based index routing in next & expo app dirs + indexRoutes.forEach((pth) => { + const { workspacePackageName, routeParts, nextExports, expoExports, screenComponentName } = parsePath(pth) // prettier-ignore + const routeSegments = routeParts.split('index.ts')[0] + if (screenComponentName) routeManifest[routeSegments] = screenComponentName + const importPath = `${workspacePackageName}/routes${routeSegments}index` + const expoExportLine = `${genMsg}\nexport { ${expoExports.join(', ')} } from '${importPath}'\n` // prettier-ignore + const nextExportLine = `'use client'\nexport { ${nextExports.join(', ')} } from '${importPath}'\n` // prettier-ignore + fs.mkdirSync(`../../apps/expo/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/expo/app/(generated)${routeSegments}index.tsx`, expoExportLine, {}) // prettier-ignore + console.log(` ✅ ${routeSegments} -- Generated from "${pth}"`) + console.log(` └── /apps/expo/app/(generated)${routeSegments}index.tsx`) + fs.mkdirSync(`../../apps/next/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/next/app/(generated)${routeSegments}page.tsx`, nextExportLine) + console.log(` └── /apps/next/app/(generated)${routeSegments}page.tsx`) + }) + // Reexport fs based slug routing in next & expo app dirs + paramRoutes.forEach((pth) => { + const { workspacePackageName, routeParts, nextExports, expoExports, screenComponentName } = parsePath(pth) // prettier-ignore + const fileName = routeParts.split('/').pop() as string // e.g. "[slug].tsx" + const routeParam = fileName.split('.ts')[0] // e.g. "[slug]" + const routeSegments = routeParts.split(fileName)[0] + if (screenComponentName) routeManifest[routeSegments] = screenComponentName + const importPath = `${workspacePackageName}/routes${routeSegments}${routeParam}` + const expoExportLine = `export { ${expoExports.join(', ')} } from '${importPath}'\n` + const nextExportLine = `'use client'\n${genMsg}\nexport { ${nextExports.join(', ')} } from '${importPath}'\n` // prettier-ignore + fs.mkdirSync(`../../apps/expo/app/(generated)${routeSegments}${routeParam}`, { recursive: true }) // prettier-ignore + fs.writeFileSync(`../../apps/expo/app/(generated)${routeSegments}${routeParam}/index.tsx`, expoExportLine) // prettier-ignore + console.log(` ✅ ${routeSegments}${routeParam}/ -- Generated from "${pth}"`) + console.log(` └── /apps/expo/app/(generated)${routeSegments}${routeParam}/index.tsx`) + fs.mkdirSync(`../../apps/next/app/(generated)${routeSegments}${routeParam}`, { recursive: true }) // prettier-ignore + fs.writeFileSync(`../../apps/next/app/(generated)${routeSegments}${routeParam}/page.tsx`, nextExportLine) // prettier-ignore + console.log(` └── /apps/next/app/(generated)${routeSegments}${routeParam}/page.tsx`) + }) + + if (layoutRoutes.length || templateRoutes.length || headRoutes.length) console.log('--- \n') + + // Reexport fs based layout routing in next & expo app dirs + layoutRoutes.forEach((pth) => { + const { workspacePackageName, routeParts } = parsePath(pth) + const routeSegments = routeParts.split('layout.ts')[0] + const isRootLayout = routeSegments === '/' + if (!isRootLayout) { + const importPath = `${workspacePackageName}/routes${routeSegments}layout` + const exportLine = `'use client'\n${genMsg}\nexport { default } from '${importPath}'\n` + fs.mkdirSync(`../../apps/expo/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/expo/app/(generated)${routeSegments}_layout.tsx`, exportLine) + console.log(` ✅ ${routeSegments} -- Layout from "${pth}"`) + console.log(` └── /apps/expo/app/(generated)${routeSegments}_layout.tsx`) + fs.mkdirSync(`../../apps/next/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/next/app/(generated)${routeSegments}layout.tsx`, exportLine) + console.log(` └── /apps/next/app/(generated)${routeSegments}layout.tsx`) + } + }) + // Reexport fs based template routing in next & expo app dirs + templateRoutes.forEach((pth) => { + const { workspacePackageName, routeParts } = parsePath(pth) + const routeSegments = routeParts.split('template.ts')[0] + const isRootLayout = routeSegments === '/' + if (!isRootLayout) { + const importPath = `${workspacePackageName}/routes${routeSegments}template` + const exportLine = `'use client'\n${genMsg}\nexport { default } from '${importPath}'\n` + fs.mkdirSync(`../../apps/expo/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/expo/app/(generated)${routeSegments}_layout.tsx`, exportLine) + console.log(` ✅ ${routeSegments} -- Template from "${pth}"`) + console.log(` └── /apps/expo/app/(generated)${routeSegments}_layout.tsx`) + fs.mkdirSync(`../../apps/next/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/next/app/(generated)${routeSegments}template.tsx`, exportLine) + console.log(` └── /apps/next/app/(generated)${routeSegments}template.tsx`) + } + }) + // Reexport fs based head config in next app dir + headRoutes.forEach((pth) => { + const { workspacePackageName, routeParts } = parsePath(pth) + const routeSegments = routeParts.split('head.ts')[0] + const importPath = `${workspacePackageName}/routes${routeSegments}head` + const exportLine = `${genMsg}\nexport { default } from '${importPath}'\n` + fs.mkdirSync(`../../apps/next/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/next/app/(generated)${routeSegments}head.tsx`, exportLine) + console.log(` ✅ ${routeSegments} -- Head file from "${pth}"`) + console.log(` └── /apps/next/app/(generated)${routeSegments}head.tsx`) + }) + + // Reexport fs based error pages next to app dir + errorRoutes.forEach((pth) => { + const { workspacePackageName, routeParts } = parsePath(pth) + const routeSegments = routeParts.split('error.ts')[0] + const importPath = `${workspacePackageName}/routes${routeSegments}error` + const exportLine = `'use client'\n${genMsg}\nexport { default } from '${importPath}'\n` + fs.mkdirSync(`../../apps/next/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/next/app/(generated)${routeSegments}error.tsx`, exportLine) + console.log(` ✅ ${routeSegments} -- Error route from "${pth}"`) + console.log(` └── /apps/next/app/(generated)${routeSegments}error.tsx`) + }) + + // Reexport fs based error pages next to app dir + loadingRoutes.forEach((pth) => { + const { workspacePackageName, routeParts } = parsePath(pth) + const routeSegments = routeParts.split('loading.ts')[0] + const importPath = `${workspacePackageName}/routes${routeSegments}error` + const exportLine = `'use client'\n${genMsg}\nexport { default } from '${importPath}'\n` + fs.mkdirSync(`../../apps/next/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/next/app/(generated)${routeSegments}loading.tsx`, exportLine) + console.log(` ✅ ${routeSegments} -- Loading route from "${pth}"`) + console.log(` └── /apps/next/app/(generated)${routeSegments}loading.tsx`) + }) + + // Reexport fs based not-found pages to next app dir + notFoundRoutes.forEach((pth) => { + const { workspacePackageName, routeParts } = parsePath(pth) + const routeSegments = routeParts.split('not-found.ts')[0] + const importPath = `${workspacePackageName}/routes${routeSegments}not-found` + const exportLine = `'use client'\n${genMsg}\nexport { default } from '${importPath}'\n` + fs.mkdirSync(`../../apps/next/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/next/app/(generated)${routeSegments}not-found.tsx`, exportLine) + console.log(` ✅ ${routeSegments} -- 404 Not Found route from "${pth}"`) + console.log(` └── /apps/next/app/(generated)${routeSegments}not-found.tsx`) + }) + + // Reexport fs based opengraph-image routes to next app dir + opengraphImageRoutes.forEach((pth) => { + const { workspacePackageName, routeParts, nextExports } = parsePath(pth) + const routeSegments = routeParts.split('opengraph-image.ts')[0] + const importPath = `${workspacePackageName}/routes${routeSegments}opengraph-image` + const exportLine = `${genMsg}\nexport { ${nextExports.join(', ')} } from '${importPath}'\n` // prettier-ignore + fs.mkdirSync(`../../apps/next/app/${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/next/app/${routeSegments}opengraph-image.tsx`, exportLine) // prettier-ignore + console.log(` ✅ ${routeSegments} -- opengraph-image route from "${pth}"`) + console.log(` └── /apps/next/app/${routeSegments}opengraph-image.tsx`) + }) + + // Reexport fs based twitter-image routes to next app dir + twitterImageRoutes.forEach((pth) => { + const { workspacePackageName, routeParts, nextExports } = parsePath(pth) + const routeSegments = routeParts.split('twitter-image.ts')[0] + const importPath = `${workspacePackageName}/routes${routeSegments}twitter-image` + const exportLine = `${genMsg}\nexport { ${nextExports.join(', ')} } from '${importPath}'\n` // prettier-ignore + fs.mkdirSync(`../../apps/next/app/${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/next/app/${routeSegments}twitter-image.tsx`, exportLine) // prettier-ignore + console.log(` ✅ ${routeSegments} -- twitter-image route from "${pth}"`) + console.log(` └── /apps/next/app/${routeSegments}twitter-image.tsx`) + }) + + if (apiRoutes.length) console.log('--- \n') + + // Reexport fs based api handler routes in next app dir + apiRoutes.forEach((pth) => { + const { workspacePackageName, routeParts, nextExports } = parsePath(pth, false) + const routeSegments = routeParts.split('route.ts')[0] + const importPath = `${workspacePackageName}/routes${routeSegments}route` + const nextExportLine = `${genMsg}\nexport { ${nextExports.join(', ')} } from '${importPath}'\n` // prettier-ignore + fs.mkdirSync(`../../apps/next/app/(generated)${routeSegments}`, { recursive: true }) + fs.writeFileSync(`../../apps/next/app/(generated)${routeSegments}route.ts`, nextExportLine) + console.log(` ✅ ${routeSegments} -- API Route from "${pth}"`) + console.log(` └── /apps/next/app/(generated)${routeSegments}route.ts`) + }) + + // Save route manifest + const routeManifestPath = '../../packages/@registries/routeManifest.ts' + const routeManifestLines = Object.entries(routeManifest).map(([route, compName]) => { + const routePath = route === '/' ? '/' : route.substring(0, route.length - 1) // prettier-ignore + return ` ['${routePath}']: '${compName}',` + }).join('\n') // prettier-ignore + const routeManifestFile = manifestTemplate.replace('{{routeManifestLines}}', routeManifestLines) // prettier-ignore + fs.writeFileSync(routeManifestPath, routeManifestFile) + } catch (err) { + console.log(err) + console.error(err) + process.exit(1) + } +} + +/* --- init ------------------------------------------------------------------------------------ */ + +linkRoutes() diff --git a/packages/@registries/resolvers.generated.ts b/packages/@registries/resolvers.generated.ts index e0d0423..de4e993 100644 --- a/packages/@registries/resolvers.generated.ts +++ b/packages/@registries/resolvers.generated.ts @@ -1,2 +1,2 @@ -// -i- Auto generated with "npm run collect-resolvers" -- /packages/@aetherspace/scripts/collect-resolvers.ts +// -i- Auto generated with "npx turbo run @green-stack/core#collect:resolvers" -- /packages/@green-stack-core/scripts/collect-resolvers.ts export { graphResolver as healthCheck } from '@app/core/routes/api/health/route' diff --git a/packages/@registries/routeManifest.ts b/packages/@registries/routeManifest.ts new file mode 100644 index 0000000..f614947 --- /dev/null +++ b/packages/@registries/routeManifest.ts @@ -0,0 +1,9 @@ +// -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten +export const routeManifest = { + ['/images']: 'ImagesScreen', + ['/']: 'HomeScreen', + ['/subpages/[slug]']: 'SlugScreen', +} as const + +// eslint-disable-next-line @typescript-eslint/ban-types +export type KnownRoutes = keyof typeof routeManifest | (string & {}) diff --git a/packages/@registries/transpiledWorkspaces.generated.js b/packages/@registries/transpiledWorkspaces.generated.js index c90c1fd..a673916 100644 --- a/packages/@registries/transpiledWorkspaces.generated.js +++ b/packages/@registries/transpiledWorkspaces.generated.js @@ -1,4 +1,4 @@ -// -i- Auto generated with "npm run check-workspaces" +// -i- Auto generated with "npx turbo run @green-stack/core#check:workspaces" module.exports = [ "@green-stack/core", "@app/registries", diff --git a/packages/@registries/workspaceResolutions.generated.js b/packages/@registries/workspaceResolutions.generated.js index 5153176..a945662 100644 --- a/packages/@registries/workspaceResolutions.generated.js +++ b/packages/@registries/workspaceResolutions.generated.js @@ -1,2 +1,2 @@ -// -i- Auto generated with "npm run check-workspaces" +// -i- Auto generated with "npx turbo run @green-stack/core#check:workspaces" module.exports = {} diff --git a/turbo.json b/turbo.json index c33359a..5cb351e 100644 --- a/turbo.json +++ b/turbo.json @@ -32,12 +32,15 @@ "cache": false }, "@green-stack/core#collect:resolvers": { - "cache": true + "cache": false + }, + "@green-stack/core#link:routes": { + "cache": false }, "@green-stack/core#build:schema": { + "dependsOn": ["@green-stack/core#collect:resolvers", "@green-stack/core#link:routes"], "outputs": ["**/schema.graphql", "**/schema.ts", "**/graphql-env.d.ts"], "inputs": [], - "dependsOn": ["@green-stack/core#collect:resolvers"], "cache": true }, "@green-stack/core#check:workspaces": { From 12adef1a98166e94f80c95812de56ece38285fc8 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sun, 16 Jun 2024 19:25:29 +0200 Subject: [PATCH 028/126] feat: Add href & params prop hints to Universal Link --- features/@app-core/components/styled.tsx | 9 ++++++++- features/@app-core/screens/HomeScreen.tsx | 5 +++-- .../@green-stack-core/context/CoreContext.tsx | 3 ++- .../navigation/Link.expo.tsx | 20 ++++++++++++++++--- .../navigation/Link.next.tsx | 20 ++++++++++++++++--- .../@green-stack-core/navigation/Link.tsx | 9 ++++++--- .../navigation/Link.types.ts | 19 +++++++++++++++--- .../@green-stack-core/scripts/link-routes.ts | 2 +- ...Manifest.ts => routeManifest.generated.ts} | 0 9 files changed, 70 insertions(+), 17 deletions(-) rename packages/@registries/{routeManifest.ts => routeManifest.generated.ts} (100%) diff --git a/features/@app-core/components/styled.tsx b/features/@app-core/components/styled.tsx index 429cf8b..ea62c0a 100644 --- a/features/@app-core/components/styled.tsx +++ b/features/@app-core/components/styled.tsx @@ -1,7 +1,9 @@ +import type { KnownRoutes } from '@app/registries/routeManifest.generated' import { styled } from 'nativewind' import { Text as RNText, View as RNView } from 'react-native' import { Link as UniversalLink } from '@green-stack/core/navigation/Link' import { Image as UniversalImage } from '@green-stack/core/components/Image' +import { UniversalLinkProps } from '@green-stack/core/navigation/Link.types' /* --- Primitives ------------------------------------------------------------------------------ */ @@ -19,8 +21,13 @@ export const P = styled(RNText, 'text-base') /* --- Fix for Next Link ----------------------------------------------------------------------- */ -export const Link = styled(UniversalLink, 'text-blue-500 underline') +export const Link = (props: UniversalLinkProps) => { + const StyledLink = styled(UniversalLink, 'text-blue-500 underline') // @ts-ignore + return +} + export const LinkText = styled(RNText, 'text-blue-500 underline') + export const TextLink = (props: Omit, 'className'> & { className?: string }) => { const { className, style, children, ...universalLinkProps } = props return ( diff --git a/features/@app-core/screens/HomeScreen.tsx b/features/@app-core/screens/HomeScreen.tsx index 2d62648..4c235e2 100644 --- a/features/@app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/HomeScreen.tsx @@ -25,8 +25,9 @@ const HomeScreen = (props: HydratedRouteProps) => {

Full-Product, Universal App with the GREEN-stack 🚀

- Open HomeScreen.tsx in features/@app-core/screens to start working on your app

- + Open HomeScreen.tsx in features/@app-core/screens to start working on your app +

+ Test navigation diff --git a/packages/@green-stack-core/context/CoreContext.tsx b/packages/@green-stack-core/context/CoreContext.tsx index 162aa1b..11f8b41 100644 --- a/packages/@green-stack-core/context/CoreContext.tsx +++ b/packages/@green-stack-core/context/CoreContext.tsx @@ -4,6 +4,7 @@ import { UniversalRouterMethods } from '../navigation/useRouter.types' import { UniversalRouteScreenProps } from '../navigation/useRouteParams.types' import type { useLocalSearchParams } from 'expo-router' import type { UniversalImageMethods, UniversalImageProps } from '../components/Image.types' +import { KnownRoutes } from '@app/registries/routeManifest.generated' /* --- Notes ----------------------------------------------------------------------------------- */ @@ -16,7 +17,7 @@ import type { UniversalImageMethods, UniversalImageProps } from '../components/I export type CoreContextType = { contextImage: ((props: UniversalImageProps) => JSX.Element) & UniversalImageMethods - contextLink: (props: UniversalLinkProps) => JSX.Element + contextLink: (props: UniversalLinkProps) => JSX.Element contextRouter: UniversalRouterMethods useContextRouteParams: (routeScreenProps: UniversalRouteScreenProps) => ReturnType } diff --git a/packages/@green-stack-core/navigation/Link.expo.tsx b/packages/@green-stack-core/navigation/Link.expo.tsx index d90bb6e..17230de 100644 --- a/packages/@green-stack-core/navigation/Link.expo.tsx +++ b/packages/@green-stack-core/navigation/Link.expo.tsx @@ -1,14 +1,18 @@ +import type { KnownRoutes } from '@app/registries/routeManifest.generated' +import type { UniversalLinkProps } from './Link.types' import { Link as ExpoLink } from 'expo-router' import { parseNativeWindStyles } from '../styles/parseNativeWindStyles' -import type { UniversalLinkProps } from './Link.types' /* --- --------------------------------------------------------------------------------- */ -export const Link = (props: UniversalLinkProps) => { +export const Link = < + HREF extends KnownRoutes +>(props: UniversalLinkProps) => { // Props const { children, href, + params = {}, style, replace, onPress, @@ -22,6 +26,16 @@ export const Link = (props: UniversalLinkProps) => { maxFontSizeMultiplier } = props + // -- Inject params? -- + + const finalHref = Object.keys(params).reduce((acc, key) => { + // Inject into [param] in href? + const isRouteParam = acc.includes(`[${key}]`) + if (isRouteParam) return acc.replace(`[${key}]`, params[key]) + // Inject as query param instead? + return `${acc}${acc.includes('?') ? '&' : '?'}${key}=${params[key]}` + }, href) + // -- Nativewind -- const { nativeWindStyles, restStyle } = parseNativeWindStyles(style) @@ -31,7 +45,7 @@ export const Link = (props: UniversalLinkProps) => { return ( --------------------------------------------------------------------------------- */ -export const Link = (props: UniversalLinkProps) => { +export const Link = < + HREF extends KnownRoutes +>(props: UniversalLinkProps) => { // Props const { children, href, + params = {}, className, style, replace, @@ -23,6 +27,16 @@ export const Link = (props: UniversalLinkProps) => { as, } = props + // -- Inject params? -- + + const finalHref = Object.keys(params).reduce((acc, key) => { + // Inject into [param] in href? + const isRouteParam = acc.includes(`[${key}]`) + if (isRouteParam) return acc.replace(`[${key}]`, params[key]) + // Inject as query param instead? + return `${acc}${acc.includes('?') ? '&' : '?'}${key}=${params[key]}` + }, href) + // -- Nativewind -- const { nativeWindStyles, nativeWindClassName, restStyle } = parseNativeWindStyles(style) @@ -32,7 +46,7 @@ export const Link = (props: UniversalLinkProps) => { return ( ['style']} onClick={onPress} diff --git a/packages/@green-stack-core/navigation/Link.tsx b/packages/@green-stack-core/navigation/Link.tsx index 271d490..54ea398 100644 --- a/packages/@green-stack-core/navigation/Link.tsx +++ b/packages/@green-stack-core/navigation/Link.tsx @@ -1,14 +1,17 @@ -import React from 'react' +import type { KnownRoutes } from '@app/registries/routeManifest.generated' import type { UniversalLinkProps } from './Link.types' +import React from 'react' import { CoreContext } from '../context/CoreContext' /* --- --------------------------------------------------------------------------------- */ -export const Link = (props: UniversalLinkProps) => { +export const Link = < + HREF extends KnownRoutes +>(props: UniversalLinkProps) => { // Context const { contextLink: ContextLink } = React.useContext(CoreContext) - // Render + // @ts-ignore return } diff --git a/packages/@green-stack-core/navigation/Link.types.ts b/packages/@green-stack-core/navigation/Link.types.ts index d087997..fba3fb3 100644 --- a/packages/@green-stack-core/navigation/Link.types.ts +++ b/packages/@green-stack-core/navigation/Link.types.ts @@ -1,14 +1,27 @@ import type { LinkProps as NextLinkProps } from 'next/link' import type { LinkProps as ExpoLinkProps } from 'expo-router/build/link/Link' +import type { KnownRoutes } from '@app/registries/routeManifest.generated' /* --- Types ----------------------------------------------------------------------------------- */ -export type UniversalLinkProps = { +export type ExtractParams = HREF extends `${infer START}/[${infer PARAM}]${infer REST}` + ? PARAM | ExtractParams + : never + +export type LinkParams = { + [K in ExtractParams]: string | number | boolean +} + +export type RequireParamsIfDynamic = ExtractParams extends never + ? { params?: ObjectType } + : { params: LinkParams & ObjectType } + +export type UniversalLinkProps = { children: React.ReactNode; /** Universal - The path to route to on web or mobile. String only. */ - href: string; + href: HREF; /** Universal - Style prop: https://reactnative.dev/docs/text#style */ style?: ExpoLinkProps['style']; @@ -63,6 +76,6 @@ export type UniversalLinkProps = { /** Web only - Optional decorator for the path that will be shown in the browser URL bar. Before Next.js 9.5.3 this was used for dynamic routes, check our [previous docs](https://github.com/vercel/next.js/blob/v9.5.2/docs/api-reference/next/link.md#dynamic-routes) to see how it worked. Note: when this path differs from the one provided in `href` the previous `href`/`as` behavior is used as shown in the [previous docs](https://github.com/vercel/next.js/blob/v9.5.2/docs/api-reference/next/link.md#dynamic-routes). */ as?: NextLinkProps['as']; -} +} & RequireParamsIfDynamic export { NextLinkProps, ExpoLinkProps } diff --git a/packages/@green-stack-core/scripts/link-routes.ts b/packages/@green-stack-core/scripts/link-routes.ts index b282f49..645c68a 100644 --- a/packages/@green-stack-core/scripts/link-routes.ts +++ b/packages/@green-stack-core/scripts/link-routes.ts @@ -258,7 +258,7 @@ const linkRoutes = () => { }) // Save route manifest - const routeManifestPath = '../../packages/@registries/routeManifest.ts' + const routeManifestPath = '../../packages/@registries/routeManifest.generated.ts' const routeManifestLines = Object.entries(routeManifest).map(([route, compName]) => { const routePath = route === '/' ? '/' : route.substring(0, route.length - 1) // prettier-ignore return ` ['${routePath}']: '${compName}',` diff --git a/packages/@registries/routeManifest.ts b/packages/@registries/routeManifest.generated.ts similarity index 100% rename from packages/@registries/routeManifest.ts rename to packages/@registries/routeManifest.generated.ts From baa318a51fc2faef84d2ce2b5a17585a98648958 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sun, 16 Jun 2024 19:36:40 +0200 Subject: [PATCH 029/126] feat: Add useLayoutInfo() hook to @green-stack/core --- features/@app-core/screens/HomeScreen.tsx | 2 +- .../@green-stack-core/hooks/useLayoutInfo.ts | 63 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 packages/@green-stack-core/hooks/useLayoutInfo.ts diff --git a/features/@app-core/screens/HomeScreen.tsx b/features/@app-core/screens/HomeScreen.tsx index 4c235e2..e1d84f6 100644 --- a/features/@app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/HomeScreen.tsx @@ -1,7 +1,7 @@ import React from 'react' +import { HydratedRouteProps, createQueryBridge } from '@green-stack/core/navigation/UniversalRouteScreen.helpers' import { View, Link, Image, P, H3, Text } from '../components/styled' import { healthCheckFetcher } from '../resolvers/healthCheck.query' -import { HydratedRouteProps, createQueryBridge } from '@green-stack/core/navigation/UniversalRouteScreen.helpers' /* --- Data Fetching --------------------------------------------------------------------------- */ diff --git a/packages/@green-stack-core/hooks/useLayoutInfo.ts b/packages/@green-stack-core/hooks/useLayoutInfo.ts new file mode 100644 index 0000000..8c3d98f --- /dev/null +++ b/packages/@green-stack-core/hooks/useLayoutInfo.ts @@ -0,0 +1,63 @@ +import { useState } from 'react' +import { LayoutChangeEvent, LayoutRectangle, MeasureOnSuccessCallback } from 'react-native' + +/* --- Types ----------------------------------------------------------------------------------- */ + +type LayoutInfo = LayoutRectangle & { + pageX?: number + pageY?: number +} + +/** --- useLayoutInfo() ------------------------------------------------------------------------ */ +/** -i- Save & use layout info for components under string keys, e.g.: @example ``` + * + * import useLayoutInfo from '../useLayoutInfo()' + * + * const { measureOnLayout, layoutInfo } = useLayoutInfo() + * + * + * + * const viewHeight = layoutInfo.MyCustomView?.height + * ``` */ +export const useLayoutInfo = () => { + // State + const [layoutInfo, setLayoutInfo] = useState<{ [componentKey: string]: LayoutInfo }>({}) // prettier-ignore + + // -- Handlers -- + + const measureOnLayout = + (componentKey: string, callback?: (measurements: LayoutInfo) => void) => + ({ nativeEvent }: LayoutChangeEvent) => { + const { layout } = nativeEvent + const { x, y, width, height } = layout + const layoutMeasurements = { + ...layoutInfo[componentKey], // preserve 'pageX' & 'pageY' if available + x, + y, + width, + height, + } + setLayoutInfo({ ...layoutInfo, [componentKey]: layoutMeasurements }) + if (callback) callback(layoutMeasurements) + } + + const measureRef = + (componentKey: string, callback?: (measurements: LayoutInfo) => void) => + (...measurements: Parameters) => { + const [x, y, width, height, pageX, pageY] = measurements + const refMeasurements: LayoutInfo = { x, y, width, height, pageX, pageY } + setLayoutInfo({ + ...layoutInfo, + [componentKey]: refMeasurements, + }) + if (callback) callback(refMeasurements) + } + + // -- Return -- + + return { layoutInfo, measureOnLayout, measureRef } +} + +/* --- Export ---------------------------------------------------------------------------------- */ + +export default useLayoutInfo From fd9bfea23907d10e37c15fbc6b729f80b3984e9e Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sun, 16 Jun 2024 21:18:40 +0200 Subject: [PATCH 030/126] feat: Add workspace generator --- package-lock.json | 8637 +++++++++++------ package.json | 3 + .../generators/gen-workspace.ts | 115 + .../generators/templates/package-json.hbs | 7 + packages/@green-stack-core/package.json | 2 +- packages/@registries/generators.generated.ts | 1 + packages/@registries/package.json | 1 - turbo/generators/config.ts | 135 + 8 files changed, 5792 insertions(+), 3109 deletions(-) create mode 100644 packages/@green-stack-core/generators/gen-workspace.ts create mode 100644 packages/@green-stack-core/generators/templates/package-json.hbs create mode 100644 packages/@registries/generators.generated.ts create mode 100644 turbo/generators/config.ts diff --git a/package-lock.json b/package-lock.json index 07ec4bd..99424e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,8 @@ ], "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", + "@turbo/gen": "^1.13.2", + "inquirer-autocomplete-prompt": "^3.0.1", "turbo": "^1.13.2" }, "engines": { @@ -2451,6 +2453,19 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.7.tgz", + "integrity": "sha512-eytSX6JLBY6PVAeQa2bFlDx/7Mmln/gaEpsit5a3WEvjGfiIytEsgAwuIXCPM0xvw0v0cJn3ilq0/TvXrW0kgA==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.24.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", @@ -2501,8 +2516,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "optional": true, - "peer": true, + "devOptional": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2514,8 +2528,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "optional": true, - "peer": true, + "devOptional": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -4162,6 +4175,16 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@inquirer/figures": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.3.tgz", + "integrity": "sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -4448,6 +4471,19 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/@next/env": { "version": "14.0.4", "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.4.tgz", @@ -6948,2097 +6984,3634 @@ "react": "^18.0.0" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "optional": true, - "peer": true + "devOptional": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "optional": true, - "peer": true + "devOptional": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "optional": true, - "peer": true + "devOptional": true }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "optional": true, - "peer": true + "devOptional": true }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "node_modules/@turbo/gen": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@turbo/gen/-/gen-1.13.4.tgz", + "integrity": "sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==", + "dev": true, "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "@turbo/workspaces": "1.13.4", + "chalk": "2.4.2", + "commander": "^10.0.0", + "fs-extra": "^10.1.0", + "inquirer": "^8.2.4", + "minimatch": "^9.0.0", + "node-plop": "^0.26.3", + "proxy-agent": "^6.2.2", + "ts-node": "^10.9.1", + "update-check": "^1.5.4", + "validate-npm-package-name": "^5.0.0" + }, + "bin": { + "gen": "dist/cli.js" } }, - "node_modules/@types/bun": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.1.2.tgz", - "integrity": "sha512-pRBDD3EDqPf83qe95i3EpYu5G2J8bbb78a3736vnCm2K8YWtEE5cvJUq2jkKvJhW07YTfQtbImywIwRhWL8z3Q==", + "node_modules/@turbo/gen/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": { - "bun-types": "1.1.8" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "node_modules/@turbo/gen/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": { - "@types/node": "*" + "balanced-match": "^1.0.0" } }, - "node_modules/@types/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" - }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "node_modules/@turbo/gen/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "peer": true, "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "node_modules/@turbo/gen/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, - "peer": true, "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "peer": true + "node_modules/@turbo/gen/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/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "node_modules/@turbo/gen/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/@types/express-serve-static-core": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", - "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", + "node_modules/@turbo/gen/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "node_modules/@turbo/gen/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, - "dependencies": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "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==" - }, - "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==", + "node_modules/@turbo/gen/node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "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==", + "node_modules/@turbo/gen/node_modules/inquirer/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": { - "@types/istanbul-lib-report": "*" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "node_modules/@turbo/gen/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": { - "undici-types": "~5.26.4" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "node_modules/@turbo/gen/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "node_modules/@turbo/gen/node_modules/log-symbols/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": { - "@types/node": "*" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "node_modules/@turbo/gen/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/@types/react": { - "version": "18.2.48", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", - "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", - "devOptional": true, + "node_modules/@turbo/gen/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@types/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==", - "devOptional": true - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "node_modules/@turbo/gen/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": { - "@types/mime": "^1", - "@types/node": "*" + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "node_modules/@turbo/gen/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" - }, - "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "node_modules/@turbo/gen/node_modules/ora/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": { - "@types/node": "*" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "node_modules/@turbo/gen/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" } }, - "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==" - }, - "node_modules/@urql/core": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", - "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", + "node_modules/@turbo/gen/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": { - "@graphql-typed-document-node/core": "^3.1.0", - "wonka": "^4.0.14" + "ansi-regex": "^5.0.1" }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/@urql/exchange-retry": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", - "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", + "node_modules/@turbo/gen/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": { - "@urql/core": ">=2.3.1", - "wonka": "^4.0.14" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/@volar/language-core": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.4.tgz", - "integrity": "sha512-7As47GndxGxsqqYnbreLrfB5NDUeQioPM2LJKUuB4/34c0NpEJ2byVl3c9KYdjIdiEstWZ9JLtLKNTaPWb5jtA==", - "dependencies": { - "@volar/source-map": "2.2.4" + "node_modules/@turbo/gen/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/@volar/source-map": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.4.tgz", - "integrity": "sha512-m92FLpR9vB1YEZfiZ+bfgpLrToL/DNkOrorWVep3pffHrwwI4Tx2oIQN+sqHJfKkiT5N3J1owC+8crhAEinfjg==", - "dependencies": { - "muggle-string": "^0.4.0" + "node_modules/@turbo/gen/node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@vue/compiler-core": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", - "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "node_modules/@turbo/gen/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/shared": "3.4.27", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@vue/compiler-dom": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", - "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "node_modules/@turbo/workspaces": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@turbo/workspaces/-/workspaces-1.13.4.tgz", + "integrity": "sha512-3uYg2b5TWCiupetbDFMbBFMHl33xQTvp5DNg0fZSYal73Z9AlFH9yWabHWMYw6ywmwM1evkYRpTVA2n7GgqT5A==", + "dev": true, "dependencies": { - "@vue/compiler-core": "3.4.27", - "@vue/shared": "3.4.27" + "chalk": "2.4.2", + "commander": "^10.0.0", + "execa": "5.1.1", + "fast-glob": "^3.2.12", + "fs-extra": "^10.1.0", + "gradient-string": "^2.0.0", + "inquirer": "^8.0.0", + "js-yaml": "^4.1.0", + "ora": "4.1.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "update-check": "^1.5.4" + }, + "bin": { + "workspaces": "dist/cli.js" } }, - "node_modules/@vue/language-core": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.19.tgz", - "integrity": "sha512-A9EGOnvb51jOvnCYoRLnMP+CcoPlbZVxI9gZXE/y2GksRWM6j/PrLEIC++pnosWTN08tFpJgxhSS//E9v/Sg+Q==", + "node_modules/@turbo/workspaces/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": { - "@volar/language-core": "~2.2.4", - "@vue/compiler-dom": "^3.4.0", - "@vue/shared": "^3.4.0", - "computeds": "^0.0.1", - "minimatch": "^9.0.3", - "path-browserify": "^1.0.1", - "vue-template-compiler": "^2.7.14" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "typescript": "*" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@vue/language-core/node_modules/brace-expansion": { + "node_modules/@turbo/workspaces/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "node_modules/@vue/language-core/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/@turbo/workspaces/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" + } + }, + "node_modules/@turbo/workspaces/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" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@vue/shared": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", - "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" + "node_modules/@turbo/workspaces/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/@web3-storage/multipart-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", - "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==" + "node_modules/@turbo/workspaces/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/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "node_modules/@turbo/workspaces/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "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/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "node_modules/@turbo/workspaces/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "peer": true + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "node_modules/@turbo/workspaces/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, - "peer": true + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "node_modules/@turbo/workspaces/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, - "peer": true + "engines": { + "node": ">=8" + } }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "node_modules/@turbo/workspaces/node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "node_modules/@turbo/workspaces/node_modules/inquirer/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, - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "node_modules/@turbo/workspaces/node_modules/inquirer/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "peer": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "node_modules/@turbo/workspaces/node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "peer": true, "dependencies": { - "@xtuc/long": "4.2.2" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "node_modules/@turbo/workspaces/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "peer": true + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "node_modules/@turbo/workspaces/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, - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "node_modules/@turbo/workspaces/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, - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "node_modules/@turbo/workspaces/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "node_modules/@turbo/workspaces/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, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "engines": { + "node": ">=6" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "node_modules/@turbo/workspaces/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, - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xmldom/xmldom": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", - "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", + "path-key": "^3.0.0" + }, "engines": { - "node": ">=10.0.0" + "node": ">=8" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "node_modules/@turbo/workspaces/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, - "peer": true - }, - "node_modules/@zxing/text-encoding": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "optional": true - }, - "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" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=6.5" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/@turbo/workspaces/node_modules/ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "dev": true, "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" + "node": ">=8" }, - "engines": { - "node": ">=0.4.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/@turbo/workspaces/node_modules/ora/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "peer": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dependencies": { - "debug": "4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=8" } }, - "node_modules/aggregate-error": { + "node_modules/@turbo/workspaces/node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { "node": ">=8" } }, - "node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "node_modules/@turbo/workspaces/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, "dependencies": { - "ajv": "^8.0.0" + "glob": "^7.1.3" }, - "peerDependencies": { - "ajv": "^8.0.0" + "bin": { + "rimraf": "bin.js" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" + "node_modules/@turbo/workspaces/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "ajv": "^8.8.2" + "engines": { + "node": ">=10" } }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" - }, - "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==", + "node_modules/@turbo/workspaces/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": { - "type-fest": "^0.21.3" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "node_modules/@turbo/workspaces/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": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "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==", + "has-flag": "^4.0.0" + }, "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==", - "dependencies": { - "color-convert": "^1.9.0" - }, + "node_modules/@turbo/workspaces/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": ">=4" + "node": ">= 10.0.0" } }, - "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==" - }, - "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==", + "node_modules/@turbo/workspaces/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", - "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==" - }, - "node_modules/application-config-path": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", - "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==" - }, - "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==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dependencies": { - "sprintf-js": "~1.0.2" + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "peer": true, + "node_modules/@types/bun": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.1.2.tgz", + "integrity": "sha512-pRBDD3EDqPf83qe95i3EpYu5G2J8bbb78a3736vnCm2K8YWtEE5cvJUq2jkKvJhW07YTfQtbImywIwRhWL8z3Q==", + "dev": true, "dependencies": { - "dequal": "^2.0.3" + "bun-types": "1.1.8" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/node": "*" } }, - "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/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "peer": true, "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "peer": true }, - "node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "engines": { - "node": ">=4" + "node_modules/@types/express-serve-static-core": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "node_modules/@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "dev": true, "dependencies": { - "retry": "0.13.1" + "@types/minimatch": "^5.1.2", + "@types/node": "*" } }, - "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/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, - "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==", - "engines": { - "node": ">= 4.0.0" + "node_modules/@types/inquirer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==", + "dev": true, + "dependencies": { + "@types/through": "*", + "rxjs": "^6.4.0" } }, - "node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "node_modules/@types/inquirer/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "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.23.0", - "caniuse-lite": "^1.0.30001599", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" + "tslib": "^1.9.0" }, "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "npm": ">=2.0.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/@types/inquirer/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "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==" + }, + "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==", "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/axobject-query": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", - "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", - "peer": true, + "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==", "dependencies": { - "dequal": "^2.0.3" + "@types/istanbul-lib-report": "*" } }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "dependencies": { + "undici-types": "~5.26.4" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "node_modules/@types/react": { + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==", + "devOptional": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "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==" + }, + "node_modules/@types/through": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", + "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tinycolor2": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", + "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "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==" + }, + "node_modules/@urql/core": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", + "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.0", + "wonka": "^4.0.14" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "node_modules/@urql/exchange-retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", + "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@urql/core": ">=2.3.1", + "wonka": "^4.0.14" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "node_modules/@volar/language-core": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.4.tgz", + "integrity": "sha512-7As47GndxGxsqqYnbreLrfB5NDUeQioPM2LJKUuB4/34c0NpEJ2byVl3c9KYdjIdiEstWZ9JLtLKNTaPWb5jtA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@volar/source-map": "2.2.4" + } + }, + "node_modules/@volar/source-map": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.4.tgz", + "integrity": "sha512-m92FLpR9vB1YEZfiZ+bfgpLrToL/DNkOrorWVep3pffHrwwI4Tx2oIQN+sqHJfKkiT5N3J1owC+8crhAEinfjg==", + "dependencies": { + "muggle-string": "^0.4.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", + "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/shared": "3.4.27", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", + "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "dependencies": { + "@vue/compiler-core": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/language-core": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.19.tgz", + "integrity": "sha512-A9EGOnvb51jOvnCYoRLnMP+CcoPlbZVxI9gZXE/y2GksRWM6j/PrLEIC++pnosWTN08tFpJgxhSS//E9v/Sg+Q==", + "dependencies": { + "@volar/language-core": "~2.2.4", + "@vue/compiler-dom": "^3.4.0", + "@vue/shared": "^3.4.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/babel-plugin-react-native-web": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.11.tgz", - "integrity": "sha512-0sHf8GgDhsRZxGwlwHHdfL3U8wImFaLw4haEa60U9M3EiO3bg6u3BJ+1vXhwgrevqSq76rMb5j1HJs+dNvMj5g==" - }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "node_modules/@vue/language-core/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==", "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" + "balanced-match": "^1.0.0" } }, - "node_modules/babel-preset-expo": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.6.tgz", - "integrity": "sha512-jRi9I5/jT+dnIiNJDjDg+I/pV+AlxrIW/DNbdqYoRWPZA/LHDqD6IJnJXLxbuTcQ+llp+0LWcU7f/kC/PgGpkw==", + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { - "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/preset-react": "^7.22.15", - "@babel/preset-typescript": "^7.23.0", - "@react-native/babel-preset": "~0.74.83", - "babel-plugin-react-native-web": "~0.19.10", - "react-refresh": "^0.14.2" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" + }, + "node_modules/@web3-storage/multipart-parser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", + "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "optional": true + }, + "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/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "devOptional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" + }, + "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==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "dependencies": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "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==", + "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==", + "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==" + }, + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/appdirsjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==" + }, + "node_modules/application-config-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", + "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==" + }, + "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==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "peer": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-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/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dependencies": { + "retry": "0.13.1" + } + }, + "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==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "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.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "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.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "peer": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-react-native-web": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.11.tgz", + "integrity": "sha512-0sHf8GgDhsRZxGwlwHHdfL3U8wImFaLw4haEa60U9M3EiO3bg6u3BJ+1vXhwgrevqSq76rMb5j1HJs+dNvMj5g==" + }, + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" + } + }, + "node_modules/babel-preset-expo": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.6.tgz", + "integrity": "sha512-jRi9I5/jT+dnIiNJDjDg+I/pV+AlxrIW/DNbdqYoRWPZA/LHDqD6IJnJXLxbuTcQ+llp+0LWcU7f/kC/PgGpkw==", + "dependencies": { + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/preset-react": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@react-native/babel-preset": "~0.74.83", + "babel-plugin-react-native-web": "~0.19.10", + "react-refresh": "^0.14.2" + } + }, + "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==" + }, + "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/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "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.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/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/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "dependencies": { + "stream-buffers": "2.2.x" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "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==", + "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==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "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==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + }, + "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==" + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" + }, + "node_modules/bun-types": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.1.8.tgz", + "integrity": "sha512-dwhfuUKSGK8hm5Llcvb5+ejRh+4mIt8ibObJVKhZBsi0ScpXmt+AlaS1eDW6uRXCHj084Qt0kIqAJ08/7ZGC9Q==", + "dev": true, + "dependencies": { + "@types/node": "~20.12.8", + "@types/ws": "~8.5.10" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "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/cacache": { + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", + "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camel-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/camel-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001620", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", + "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", + "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==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/change-case": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.1.0.tgz", + "integrity": "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==", + "dev": true, + "dependencies": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/change-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/change-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/change-case/node_modules/pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", + "dev": true, + "dependencies": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "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.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } }, - "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/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, - "node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "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==", "dependencies": { - "open": "^8.0.4" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=12" } }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "node_modules/cliui/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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=0.6" + "node": ">=8" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "engines": { - "node": ">=8" + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "peer": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/code-red/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "peer": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "@types/estree": "^1.0.0" } }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "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.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=12.5.0" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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==", "dependencies": { - "ms": "2.0.0" + "color-name": "1.1.3" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "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==" }, - "node_modules/bplist-creator": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", - "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dependencies": { - "stream-buffers": "2.2.x" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "node_modules/bplist-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", - "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "node_modules/color/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==", "dependencies": { - "big-integer": "1.6.x" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 5.10.0" + "node": ">=7.0.0" } }, - "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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "node_modules/color/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==" }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "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": { - "fill-range": "^7.0.1" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "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" - } - ], + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/component-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", + "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">= 0.6" } }, - "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==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dependencies": { - "node-int64": "^0.4.0" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" } }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "ms": "2.0.0" } }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "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==" + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==" }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "node_modules/bun-types": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.1.8.tgz", - "integrity": "sha512-dwhfuUKSGK8hm5Llcvb5+ejRh+4mIt8ibObJVKhZBsi0ScpXmt+AlaS1eDW6uRXCHj084Qt0kIqAJ08/7ZGC9Q==", - "dev": true, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dependencies": { - "@types/node": "~20.12.8", - "@types/ws": "~8.5.10" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" + "ms": "2.0.0" } }, - "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/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "dev": true, + "dependencies": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" } }, - "node_modules/cacache": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", - "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", + "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": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "safe-buffer": "5.2.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.6" } }, - "node_modules/cacache/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==", - "dependencies": { - "balanced-match": "^1.0.0" + "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/cacache/node_modules/glob": { - "version": "10.3.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", - "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.11.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, + "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==" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.6" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "node_modules/cookie-signature": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.1.tgz", + "integrity": "sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==", "engines": { - "node": "14 || >=16.14" + "node": ">=6.6.0" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "browserslist": "^4.23.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, + "node_modules/core-js-pure": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", + "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", + "dev": true, + "hasInstallScript": true, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "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": { - "callsites": "^2.0.0" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dependencies": { - "caller-callsite": "^2.0.0" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "engines": { - "node": ">= 6" - } + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true }, - "node_modules/camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001620", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", - "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", - "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==", + "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==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/charenc": { + "node_modules/crypt": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "engines": { "node": "*" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "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" - }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=8" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "node_modules/css-in-js-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", + "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, - "engines": { - "node": ">=12.13.0" + "hyphenate-style-name": "^1.0.3" } }, - "node_modules/chrome-launcher/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "peer": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, "engines": { - "node": ">=6.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "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==", + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dependencies": { - "restore-cursor": "^2.0.0" - }, + "node_modules/dag-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==" + }, + "node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "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==", + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cliui/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==", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dependencies": { - "ansi-regex": "^5.0.1" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } + "node_modules/dayjs": { + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">=6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/code-red": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "@types/estree": "^1.0.1", - "acorn": "^8.10.0", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/code-red/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "peer": true, - "dependencies": { - "@types/estree": "^1.0.0" + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, + "node_modules/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { - "node": ">=12.5.0" + "node": ">=4.0.0" } }, - "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==", - "dependencies": { - "color-name": "1.1.3" + "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==", + "engines": { + "node": ">=0.10.0" } }, - "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==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/color/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==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dependencies": { - "color-name": "~1.1.4" + "clone": "^1.0.2" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "engines": { - "node": ">=7.0.0" + "node": ">=0.8" } }, - "node_modules/color/node_modules/color-name": { + "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "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==", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "delayed-stream": "~1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/component-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", - "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==", + "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==", + "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/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 14" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/degenerator/node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "tslib": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/del/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { - "ms": "2.0.0" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "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/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" }, - "node_modules/computeds": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", - "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==" + "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/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "peer": true, + "engines": { + "node": ">=6" + } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, + "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.10.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/connect/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/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, - "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" - }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true, "engines": { - "node": ">= 0.6" + "node": ">=0.3.1" } }, - "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==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "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==" + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" + "node_modules/dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" } }, - "node_modules/cookie-signature": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.1.tgz", - "integrity": "sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==", - "engines": { - "node": ">=6.6.0" + "node_modules/dot-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/dot-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" } }, - "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", "dependencies": { - "browserslist": "^4.23.0" + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "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" + "node_modules/dot-prop/node_modules/type-fest": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.0.tgz", + "integrity": "sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==", + "engines": { + "node": ">=16" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { - "node": ">= 0.10" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/dotenv-expand": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "dotenv": "^16.4.4" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/create-require": { + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "optional": true, - "peer": true + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "node_modules/electron-to-chromium": { + "version": "1.4.774", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz", + "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==" + }, + "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==" + }, + "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/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { - "node-fetch": "^2.6.12" + "once": "^1.4.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==", + "node_modules/enhanced-resolve": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", + "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", + "dev": true, + "peer": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">= 8" + "node": ">=10.13.0" } }, - "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==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { - "node": "*" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "node_modules/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", "engines": { "node": ">=8" } }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "bin": { + "envinfo": "dist/cli.js" + }, "engines": { "node": ">=4" } }, - "node_modules/css-in-js-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", - "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==" + }, + "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==", "dependencies": { - "hyphenate-style-name": "^1.0.3" + "is-arrayish": "^0.2.1" } }, - "node_modules/css-mediaquery": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", - "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } }, - "node_modules/css-to-react-native": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", - "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "peer": true, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "bin": { - "cssesc": "bin/cssesc" + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/dag-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", - "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==" + "node_modules/es-module-lexer": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", + "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", + "dev": true, + "peer": true }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "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==", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9047,1418 +10620,1342 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" + "node_modules/esbuild-register": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", + "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "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": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, "dependencies": { - "ms": "2.1.2" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { "node": ">=6.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/escodegen/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": ">=0.10.0" + "node": ">=4.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "node_modules/escodegen/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, + "optional": true, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/dedent-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", - "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, "engines": { - "node": ">=4.0.0" + "node": ">=8.0.0" } }, - "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==", + "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==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "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, + "peer": true, "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6" + "node": ">=4.0" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/esrecurse/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, + "peer": true, + "engines": { + "node": ">=4.0" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true, "engines": { - "node": ">=0.8" + "node": ">=4.0" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "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.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "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": ">=8" + "node": ">=6" } }, - "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==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.8.x" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "node_modules/exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==" + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/del/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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": ">=4.8" } }, - "node_modules/denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" - }, - "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==", + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "peer": true, - "engines": { - "node": ">=6" + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/destroy": { + "node_modules/execa/node_modules/shebang-command": { "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-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=0.10.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==" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "optional": true, - "peer": true, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "engines": { - "node": ">=0.3.1" + "node": ">=0.10.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { - "path-type": "^4.0.0" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "which": "bin/which" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "node_modules/dot-prop": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", - "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "node_modules/expo": { + "version": "51.0.8", + "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.8.tgz", + "integrity": "sha512-bdTOiMb1f3PChtuqEZ9czUm2gMTmS0r1+H+Pkm2O3PsuLnOgxfIBzL6S37+J4cUocLBaENrmx9SOGKpzhBqXpg==", "dependencies": { - "type-fest": "^4.18.2" - }, - "engines": { - "node": ">=18" + "@babel/runtime": "^7.20.0", + "@expo/cli": "0.18.13", + "@expo/config": "9.0.2", + "@expo/config-plugins": "8.0.4", + "@expo/metro-config": "0.18.4", + "@expo/vector-icons": "^14.0.0", + "babel-preset-expo": "~11.0.6", + "expo-asset": "~10.0.6", + "expo-file-system": "~17.0.1", + "expo-font": "~12.0.5", + "expo-keep-awake": "~13.0.2", + "expo-modules-autolinking": "1.11.1", + "expo-modules-core": "1.12.11", + "fbemitter": "^3.0.0", + "whatwg-url-without-unicode": "8.0.0-3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "expo": "bin/cli" } }, - "node_modules/dot-prop/node_modules/type-fest": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.0.tgz", - "integrity": "sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==", - "engines": { - "node": ">=16" + "node_modules/expo-asset": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-10.0.6.tgz", + "integrity": "sha512-waP73/ccn/HZNNcGM4/s3X3icKjSSbEQ9mwc6tX34oYNg+XE5WdwOuZ9wgVVFrU7wZMitq22lQXd2/O0db8bxg==", + "dependencies": { + "@react-native/assets-registry": "~0.74.83", + "expo-constants": "~16.0.0", + "invariant": "^2.2.4", + "md5-file": "^3.2.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "expo": "*" } }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" + "node_modules/expo-constants": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-16.0.1.tgz", + "integrity": "sha512-s6aTHtglp926EsugWtxN7KnpSsE9FCEjb7CgEjQQ78Gpu4btj4wB+IXot2tlqNwqv+x7xFe5veoPGfJDGF/kVg==", + "dependencies": { + "@expo/config": "~9.0.0-beta.0" }, - "funding": { - "url": "https://dotenvx.com" + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-file-system": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-17.0.1.tgz", + "integrity": "sha512-dYpnZJqTGj6HCYJyXAgpFkQWsiCH3HY1ek2cFZVHFoEc5tLz9gmdEgTF6nFHurvmvfmXqxi7a5CXyVm0aFYJBw==", + "peerDependencies": { + "expo": "*" } }, - "node_modules/dotenv-expand": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", - "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", + "node_modules/expo-font": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-12.0.5.tgz", + "integrity": "sha512-h/VkN4jlHYDJ6T6pPgOYTVoDEfBY0CTKQe4pxnPDGQiE6H+DFdDgk+qWVABGpRMH0+zXoHB+AEi3OoQjXIynFA==", "dependencies": { - "dotenv": "^16.4.4" - }, - "engines": { - "node": ">=12" + "fontfaceobserver": "^2.1.0" }, - "funding": { - "url": "https://dotenvx.com" + "peerDependencies": { + "expo": "*" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "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.774", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz", - "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==" - }, - "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==" + "node_modules/expo-image": { + "version": "1.12.9", + "resolved": "https://registry.npmjs.org/expo-image/-/expo-image-1.12.9.tgz", + "integrity": "sha512-WnC3Z3vsOTJLWE9FGB0a0GANmkpfBCqTf9bSLXXl50hEYiRcfwrAYZ/87oswAhggMGbJqOuLKZxt5rtuij1xcQ==", + "dependencies": { + "@react-native/assets-registry": "~0.74.83" + }, + "peerDependencies": { + "expo": "*" + } }, - "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/expo-keep-awake": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-13.0.2.tgz", + "integrity": "sha512-kKiwkVg/bY0AJ5q1Pxnm/GvpeB6hbNJhcFsoOWDh2NlpibhCLaHL826KHUM+WsnJRbVRxJ+K9vbPRHEMvFpVyw==", + "peerDependencies": { + "expo": "*" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/expo-linking": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-6.3.1.tgz", + "integrity": "sha512-xuZCntSBGWCD/95iZ+mTUGTwHdy8Sx+immCqbUBxdvZ2TN61P02kKg7SaLS8A4a/hLrSCwrg5tMMwu5wfKr35g==", "dependencies": { - "once": "^1.4.0" + "expo-constants": "~16.0.0", + "invariant": "^2.2.4" } }, - "node_modules/enhanced-resolve": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", - "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", - "dev": true, - "peer": true, + "node_modules/expo-modules-autolinking": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz", + "integrity": "sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw==", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" }, - "engines": { - "node": ">=10.13.0" + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "node_modules/expo-modules-autolinking/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=0.12" + "node": ">=8" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/env-editor": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", - "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "node_modules/expo-modules-autolinking/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", - "bin": { - "envinfo": "dist/cli.js" + "node_modules/expo-modules-autolinking/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==", + "dependencies": { + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/eol": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", - "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==" - }, - "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==", - "dependencies": { - "is-arrayish": "^0.2.1" - } + "node_modules/expo-modules-autolinking/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==" }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "node_modules/expo-modules-autolinking/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==", "dependencies": { - "stackframe": "^1.3.4" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "dependencies": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - }, + "node_modules/expo-modules-autolinking/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==", "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "node_modules/expo-modules-autolinking/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/expo-modules-autolinking/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==", "dependencies": { - "get-intrinsic": "^1.2.4" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/expo-modules-autolinking/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { - "node": ">= 0.4" + "node": ">= 10.0.0" } }, - "node_modules/es-module-lexer": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", - "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", - "dev": true, - "peer": true + "node_modules/expo-modules-core": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.11.tgz", + "integrity": "sha512-CF5G6hZo/6uIUz6tj4dNRlvE5L4lakYukXPqz5ZHQ+6fLk1NQVZbRdpHjMkxO/QSBQcKUzG/ngeytpoJus7poQ==", + "dependencies": { + "invariant": "^2.2.4" + } }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "node_modules/expo-router": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.5.14.tgz", + "integrity": "sha512-RVsyJLosZSq89ebA5qfPToRcFZJoTTb+6nwPHk6iESD6KON/Q7ZODt5fvCwXkY86tLNEMGo160QvBPfBZmglaA==", "dependencies": { - "es-errors": "^1.3.0" + "@expo/metro-runtime": "3.2.1", + "@expo/server": "^0.4.0", + "@radix-ui/react-slot": "1.0.1", + "@react-navigation/bottom-tabs": "~6.5.7", + "@react-navigation/native": "~6.1.6", + "@react-navigation/native-stack": "~6.9.12", + "expo-splash-screen": "0.27.4", + "react-native-helmet-async": "2.0.4", + "schema-utils": "^4.0.1" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "@react-navigation/drawer": "^6.5.8", + "expo": "*", + "expo-constants": "*", + "expo-linking": "*", + "expo-status-bar": "*", + "react-native-reanimated": "*", + "react-native-safe-area-context": "*", + "react-native-screens": "*" + }, + "peerDependenciesMeta": { + "@react-navigation/drawer": { + "optional": true + }, + "@testing-library/jest-native": { + "optional": true + }, + "react-native-reanimated": { + "optional": true + } } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "node_modules/expo-splash-screen": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.27.4.tgz", + "integrity": "sha512-JwepK1FjbwiOK2nwIFanfzj9s7UXYnpTwLX8A9v7Ec3K4V28yu8HooSc9X60cftBw9UZrs8Gwj4PgTpQabBS9A==", "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "@expo/prebuild-config": "7.0.3" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "expo": "*" } }, - "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==", + "node_modules/expo-splash-screen/node_modules/@expo/prebuild-config": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.3.tgz", + "integrity": "sha512-Kvxy/oQzkxwXLvAmwb+ygxuRn4xUUN2+mVJj3KDe4bRVCNyDPs7wlgdokF3twnWjzRZssUzseMkhp+yHPjAEhA==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.0-beta.0", + "@expo/config-types": "^51.0.0-unreleased", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@react-native/normalize-colors": "~0.74.83", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "xml2js": "0.6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "expo-modules-autolinking": ">=0.8.1" } }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "node_modules/expo-splash-screen/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==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" + } + }, + "node_modules/expo-splash-screen/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "graceful-fs": "^4.1.6" } }, - "node_modules/esbuild-register": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", - "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" + "node_modules/expo-splash-screen/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "esbuild": ">=0.12 <1" + "engines": { + "node": ">=10" } }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "node_modules/expo-splash-screen/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { - "node": ">=6" + "node": ">= 10.0.0" } }, - "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/expo-status-bar": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.12.1.tgz", + "integrity": "sha512-/t3xdbS8KB0prj5KG5w7z+wZPFlPtkgs95BsmrP/E7Q0xHXTcDcQ6Cu2FkFuRM+PKTb17cJDnLkawyS5vDLxMA==" }, - "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==", + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.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.8.0" + "node": ">= 0.10.0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "peer": true, + "node_modules/express/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/express/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/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "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": ">=8.0.0" + "node": ">= 0.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==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { "node": ">=4" } }, - "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, - "peer": true, + "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==" + }, + "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==", "dependencies": { - "estraverse": "^5.2.0" + "@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": ">=4.0" + "node": ">=8.6.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "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, - "peer": true, - "engines": { - "node": ">=4.0" + "peer": true + }, + "node_modules/fast-loops": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.3.tgz", + "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" + }, + "node_modules/fast-xml-parser": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz", + "integrity": "sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/estree-walker": { + "node_modules/fb-watchman": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "peer": true, - "engines": { - "node": ">=0.10.0" + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dependencies": { + "bser": "2.1.1" } }, - "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/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" } }, - "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/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.x" - } + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, - "node_modules/exec-async": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", - "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==" + "node_modules/fetch-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==" }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "node": ">=8" }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "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==", "dependencies": { - "shebang-regex": "^1.0.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", "engines": { "node": ">=0.10.0" } }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/expo": { - "version": "51.0.8", - "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.8.tgz", - "integrity": "sha512-bdTOiMb1f3PChtuqEZ9czUm2gMTmS0r1+H+Pkm2O3PsuLnOgxfIBzL6S37+J4cUocLBaENrmx9SOGKpzhBqXpg==", + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dependencies": { - "@babel/runtime": "^7.20.0", - "@expo/cli": "0.18.13", - "@expo/config": "9.0.2", - "@expo/config-plugins": "8.0.4", - "@expo/metro-config": "0.18.4", - "@expo/vector-icons": "^14.0.0", - "babel-preset-expo": "~11.0.6", - "expo-asset": "~10.0.6", - "expo-file-system": "~17.0.1", - "expo-font": "~12.0.5", - "expo-keep-awake": "~13.0.2", - "expo-modules-autolinking": "1.11.1", - "expo-modules-core": "1.12.11", - "fbemitter": "^3.0.0", - "whatwg-url-without-unicode": "8.0.0-3" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, - "bin": { - "expo": "bin/cli" + "engines": { + "node": ">= 0.8" } }, - "node_modules/expo-asset": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-10.0.6.tgz", - "integrity": "sha512-waP73/ccn/HZNNcGM4/s3X3icKjSSbEQ9mwc6tX34oYNg+XE5WdwOuZ9wgVVFrU7wZMitq22lQXd2/O0db8bxg==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "@react-native/assets-registry": "~0.74.83", - "expo-constants": "~16.0.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3" - }, - "peerDependencies": { - "expo": "*" + "ms": "2.0.0" } }, - "node_modules/expo-constants": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-16.0.1.tgz", - "integrity": "sha512-s6aTHtglp926EsugWtxN7KnpSsE9FCEjb7CgEjQQ78Gpu4btj4wB+IXot2tlqNwqv+x7xFe5veoPGfJDGF/kVg==", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dependencies": { - "@expo/config": "~9.0.0-beta.0" + "ee-first": "1.1.1" }, - "peerDependencies": { - "expo": "*" + "engines": { + "node": ">= 0.8" } }, - "node_modules/expo-file-system": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-17.0.1.tgz", - "integrity": "sha512-dYpnZJqTGj6HCYJyXAgpFkQWsiCH3HY1ek2cFZVHFoEc5tLz9gmdEgTF6nFHurvmvfmXqxi7a5CXyVm0aFYJBw==", - "peerDependencies": { - "expo": "*" + "node_modules/finalhandler/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/expo-font": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-12.0.5.tgz", - "integrity": "sha512-h/VkN4jlHYDJ6T6pPgOYTVoDEfBY0CTKQe4pxnPDGQiE6H+DFdDgk+qWVABGpRMH0+zXoHB+AEi3OoQjXIynFA==", + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dependencies": { - "fontfaceobserver": "^2.1.0" + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" }, - "peerDependencies": { - "expo": "*" + "engines": { + "node": ">=6" } }, - "node_modules/expo-image": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/expo-image/-/expo-image-1.12.9.tgz", - "integrity": "sha512-WnC3Z3vsOTJLWE9FGB0a0GANmkpfBCqTf9bSLXXl50hEYiRcfwrAYZ/87oswAhggMGbJqOuLKZxt5rtuij1xcQ==", + "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==", "dependencies": { - "@react-native/assets-registry": "~0.74.83" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "expo": "*" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expo-keep-awake": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-13.0.2.tgz", - "integrity": "sha512-kKiwkVg/bY0AJ5q1Pxnm/GvpeB6hbNJhcFsoOWDh2NlpibhCLaHL826KHUM+WsnJRbVRxJ+K9vbPRHEMvFpVyw==", - "peerDependencies": { - "expo": "*" + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dependencies": { + "micromatch": "^4.0.2" } }, - "node_modules/expo-linking": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-6.3.1.tgz", - "integrity": "sha512-xuZCntSBGWCD/95iZ+mTUGTwHdy8Sx+immCqbUBxdvZ2TN61P02kKg7SaLS8A4a/hLrSCwrg5tMMwu5wfKr35g==", - "dependencies": { - "expo-constants": "~16.0.0", - "invariant": "^2.2.4" + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" + }, + "node_modules/flow-parser": { + "version": "0.236.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.236.0.tgz", + "integrity": "sha512-0OEk9Gr+Yj7wjDW2KgaNYUypKau71jAfFyeLQF5iVtxqc6uJHag/MT7pmaEApf4qM7u86DkBcd4ualddYMfbLw==", + "engines": { + "node": ">=0.4.0" } }, - "node_modules/expo-modules-autolinking": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz", - "integrity": "sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw==", + "node_modules/fontfaceobserver": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==" + }, + "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==", "dependencies": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0" - }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + "is-callable": "^1.1.3" } }, - "node_modules/expo-modules-autolinking/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==", + "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==", "dependencies": { - "color-convert": "^2.0.1" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/expo-modules-autolinking/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "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==", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/expo-modules-autolinking/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==", + "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": { - "color-name": "~1.1.4" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=7.0.0" + "node": ">= 6" } }, - "node_modules/expo-modules-autolinking/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==" - }, - "node_modules/expo-modules-autolinking/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==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/expo-modules-autolinking/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==", + "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": ">=8" - } - }, - "node_modules/expo-modules-autolinking/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" + "node": "*" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" } }, - "node_modules/expo-modules-autolinking/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", "engines": { "node": ">=8" } }, - "node_modules/expo-modules-autolinking/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { - "node": ">= 10.0.0" + "node": ">= 0.6" } }, - "node_modules/expo-modules-core": { - "version": "1.12.11", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.11.tgz", - "integrity": "sha512-CF5G6hZo/6uIUz6tj4dNRlvE5L4lakYukXPqz5ZHQ+6fLk1NQVZbRdpHjMkxO/QSBQcKUzG/ngeytpoJus7poQ==", + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dependencies": { - "invariant": "^2.2.4" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/expo-router": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.5.14.tgz", - "integrity": "sha512-RVsyJLosZSq89ebA5qfPToRcFZJoTTb+6nwPHk6iESD6KON/Q7ZODt5fvCwXkY86tLNEMGo160QvBPfBZmglaA==", + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dependencies": { - "@expo/metro-runtime": "3.2.1", - "@expo/server": "^0.4.0", - "@radix-ui/react-slot": "1.0.1", - "@react-navigation/bottom-tabs": "~6.5.7", - "@react-navigation/native": "~6.1.6", - "@react-navigation/native-stack": "~6.9.12", - "expo-splash-screen": "0.27.4", - "react-native-helmet-async": "2.0.4", - "schema-utils": "^4.0.1" - }, - "peerDependencies": { - "@react-navigation/drawer": "^6.5.8", - "expo": "*", - "expo-constants": "*", - "expo-linking": "*", - "expo-status-bar": "*", - "react-native-reanimated": "*", - "react-native-safe-area-context": "*", - "react-native-screens": "*" + "minipass": "^7.0.3" }, - "peerDependenciesMeta": { - "@react-navigation/drawer": { - "optional": true - }, - "@testing-library/jest-native": { - "optional": true - }, - "react-native-reanimated": { - "optional": true - } + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/expo-splash-screen": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.27.4.tgz", - "integrity": "sha512-JwepK1FjbwiOK2nwIFanfzj9s7UXYnpTwLX8A9v7Ec3K4V28yu8HooSc9X60cftBw9UZrs8Gwj4PgTpQabBS9A==", - "dependencies": { - "@expo/prebuild-config": "7.0.3" - }, - "peerDependencies": { - "expo": "*" + "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==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/expo-splash-screen/node_modules/@expo/prebuild-config": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.3.tgz", - "integrity": "sha512-Kvxy/oQzkxwXLvAmwb+ygxuRn4xUUN2+mVJj3KDe4bRVCNyDPs7wlgdokF3twnWjzRZssUzseMkhp+yHPjAEhA==", - "dependencies": { - "@expo/config": "~9.0.0-beta.0", - "@expo/config-plugins": "~8.0.0-beta.0", - "@expo/config-types": "^51.0.0-unreleased", - "@expo/image-utils": "^0.5.0", - "@expo/json-file": "^8.3.0", - "@react-native/normalize-colors": "~0.74.83", - "debug": "^4.3.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.6.0", - "xml2js": "0.6.0" - }, - "peerDependencies": { - "expo-modules-autolinking": ">=0.8.1" + "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/expo-splash-screen/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==", + "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==", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/expo-splash-screen/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/expo-splash-screen/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "bin": { - "semver": "bin/semver.js" - }, + "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==", "engines": { - "node": ">=10" + "node": ">=6.9.0" } }, - "node_modules/expo-splash-screen/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "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==", "engines": { - "node": ">= 10.0.0" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/expo-status-bar": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.12.1.tgz", - "integrity": "sha512-/t3xdbS8KB0prj5KG5w7z+wZPFlPtkgs95BsmrP/E7Q0xHXTcDcQ6Cu2FkFuRM+PKTb17cJDnLkawyS5vDLxMA==" - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.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" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/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/express/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/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "engines": { + "node": ">=4" } }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "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" + "pump": "^3.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "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-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==" - }, - "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==", + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "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" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=8.6.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/get-tsconfig": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", "dev": true, - "peer": true - }, - "node_modules/fast-loops": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.3.tgz", - "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" - }, - "node_modules/fast-xml-parser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz", - "integrity": "sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], "dependencies": { - "strnum": "^1.0.5" + "resolve-pkg-maps": "^1.0.0" }, - "bin": { - "fxparser": "src/cli/cli.js" + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "node_modules/get-uri": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "dev": true, "dependencies": { - "reusify": "^1.0.4" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4", + "fs-extra": "^11.2.0" + }, + "engines": { + "node": ">= 14" } }, - "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==", - "dependencies": { - "bser": "2.1.1" + "node_modules/get-uri/node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "engines": { + "node": ">= 14" } }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "node_modules/get-uri/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, "dependencies": { - "fbjs": "^3.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/fbjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "node_modules/get-uri/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": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "node_modules/fetch-retry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", - "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==" - }, - "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==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, + "node_modules/get-uri/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": ">=8" + "node": ">= 10.0.0" } }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "node_modules/getenv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", + "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "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": ">= 0.8" - } - }, - "node_modules/finalhandler/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": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "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==", "dependencies": { - "ee-first": "1.1.1" + "is-glob": "^4.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 6" } }, - "node_modules/finalhandler/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "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==", "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { "node": ">=10" @@ -10467,175 +11964,237 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { - "micromatch": "^4.0.2" + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flow-enums-runtime": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", - "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" - }, - "node_modules/flow-parser": { - "version": "0.236.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.236.0.tgz", - "integrity": "sha512-0OEk9Gr+Yj7wjDW2KgaNYUypKau71jAfFyeLQF5iVtxqc6uJHag/MT7pmaEApf4qM7u86DkBcd4ualddYMfbLw==", - "engines": { - "node": ">=0.4.0" + "node_modules/gql.tada": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.7.5.tgz", + "integrity": "sha512-GepPTee+FWSVVZQ7GiJHzsGNo7gOb59kcn4mUPYLlkbpeJfOUwpuoB05ZNaXG0W4qZVPd1I7R2UgMHBjY1lGlQ==", + "dependencies": { + "@0no-co/graphql.web": "^1.0.5", + "@gql.tada/cli-utils": "1.3.9", + "@gql.tada/internal": "1.0.0" + }, + "bin": { + "gql-tada": "bin/cli.js", + "gql.tada": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.0.0" } }, - "node_modules/fontfaceobserver": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", - "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==" + "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==" }, - "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==", + "node_modules/gradient-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-2.0.2.tgz", + "integrity": "sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==", + "dev": true, "dependencies": { - "is-callable": "^1.1.3" + "chalk": "^4.1.2", + "tinygradient": "^1.1.5" + }, + "engines": { + "node": ">=10" } }, - "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==", + "node_modules/gradient-string/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": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/gradient-string/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": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/gradient-string/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": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 6" + "node": ">=7.0.0" } }, - "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/gradient-string/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/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "node_modules/gradient-string/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": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" + "node": ">=8" } }, - "node_modules/freeport-async": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", - "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "node_modules/gradient-string/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/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", "engines": { - "node": ">= 0.6" + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "tslib": "^2.1.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "node_modules/graphql-type-json": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.3.2.tgz", + "integrity": "sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==", + "peerDependencies": { + "graphql": ">=0.8.0" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, "dependencies": { - "minipass": "^7.0.3" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "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==" + "node_modules/handlebars/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/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "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==", + "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==", "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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/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==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -10644,525 +12203,631 @@ "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==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "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==", - "engines": { - "node": ">=6.9.0" + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" } }, - "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==", - "engines": { - "node": "6.* || 8.* || >= 10.*" + "node_modules/header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/header-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/header-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "lower-case": "^1.1.1" + } + }, + "node_modules/hermes-estree": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz", + "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==" + }, + "node_modules/hermes-parser": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz", + "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==", + "dependencies": { + "hermes-estree": "0.19.1" + } + }, + "node_modules/hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "dependencies": { + "source-map": "^0.7.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/hosted-git-info/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": { - "pump": "^3.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "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": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/get-tsconfig": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", - "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "engines": { + "node": ">= 14" } }, - "node_modules/getenv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", - "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, "engines": { - "node": ">=6" + "node": ">= 14" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "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" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": "*" + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyphenate-style-name": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.5.tgz", + "integrity": "sha512-fedL7PRwmeVkgyhu9hLeTBaI6wcGk7JGJswdaRsa5aUbkXI1kr1xZwTPBtaYPpwf56878iDek6VbVnuWMebJmw==" + }, + "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" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=0.10.0" } }, - "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==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "dependencies": { - "is-glob": "^4.0.1" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "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==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "engines": { "node": ">=4" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.8.19" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "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==", "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/gql.tada": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.7.5.tgz", - "integrity": "sha512-GepPTee+FWSVVZQ7GiJHzsGNo7gOb59kcn4mUPYLlkbpeJfOUwpuoB05ZNaXG0W4qZVPd1I7R2UgMHBjY1lGlQ==", + "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==" + }, + "node_modules/inline-style-prefixer": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz", + "integrity": "sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==", "dependencies": { - "@0no-co/graphql.web": "^1.0.5", - "@gql.tada/cli-utils": "1.3.9", - "@gql.tada/internal": "1.0.0" - }, - "bin": { - "gql-tada": "bin/cli.js", - "gql.tada": "bin/cli.js" - }, - "peerDependencies": { - "typescript": "^5.0.0" + "css-in-js-utils": "^3.1.0", + "fast-loops": "^1.1.3" } }, - "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==" - }, - "node_modules/graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "node_modules/inquirer": { + "version": "9.2.23", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.23.tgz", + "integrity": "sha512-kod5s+FBPIDM2xiy9fu+6wdU/SkK5le5GS9lh4FEBjBHqiMgD9lLFbCbuqFNAjNL2ZOy9Wd9F694IOzN9pZHBA==", + "dev": true, + "peer": true, + "dependencies": { + "@inquirer/figures": "^1.0.3", + "@ljharb/through": "^2.3.13", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + "node": ">=18" } }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "node_modules/inquirer-autocomplete-prompt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-3.0.1.tgz", + "integrity": "sha512-DQBXwX2fVQPVUzu4v4lGgtNgyjcX2+rTyphb2MeSOQh3xUayKAfHAF4y0KgsMi06m6ZiR3xIOdzMZMfQgX2m9w==", + "dev": true, "dependencies": { - "tslib": "^2.1.0" + "ansi-escapes": "^6.0.0", + "figures": "^5.0.0", + "picocolors": "^1.0.0", + "run-async": "^2.4.1", + "rxjs": "^7.5.6" }, "engines": { - "node": ">=10" + "node": ">=16" }, "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/graphql-type-json": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.3.2.tgz", - "integrity": "sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==", - "peerDependencies": { - "graphql": ">=0.8.0" + "inquirer": "^9.1.0" } }, - "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==", + "node_modules/inquirer-autocomplete-prompt/node_modules/ansi-escapes": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true, + "engines": { + "node": ">=14.16" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/inquirer-autocomplete-prompt/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/inquirer-autocomplete-prompt/node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/inquirer-autocomplete-prompt/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/inquirer/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, + "peer": true, "dependencies": { - "has-symbols": "^1.0.3" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, + "node_modules/inquirer/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "peer": true, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hermes-estree": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz", - "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==" - }, - "node_modules/hermes-parser": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz", - "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==", - "dependencies": { - "hermes-estree": "0.19.1" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/hermes-profile-transformer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", - "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "node_modules/inquirer/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "peer": true, "dependencies": { - "source-map": "^0.7.3" + "restore-cursor": "^3.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "node_modules/inquirer/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "peer": true, "engines": { - "node": ">=10" + "node": ">= 12" } }, - "node_modules/hosted-git-info/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==", + "node_modules/inquirer/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, + "peer": true, "dependencies": { - "yallist": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "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==", + "node_modules/inquirer/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, + "peer": true + }, + "node_modules/inquirer/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "peer": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/inquirer/node_modules/log-symbols/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, + "peer": true, "dependencies": { - "agent-base": "6", - "debug": "4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/human-signals": { + "node_modules/inquirer/node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "peer": true, "engines": { - "node": ">=10.17.0" + "node": ">=6" } }, - "node_modules/hyphenate-style-name": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.5.tgz", - "integrity": "sha512-fedL7PRwmeVkgyhu9hLeTBaI6wcGk7JGJswdaRsa5aUbkXI1kr1xZwTPBtaYPpwf56878iDek6VbVnuWMebJmw==" + "node_modules/inquirer/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.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==", + "node_modules/inquirer/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, + "peer": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "peer": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, "engines": { - "node": ">= 4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "node_modules/inquirer/node_modules/ora/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, + "peer": true, "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16.x" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "node_modules/inquirer/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "peer": true, "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/import-fresh/node_modules/resolve-from": { + "node_modules/inquirer/node_modules/run-async": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "peer": true, "engines": { - "node": ">=0.8.19" + "node": ">=0.12.0" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/inquirer/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, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { "node": ">=8" } }, - "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==", + "node_modules/inquirer/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, + "peer": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "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==" - }, - "node_modules/inline-style-prefixer": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz", - "integrity": "sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==", + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "peer": true, "dependencies": { - "css-in-js-utils": "^3.1.0", - "fast-loops": "^1.1.3" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/internal-ip": { @@ -11198,6 +12863,25 @@ "loose-envify": "^1.0.0" } }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, "node_modules/ip-regex": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", @@ -11442,6 +13126,21 @@ "node": ">=0.10.0" } }, + "node_modules/is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.0" + } + }, + "node_modules/is-lower-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -11601,6 +13300,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", + "dev": true, + "dependencies": { + "upper-case": "^1.1.0" + } + }, "node_modules/is-valid-path": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", @@ -11639,6 +13347,18 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -12101,6 +13821,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "node_modules/jsc-android": { "version": "250231.0.0", "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", @@ -12558,6 +14284,12 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -12786,6 +14518,21 @@ "tslib": "^2.0.3" } }, + "node_modules/lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.2" + } + }, + "node_modules/lower-case-first/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, "node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -12827,8 +14574,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "optional": true, - "peer": true + "devOptional": true }, "node_modules/makeerror": { "version": "1.0.12", @@ -13572,6 +15318,12 @@ "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==" }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "node_modules/mv": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", @@ -13723,6 +15475,15 @@ "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==" }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/next": { "version": "14.0.4", "resolved": "https://registry.npmjs.org/next/-/next-14.0.4.tgz", @@ -13847,24 +15608,295 @@ "peerDependencies": { "encoding": "^0.1.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-plop": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/node-plop/-/node-plop-0.26.3.tgz", + "integrity": "sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==", + "dev": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.9.2", + "@types/inquirer": "^6.5.0", + "change-case": "^3.1.0", + "del": "^5.1.0", + "globby": "^10.0.1", + "handlebars": "^4.4.3", + "inquirer": "^7.1.0", + "isbinaryfile": "^4.0.2", + "lodash.get": "^4.4.2", + "mkdirp": "^0.5.1", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=8.9.4" + } + }, + "node_modules/node-plop/node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/node-plop/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/node-plop/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/node-plop/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-plop/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/node-plop/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/node-plop/node_modules/del": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", + "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "dev": true, + "dependencies": { + "globby": "^10.0.1", + "graceful-fs": "^4.2.2", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.1", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-plop/node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-plop/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/node-plop/node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/node-plop/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/node-plop/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/node-plop/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-plop/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-plop/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-plop/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/node-plop/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/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "node_modules/node-plop/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": ">= 6.13.0" + "node": ">=8" } }, - "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==" + "node_modules/node-plop/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/node-releases": { "version": "2.0.14", @@ -14153,6 +16185,87 @@ "node": ">=6" } }, + "node_modules/pac-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "dev": true, + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/param-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/param-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, "node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -14207,6 +16320,30 @@ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" }, + "node_modules/path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/path-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/path-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -14792,6 +16929,56 @@ "node": ">= 0.10" } }, + "node_modules/proxy-agent": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "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==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -15381,6 +17568,28 @@ "node": ">=4" } }, + "node_modules/registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", + "dev": true, + "dependencies": { + "rc": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", @@ -15534,6 +17743,15 @@ "rimraf": "bin.js" } }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -15556,6 +17774,15 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-array-concat": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", @@ -15727,6 +17954,31 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" + } + }, + "node_modules/sentence-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/sentence-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, "node_modules/serialize-error": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", @@ -15954,6 +18206,80 @@ "node": ">=8.0.0" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/snake-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/snake-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -16471,6 +18797,22 @@ "typescript": "^4.9.4 || ^5.0.0" } }, + "node_modules/swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "node_modules/swap-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, "node_modules/tailwindcss": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", @@ -16883,6 +19225,47 @@ "xtend": "~4.0.1" } }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "dev": true + }, + "node_modules/tinygradient": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", + "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", + "dev": true, + "dependencies": { + "@types/tinycolor2": "^1.4.0", + "tinycolor2": "^1.0.0" + } + }, + "node_modules/title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } + }, + "node_modules/title-case/node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/title-case/node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -16956,8 +19339,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "optional": true, - "peer": true, + "devOptional": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -17000,8 +19382,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "optional": true, - "peer": true + "devOptional": true }, "node_modules/tslib": { "version": "2.6.2", @@ -17281,6 +19662,19 @@ "node": "*" } }, + "node_modules/uglify-js": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -17446,6 +19840,31 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/update-check": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", + "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", + "dev": true, + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true + }, + "node_modules/upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "dev": true, + "dependencies": { + "upper-case": "^1.1.1" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -17516,8 +19935,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "optional": true, - "peer": true + "devOptional": true }, "node_modules/valid-url": { "version": "1.0.9", @@ -17844,6 +20262,12 @@ "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==" }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -18103,8 +20527,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "optional": true, - "peer": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -18132,12 +20555,12 @@ "name": "@green-stack/core", "version": "0.0.1", "dependencies": { + "@app/registries": "*", "crypto-js": "^4.2.0", "dot-prop": "^9.0.0", "zod": "^3.23.7" }, "devDependencies": { - "@app/registries": "*", "@graphql-tools/load-files": "^7.0.0", "@types/bun": "^1.1.2", "@types/glob": "^8.1.0", diff --git a/package.json b/package.json index 68cb7dc..5101163 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,15 @@ "link:routes": "npx turbo run @green-stack/core#link:routes", "add:dependencies": "npx turbo run @app-expo#add-dependencies", "env:local": "npx turbo run env:local", + "gen": "turbo gen", "turbo:login": "npx turbo login", "turbo:link": "npx turbo link", "turbo:unlink": "npx turbo unlink" }, "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", + "@turbo/gen": "^1.13.2", + "inquirer-autocomplete-prompt": "^3.0.1", "turbo": "^1.13.2" } } diff --git a/packages/@green-stack-core/generators/gen-workspace.ts b/packages/@green-stack-core/generators/gen-workspace.ts new file mode 100644 index 0000000..5b29708 --- /dev/null +++ b/packages/@green-stack-core/generators/gen-workspace.ts @@ -0,0 +1,115 @@ +/* eslint-disable import/no-anonymous-default-export */ +import { PlopTypes } from '@turbo/gen' +import { validateNonEmptyNoSpaces } from '../scripts/helpers/scriptUtils' + +/* --- Disclaimer ------------------------------------------------------------------------------ */ + +// Learn more about Turborepo Generators at: +// https://turbo.build/repo/docs/core-concepts/monorepos/code-generation + +/* --- Constants ------------------------------------------------------------------------------- */ + +const WORKSPACE_FOLDER_MAPPER = { + feature: 'features', + package: 'packages', +} as const + +/** --- Workspace Generator -------------------------------------------------------------------- */ +/** -i- Simple generator to add a new feature or package workspace */ +export const registerWorkspaceGenerator = (plop: PlopTypes.NodePlopAPI) => { + plop.setGenerator('gen-workspace', { + description: 'Create a new feature or package workspace', + prompts: [ + { + type: 'list', + name: 'workspaceType', + message: 'what type of workspace would you like to generate?', + choices: Object.keys(WORKSPACE_FOLDER_MAPPER), + default: 'feature', + }, + { + type: 'input', + name: 'folderName', + message: 'What foldername do you want to give this workspace?', + validate: validateNonEmptyNoSpaces, + }, + { + type: 'input', + name: 'packageName', + message: 'What package name would you like to import from? (used for package.json)', + validate: validateNonEmptyNoSpaces, + }, + { + type: 'checkbox', + name: 'workspaceStructure', + message: 'Optional: What will this workspace contain? (optional extra folder setup)', + choices: ['schemas', 'resolvers', 'components', 'hooks', 'screens', 'routes', 'utils'], + }, + { + type: 'input', + name: 'packageDescription', + message: 'Optional: How would you shortly describe the package? (used for package.json)', + default: 'todo: add description', + }, + ], + actions: (data) => { + // Args + const { workspaceType, folderName, packageName, workspaceStructure } = data! + + // Vars + const workspaceFolder = WORKSPACE_FOLDER_MAPPER[workspaceType as keyof typeof WORKSPACE_FOLDER_MAPPER] // prettier-ignore + const workspacePath = `${workspaceFolder}/${folderName}` + const isFeature = workspaceType === 'feature' + + // License + const usesCustomLicense = ['green-stack'].some((word) => packageName.includes(word)) + let packageLicense = isFeature ? 'MIT' : 'UNLICENSED' + if (usesCustomLicense) packageLicense = 'SEE LICENSE IN LICENSE.md' + const isPrivate = isFeature || usesCustomLicense + const privateLine = isPrivate ? '\n "private": true,' : '' + + // -- Actions -- + + const actions = [ + { + type: 'add', + path: `${workspacePath}/package.json`, + templateFile: '../../packages/@green-stack-core/generators/templates/package-json.hbs', + data: { packageLicense, privateLine }, + }, + ] as PlopTypes.ActionType[] + + // -- Helpers -- + + const addOptionalStructure = (folderName: string, file: string) => { + if (workspaceStructure.includes(folderName)) { + actions.push({ + type: 'add', + path: `${workspacePath}/${folderName}/${file}`, + }) + } + } + + // -- Optionals -- + + addOptionalStructure('schemas', '.gitkeep') + addOptionalStructure('resolvers', '.gitkeep') + addOptionalStructure('components', '.gitkeep') + addOptionalStructure('hooks', '.gitkeep') + addOptionalStructure('screens', '.gitkeep') + addOptionalStructure('routes', '.gitkeep') + addOptionalStructure('utils', '.gitkeep') + + // -- Generate -- + + return [ + ...actions, + { + type: 'open-files-in-vscode', + paths: [`${workspacePath}/package.json`], + }, + { type: 'install' }, + ] + }, + }) +} diff --git a/packages/@green-stack-core/generators/templates/package-json.hbs b/packages/@green-stack-core/generators/templates/package-json.hbs new file mode 100644 index 0000000..38e723e --- /dev/null +++ b/packages/@green-stack-core/generators/templates/package-json.hbs @@ -0,0 +1,7 @@ +{ + "name": "{{packageName}}", + "version": "0.0.1",{{{privateLine}}} + "description": "{{packageDescription}}", + "scripts": {}, + "dependencies": {} +} \ No newline at end of file diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index 87df9ac..a7e7d5d 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -3,12 +3,12 @@ "version": "0.0.1", "private": true, "dependencies": { + "@app/registries": "*", "crypto-js": "^4.2.0", "dot-prop": "^9.0.0", "zod": "^3.23.7" }, "devDependencies": { - "@app/registries": "*", "@graphql-tools/load-files": "^7.0.0", "@types/bun": "^1.1.2", "@types/glob": "^8.1.0", diff --git a/packages/@registries/generators.generated.ts b/packages/@registries/generators.generated.ts new file mode 100644 index 0000000..53314d1 --- /dev/null +++ b/packages/@registries/generators.generated.ts @@ -0,0 +1 @@ +export { registerWorkspaceGenerator } from '@green-stack/core/generators/gen-workspace' diff --git a/packages/@registries/package.json b/packages/@registries/package.json index 0c7237e..7230353 100644 --- a/packages/@registries/package.json +++ b/packages/@registries/package.json @@ -2,7 +2,6 @@ "name": "@app/registries", "version": "0.0.1", "private": true, - "type": "module", "dependencies": {}, "devDependencies": {}, "scripts": {} diff --git a/turbo/generators/config.ts b/turbo/generators/config.ts new file mode 100644 index 0000000..7c13b64 --- /dev/null +++ b/turbo/generators/config.ts @@ -0,0 +1,135 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable import/no-anonymous-default-export */ +import fs from 'fs' +import path from 'path' +import { PlopTypes } from '@turbo/gen' +import { execSync } from 'child_process' + +import * as workspaceGenerators from '../../packages/@registries/generators.generated' + +/* --- Disclaimer ------------------------------------------------------------------------------ */ + +// Learn more about Turborepo Generators at: +// https://turbo.build/repo/docs/core-concepts/monorepos/code-generation + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type AppendActionConfig = PlopTypes.ActionConfig & { + path: string + template: string + data?: Record +} + +/* --- Register Generators --------------------------------------------------------------------- */ + +export default function (plop: PlopTypes.NodePlopAPI) { + (async () => { + try { + // -- Register prompts -- + + import('inquirer-autocomplete-prompt').then((autocomplete) => { + // @ts-ignore + plop.setPrompt('autocomplete', autocomplete.default) + }) + + // -- Register actions -- + + plop.setActionType( + 'append-last-line', // @ts-ignore + function (answers, config: AppendActionConfig, plop: PlopTypes.NodePlopAPI) { + const targetPath = plop.getPlopfilePath().replace('/turbo/generators', '') + const absolutePath = path.join(targetPath, config.path) + // Check if file exists, create it if it doesn't yet + if (fs.existsSync(absolutePath) === false) fs.writeFileSync(absolutePath, '') + // Append as last non-empty line + const existingContent = fs.readFileSync(absolutePath, 'utf8') + const existingLines = existingContent.split('\n').filter(Boolean) + const newContent = [...existingLines, config.template, ''].join('\n') + // Write to file + fs.writeFileSync(absolutePath, newContent) + // Tell turborepo where the change was made + return `/${config.path}` + } + ) + + plop.setActionType( + 'open-files-in-vscode', // @ts-ignore + function (answers, config: { paths: string[] }, plop: PlopTypes.NodePlopAPI) { + return new Promise((resolve, reject) => { + try { + console.log('Opening files in VSCode...') + const targetPath = plop.getPlopfilePath().replace('/turbo/generators', '') + const absolutePaths = config.paths.map((p) => path.join(targetPath, p)) + // Open files in VSCode + execSync(`code ${absolutePaths.join(' ')}`) + resolve(`Opened ${absolutePaths.length} files in VSCode`) + } catch (error) { + console.error('Failed to open files in VSCode:', error) + reject(error) + } + }) + } + ) + + plop.setActionType( + 'collect-resolvers', // @ts-ignore + function (answers, config, plop: PlopTypes.NodePlopAPI) { + return new Promise((resolve, reject) => { + try { + console.log("Running 'collect-resolvers' script from '@aetherspace' workspace...") + execSync(`yarn workspace aetherspace run collect-resolvers`) + resolve("Ran 'collect-resolvers' script from '@aetherspace' workspace") + } catch (error) { + console.error( + "Failed to execute 'yarn workspace aetherspace run collect-resolvers':", + error + ) + reject(error) + } + }) + } + ) + + plop.setActionType( + 'link-routes', // @ts-ignore + function (answers, config, plop: PlopTypes.NodePlopAPI) { + return new Promise((resolve, reject) => { + try { + console.log("Running 'link-routes' script from '@aetherspace' workspace...") + execSync(`yarn workspace aetherspace run link-routes`) + resolve("Ran 'link-routes' script from '@aetherspace' workspace") + } catch (error) { + console.error("Failed to execute 'yarn workspace aetherspace run link-routes':", error) + reject(error) + } + }) + } + ) + + plop.setActionType( + 'install', // @ts-ignore + function (answers, config, plop: PlopTypes.NodePlopAPI) { + return new Promise((resolve, reject) => { + try { + console.log("Running 'install' on workspace root") + execSync(`yarn install`) + resolve("Ran 'install' on workspace root") + } catch (error) { + console.error("Failed to execute 'yarn install':", error) + reject(error) + } + }) + } + ) + + // -- Register generators -- + + Object.values(workspaceGenerators).forEach((registerGenerator) => { + registerGenerator(plop) + }) + + } catch (error) { + console.error('Failed to register generators:', error) + } + })() +} From 1886cf22b9577cfcfdbecbffed8722311bd7d97b Mon Sep 17 00:00:00 2001 From: codinsonn Date: Mon, 17 Jun 2024 00:26:43 +0200 Subject: [PATCH 031/126] feat: Add collect-generators script --- package.json | 1 + packages/@green-stack-core/package.json | 1 + .../scripts/collect-generators.ts | 53 +++++++++++++++++++ .../scripts/collect-resolvers.ts | 2 +- packages/@registries/generators.generated.ts | 1 + turbo.json | 4 ++ 6 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 packages/@green-stack-core/scripts/collect-generators.ts diff --git a/package.json b/package.json index 5101163..000fbf2 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "build": "npx turbo run build", "build:schema": "npx turbo run @green-stack/core#build:schema", "check:workspaces": "npx turbo run @green-stack/core#check:workspaces", + "collect:generators": "npx turbo run @green-stack/core#collect:generators", "collect:resolvers": "npx turbo run @green-stack/core#collect:resolvers", "link:routes": "npx turbo run @green-stack/core#link:routes", "add:dependencies": "npx turbo run @app-expo#add-dependencies", diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index a7e7d5d..d1904e8 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -21,6 +21,7 @@ "build:schema": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/build-graphql-schema.ts", "check:workspaces": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/check-workspaces.ts", "collect:resolvers": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/collect-resolvers.ts", + "collect:generators": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/collect-generators.ts", "link:routes": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/link-routes.ts", "test": "bun test --preload ./preload.test.ts --tsconfig-override tsconfig.test.json --verbose" } diff --git a/packages/@green-stack-core/scripts/collect-generators.ts b/packages/@green-stack-core/scripts/collect-generators.ts new file mode 100644 index 0000000..229814f --- /dev/null +++ b/packages/@green-stack-core/scripts/collect-generators.ts @@ -0,0 +1,53 @@ +import glob from 'glob' +import fs from 'fs' +import { findTargetString } from '../utils/stringUtils' +import { excludeDirs, parseWorkspaces } from './helpers/scriptUtils' + +/* --- constants ------------------------------------------------------------------------------- */ + +const genMsg = '// -i- Auto generated with "npx turbo run @green-stack/core#collect:generators"\n' + +/* --- collect-generators ---------------------------------------------------------------------- */ + +const collectGenerators = () => { + try { + // Get all resolver file paths in the next app's api folder + const featureGenerators = glob.sync('../../features/**/generators/*.ts').filter(excludeDirs) + const packageGenerators = glob.sync('../../packages/**/generators/*.ts').filter(excludeDirs) + const allGenerators = [...featureGenerators, ...packageGenerators].filter((path) => !path.includes('.d.ts')) // prettier-ignore + + // Figure out import paths from each workspace + const { workspaceImports } = parseWorkspaces() + + // Collect all generators into a registry + const generatorRegistry = allGenerators.reduce((acc, generatorPath) => { + // Figure out the workspace import + const [packageParts, generatorParts] = generatorPath.split('/generators') as [string, string] + const workspaceMatcher = packageParts.replace('../../', '') + const workspacePackageName = workspaceImports[workspaceMatcher] + const importPath = `${workspacePackageName}/generators${generatorParts.replace('.ts', '')}` + + // Skip files that don't use PlopTypes or a turbo generators + const pathContents = fs.readFileSync(generatorPath, 'utf8') + const usesPlopTypes = pathContents.includes('PlopTypes') + const usesTurboGenerators = pathContents.includes('@turbo/gen') + const exportLines = pathContents.split('\n').filter((line) => line.includes('export')) + const generatorExportLine = exportLines.find((line) => line.includes('Generator')) + if (!usesPlopTypes || !usesTurboGenerators || !generatorExportLine) return acc + + // Extract the generator name + const generatorName = findTargetString(generatorExportLine, 'export const $target$ =') + return generatorName ? `${acc}export { ${generatorName} } from '${importPath}'\n` : acc + }, genMsg) + + // Write barrel file to 'packages/@registries/generators-generated' + fs.writeFileSync('../../packages/@registries/generators.generated.ts', generatorRegistry) + } catch (err) { + console.error(err) + process.exit(1) + } +} + +/* --- init ------------------------------------------------------------------------------------ */ + +collectGenerators() diff --git a/packages/@green-stack-core/scripts/collect-resolvers.ts b/packages/@green-stack-core/scripts/collect-resolvers.ts index 9c3abd1..64303af 100644 --- a/packages/@green-stack-core/scripts/collect-resolvers.ts +++ b/packages/@green-stack-core/scripts/collect-resolvers.ts @@ -5,7 +5,7 @@ import { excludeDirs, parseWorkspaces } from './helpers/scriptUtils' /* --- Constants ------------------------------------------------------------------------------ */ -const genMsg = `// -i- Auto generated with "npx turbo run @green-stack/core#collect:resolvers" -- /packages/@green-stack-core/scripts/collect-resolvers.ts\n` +const genMsg = `// -i- Auto generated with "npx turbo run @green-stack/core#collect:resolvers"\n` /* --- collect-resolvers ---------------------------------------------------------------------- */ diff --git a/packages/@registries/generators.generated.ts b/packages/@registries/generators.generated.ts index 53314d1..90a22ab 100644 --- a/packages/@registries/generators.generated.ts +++ b/packages/@registries/generators.generated.ts @@ -1 +1,2 @@ +// -i- Auto generated with "npx turbo run @green-stack/core#collect:generators" export { registerWorkspaceGenerator } from '@green-stack/core/generators/gen-workspace' diff --git a/turbo.json b/turbo.json index 5cb351e..aaa28a0 100644 --- a/turbo.json +++ b/turbo.json @@ -43,7 +43,11 @@ "inputs": [], "cache": true }, + "@green-stack/core#collect:generators": { + "cache": false + }, "@green-stack/core#check:workspaces": { + "dependsOn": ["@green-stack/core#collect:generators"], "cache": false }, "env:local": { From 6b831acae2a1f1683366449531318feef0187dc9 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Wed, 19 Jun 2024 16:52:48 +0200 Subject: [PATCH 032/126] feat: Add aliases for @app/core & @green-stack/core through tsConfig paths --- apps/expo/app/ExpoRootLayout.tsx | 12 +++---- apps/next/app/Document.tsx | 2 +- apps/next/app/NextClientRootLayout.tsx | 10 +++--- apps/next/app/ServerStylesProvider.tsx | 2 +- apps/next/middleware.ts | 2 +- features/@app-core/components/styled.tsx | 6 ++-- .../@app-core/graphql/graphqlQuery.web.ts | 2 +- features/@app-core/graphql/graphqlServer.ts | 2 +- features/@app-core/graphql/schema.ts | 2 +- .../@app-core/resolvers/healthCheck.bridge.ts | 2 +- .../@app-core/resolvers/healthCheck.query.ts | 2 +- .../resolvers/healthCheck.resolver.ts | 2 +- features/@app-core/schemas/HealthCheckArgs.ts | 2 +- .../@app-core/schemas/HealthCheckResponse.ts | 2 +- features/@app-core/screens/HomeScreen.tsx | 2 +- features/@app-core/screens/ImagesScreen.tsx | 2 +- features/@app-core/screens/SlugScreen.tsx | 6 ++-- .../screens/UniversalAppProviders.tsx | 4 +-- features/@app-core/tsconfig.json | 21 +++++++++++- package-lock.json | 7 ++++ .../generators/gen-workspace.ts | 16 +++++++++ packages/@green-stack-core/package.json | 2 +- packages/@green-stack-core/preload.test.ts | 33 ++++++++++++++++++- .../schemas/bridgedFetcher.ts | 2 +- .../schemas/createGraphResolver.ts | 4 +-- .../scripts/check-workspaces.ts | 4 +-- packages/@green-stack-core/tsconfig.json | 4 +-- .../@green-stack-core/tsconfig.scripts.json | 4 +-- packages/@green-stack-core/tsconfig.test.json | 15 --------- packages/@green-stack-core/utils/apiUtils.ts | 4 +-- packages/@registries/resolvers.generated.ts | 2 +- packages/@registries/tsconfig.json | 4 +-- turbo/generators/config.ts | 4 +-- 33 files changed, 124 insertions(+), 66 deletions(-) delete mode 100644 packages/@green-stack-core/tsconfig.test.json diff --git a/apps/expo/app/ExpoRootLayout.tsx b/apps/expo/app/ExpoRootLayout.tsx index e1aa757..9b22b19 100644 --- a/apps/expo/app/ExpoRootLayout.tsx +++ b/apps/expo/app/ExpoRootLayout.tsx @@ -1,10 +1,10 @@ import { Stack } from 'expo-router' -import UniversalAppProviders from '@app/core/screens/UniversalAppProviders' -import UniversalRootLayout from '@app/core/screens/UniversalRootLayout' -import { Image as ExpoContextImage } from '@green-stack/core/components/Image.expo' -import { Link as ExpoContextLink } from '@green-stack/core/navigation/Link.expo' -import { useRouter as useExpoContextRouter } from '@green-stack/core/navigation/useRouter.expo' -import { useRouteParams as useExpoRouteParams } from '@green-stack/core/navigation/useRouteParams.expo' +import UniversalAppProviders from '@app/screens/UniversalAppProviders' +import UniversalRootLayout from '@app/screens/UniversalRootLayout' +import { Image as ExpoContextImage } from '@green-stack/components/Image.expo' +import { Link as ExpoContextLink } from '@green-stack/navigation/Link.expo' +import { useRouter as useExpoContextRouter } from '@green-stack/navigation/useRouter.expo' +import { useRouteParams as useExpoRouteParams } from '@green-stack/navigation/useRouteParams.expo' import { NativeWindStyleSheet } from 'nativewind' // -i- Expo Router's layout setup is much simpler than Next.js's layout setup diff --git a/apps/next/app/Document.tsx b/apps/next/app/Document.tsx index e44984b..99cf724 100644 --- a/apps/next/app/Document.tsx +++ b/apps/next/app/Document.tsx @@ -1,5 +1,5 @@ import React from 'react' -import UniversalRootLayout from '@app/core/screens/UniversalRootLayout' +import UniversalRootLayout from '@app/screens/UniversalRootLayout' import ServerStylesProvider from './ServerStylesProvider' import '../global.css' diff --git a/apps/next/app/NextClientRootLayout.tsx b/apps/next/app/NextClientRootLayout.tsx index 5eb390e..3448ea3 100644 --- a/apps/next/app/NextClientRootLayout.tsx +++ b/apps/next/app/NextClientRootLayout.tsx @@ -1,10 +1,10 @@ 'use client' import React from 'react' -import UniversalAppProviders from '@app/core/screens/UniversalAppProviders' -import { Image as NextContextImage } from '@green-stack/core/components/Image.next' -import { Link as NextContextLink } from '@green-stack/core/navigation/Link.next' -import { useRouter as useNextContextRouter } from '@green-stack/core/navigation/useRouter.next' -import { useRouteParams as useNextRouteParams } from '@green-stack/core/navigation/useRouteParams.next' +import UniversalAppProviders from '@app/screens/UniversalAppProviders' +import { Image as NextContextImage } from '@green-stack/components/Image.next' +import { Link as NextContextLink } from '@green-stack/navigation/Link.next' +import { useRouter as useNextContextRouter } from '@green-stack/navigation/useRouter.next' +import { useRouteParams as useNextRouteParams } from '@green-stack/navigation/useRouteParams.next' // -i- This is a regular react client component // -i- It's still rendered on the server during SSR, but it also hydrates on the client diff --git a/apps/next/app/ServerStylesProvider.tsx b/apps/next/app/ServerStylesProvider.tsx index ddac53b..8ebc99e 100644 --- a/apps/next/app/ServerStylesProvider.tsx +++ b/apps/next/app/ServerStylesProvider.tsx @@ -3,7 +3,7 @@ import React from 'react' import { AppRegistry } from 'react-native' import { useServerInsertedHTML } from 'next/navigation' -import UniversalRootLayout from '@app/core/screens/UniversalRootLayout' +import UniversalRootLayout from '@app/screens/UniversalRootLayout' // -i- This is a regular react client component // -i- However, it is rendered on the server during SSR diff --git a/apps/next/middleware.ts b/apps/next/middleware.ts index 6771d13..4182426 100644 --- a/apps/next/middleware.ts +++ b/apps/next/middleware.ts @@ -1,5 +1,5 @@ import { NextRequest, NextResponse } from 'next/server' -import { createMiddlewareHeaderContext } from '@green-stack/core/utils/apiUtils' +import { createMiddlewareHeaderContext } from '@green-stack/utils/apiUtils' /* --- Middleware ------------------------------------------------------------------------------ */ diff --git a/features/@app-core/components/styled.tsx b/features/@app-core/components/styled.tsx index ea62c0a..603144e 100644 --- a/features/@app-core/components/styled.tsx +++ b/features/@app-core/components/styled.tsx @@ -1,9 +1,9 @@ import type { KnownRoutes } from '@app/registries/routeManifest.generated' import { styled } from 'nativewind' import { Text as RNText, View as RNView } from 'react-native' -import { Link as UniversalLink } from '@green-stack/core/navigation/Link' -import { Image as UniversalImage } from '@green-stack/core/components/Image' -import { UniversalLinkProps } from '@green-stack/core/navigation/Link.types' +import { Link as UniversalLink } from '@green-stack/navigation/Link' +import { UniversalLinkProps } from '@green-stack/navigation/Link.types' +import { Image as UniversalImage } from '@green-stack/components/Image' /* --- Primitives ------------------------------------------------------------------------------ */ diff --git a/features/@app-core/graphql/graphqlQuery.web.ts b/features/@app-core/graphql/graphqlQuery.web.ts index 1b3ae7a..3584eef 100644 --- a/features/@app-core/graphql/graphqlQuery.web.ts +++ b/features/@app-core/graphql/graphqlQuery.web.ts @@ -1,6 +1,6 @@ import { print } from 'graphql/language/printer' import type { TadaDocumentNode, ResultOf } from 'gql.tada' -import { warnOnce } from '@green-stack/core/utils/commonUtils' +import { warnOnce } from '@green-stack/utils/commonUtils' import type { QueryConfig } from './graphqlQuery.types' import { appConfig } from '../appConfig' diff --git a/features/@app-core/graphql/graphqlServer.ts b/features/@app-core/graphql/graphqlServer.ts index c136bbc..6a15563 100644 --- a/features/@app-core/graphql/graphqlServer.ts +++ b/features/@app-core/graphql/graphqlServer.ts @@ -3,7 +3,7 @@ import type { NextRequest } from 'next/server' import { startServerAndCreateNextHandler } from '@as-integrations/next' import { createRequestContext } from '../middleware/createRequestContext' import { schemaBundle } from './schema' -import { getHeaderContext } from '@green-stack/core/utils/apiUtils' +import { getHeaderContext } from '@green-stack/utils/apiUtils' /* --- Apollo Server --------------------------------------------------------------------------- */ diff --git a/features/@app-core/graphql/schema.ts b/features/@app-core/graphql/schema.ts index 9f79f87..e22c607 100644 --- a/features/@app-core/graphql/schema.ts +++ b/features/@app-core/graphql/schema.ts @@ -4,7 +4,7 @@ import { GraphQLJSON, GraphQLJSONObject } from 'graphql-type-json' import { gql } from 'graphql-tag' import { typeDefs } from './typeDefs' import * as resolvers from '@app/registries/resolvers.generated' -import { createGraphSchemaDefs } from '@green-stack/core/schemas/createGraphSchemaDefs' +import { createGraphSchemaDefs } from '@green-stack/schemas/createGraphSchemaDefs' /* --- Notes ----------------------------------------------------------------------------------- */ diff --git a/features/@app-core/resolvers/healthCheck.bridge.ts b/features/@app-core/resolvers/healthCheck.bridge.ts index 2829c8c..7411156 100644 --- a/features/@app-core/resolvers/healthCheck.bridge.ts +++ b/features/@app-core/resolvers/healthCheck.bridge.ts @@ -1,4 +1,4 @@ -import { createDataBridge } from '@green-stack/core/schemas/createDataBridge' +import { createDataBridge } from '@green-stack/schemas/createDataBridge' import { HealthCheckArgs } from '../schemas/HealthCheckArgs' import { HealthCheckResponse } from '../schemas/HealthCheckResponse' diff --git a/features/@app-core/resolvers/healthCheck.query.ts b/features/@app-core/resolvers/healthCheck.query.ts index 0ec1377..f3232c1 100644 --- a/features/@app-core/resolvers/healthCheck.query.ts +++ b/features/@app-core/resolvers/healthCheck.query.ts @@ -1,5 +1,5 @@ import { ResultOf, VariablesOf } from 'gql.tada' -import { bridgedFetcher } from '@green-stack/core/schemas/bridgedFetcher' +import { bridgedFetcher } from '@green-stack/schemas/bridgedFetcher' import { healthCheckBridge } from './healthCheck.bridge' import { graphql } from '../graphql/graphql' diff --git a/features/@app-core/resolvers/healthCheck.resolver.ts b/features/@app-core/resolvers/healthCheck.resolver.ts index c847ab1..270809a 100644 --- a/features/@app-core/resolvers/healthCheck.resolver.ts +++ b/features/@app-core/resolvers/healthCheck.resolver.ts @@ -1,6 +1,6 @@ import * as OS from 'os' import type { NextRequest } from 'next/server' -import { createResolver } from '@green-stack/core/schemas/createResolver' +import { createResolver } from '@green-stack/schemas/createResolver' import { appConfig } from '../appConfig' import { healthCheckBridge } from './healthCheck.bridge' diff --git a/features/@app-core/schemas/HealthCheckArgs.ts b/features/@app-core/schemas/HealthCheckArgs.ts index b733726..b90c57c 100644 --- a/features/@app-core/schemas/HealthCheckArgs.ts +++ b/features/@app-core/schemas/HealthCheckArgs.ts @@ -1,4 +1,4 @@ -import { z, schema } from '@green-stack/core/schemas' +import { z, schema } from '@green-stack/schemas' /* --- Schemas --------------------------------------------------------------------------------- */ diff --git a/features/@app-core/schemas/HealthCheckResponse.ts b/features/@app-core/schemas/HealthCheckResponse.ts index 98e3833..e24b1fd 100644 --- a/features/@app-core/schemas/HealthCheckResponse.ts +++ b/features/@app-core/schemas/HealthCheckResponse.ts @@ -1,4 +1,4 @@ -import { z, schema } from '@green-stack/core/schemas' +import { z, schema } from '@green-stack/schemas' /* --- Schemas --------------------------------------------------------------------------------- */ diff --git a/features/@app-core/screens/HomeScreen.tsx b/features/@app-core/screens/HomeScreen.tsx index e1d84f6..44df11d 100644 --- a/features/@app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/HomeScreen.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { HydratedRouteProps, createQueryBridge } from '@green-stack/core/navigation/UniversalRouteScreen.helpers' +import { HydratedRouteProps, createQueryBridge } from '@green-stack/navigation/UniversalRouteScreen.helpers' import { View, Link, Image, P, H3, Text } from '../components/styled' import { healthCheckFetcher } from '../resolvers/healthCheck.query' diff --git a/features/@app-core/screens/ImagesScreen.tsx b/features/@app-core/screens/ImagesScreen.tsx index 4068821..13390d7 100644 --- a/features/@app-core/screens/ImagesScreen.tsx +++ b/features/@app-core/screens/ImagesScreen.tsx @@ -1,4 +1,4 @@ -import type { HydratedRouteProps } from '@green-stack/core/navigation/UniversalRouteScreen.helpers' +import type { HydratedRouteProps } from '@green-stack/navigation/UniversalRouteScreen.helpers' import React from 'react' import { View, Text, Image, Link } from '../components/styled' diff --git a/features/@app-core/screens/SlugScreen.tsx b/features/@app-core/screens/SlugScreen.tsx index f8ebd38..247e10d 100644 --- a/features/@app-core/screens/SlugScreen.tsx +++ b/features/@app-core/screens/SlugScreen.tsx @@ -1,8 +1,8 @@ import React from 'react' -import { useRouteParams } from '@green-stack/core/navigation/useRouteParams' +import { useRouteParams } from '@green-stack/navigation/useRouteParams' import { View, Text, H3, P, Link } from '../components/styled' -import { useRouter } from '@green-stack/core/navigation/useRouter' -import type { UniversalRouteScreenProps } from '@green-stack/core/navigation/useRouteParams.types' +import { useRouter } from '@green-stack/navigation/useRouter' +import type { UniversalRouteScreenProps } from '@green-stack/navigation/useRouteParams.types' /* --- --------------------------------------------------------------------------- */ diff --git a/features/@app-core/screens/UniversalAppProviders.tsx b/features/@app-core/screens/UniversalAppProviders.tsx index f37ed0e..27c3bcc 100644 --- a/features/@app-core/screens/UniversalAppProviders.tsx +++ b/features/@app-core/screens/UniversalAppProviders.tsx @@ -1,7 +1,7 @@ 'use client' import React from 'react' -import { CoreContext, CoreContextType } from '@green-stack/core/context/CoreContext' -import { UniversalQueryClientProvider } from '@green-stack/core/context/UniversalQueryClientProvider' +import { CoreContext, CoreContextType } from '@green-stack/context/CoreContext' +import { UniversalQueryClientProvider } from '@green-stack/context/UniversalQueryClientProvider' // -i- This is a regular react client component // -i- Use this file for adding universal app providers that work in both Expo and Next.js diff --git a/features/@app-core/tsconfig.json b/features/@app-core/tsconfig.json index 6934705..6275c4b 100644 --- a/features/@app-core/tsconfig.json +++ b/features/@app-core/tsconfig.json @@ -23,7 +23,26 @@ "tadaOutputLocation": "./graphql-env.d.ts" } ], - "types": ["node", "glob"] + "types": ["node", "glob"], + "paths": { + "@app/config": ["../../features/@app-core/appConfig.ts"], + "@app/schemas/*": ["../../features/@app-core/schemas/*"], + "@app/utils/*": ["../../features/@app-core/utils/*"], + "@app/hooks/*": ["../../features/@app-core/hooks/*"], + "@app/components/*": ["../../features/@app-core/components/*"], + "@app/screens/*": ["../../features/@app-core/screens/*"], + "@app/assets/*": ["../../features/@app-core/assets/*"], + "@app/resolvers/*": ["../../features/@app-core/resolvers/*"], + "@app/middleware/*": ["../../features/@app-core/middleware/*"], + "@green-stack/schemas": ["../../packages/@green-stack-core/schemas"], + "@green-stack/schemas/*": ["../../packages/@green-stack-core/schemas/*"], + "@green-stack/utils/*": ["../../packages/@green-stack-core/utils/*"], + "@green-stack/hooks/*": ["../../packages/@green-stack-core/hooks/*"], + "@green-stack/components/*": ["../../packages/@green-stack-core/components/*"], + "@green-stack/styles/*": ["../../packages/@green-stack-core/styles/*"], + "@green-stack/navigation/*": ["../../packages/@green-stack-core/navigation/*"], + "@green-stack/context/*": ["../../packages/@green-stack-core/context/*"], + } }, "include": [ "next-env.d.ts", diff --git a/package-lock.json b/package-lock.json index 99424e7..194efac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2534,6 +2534,10 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@db/driver": { + "resolved": "packages/@db-driver", + "link": true + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -20551,6 +20555,9 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "packages/@db-driver": { + "version": "0.0.1" + }, "packages/@green-stack-core": { "name": "@green-stack/core", "version": "0.0.1", diff --git a/packages/@green-stack-core/generators/gen-workspace.ts b/packages/@green-stack-core/generators/gen-workspace.ts index 5b29708..e14e00e 100644 --- a/packages/@green-stack-core/generators/gen-workspace.ts +++ b/packages/@green-stack-core/generators/gen-workspace.ts @@ -77,6 +77,22 @@ export const registerWorkspaceGenerator = (plop: PlopTypes.NodePlopAPI) => { templateFile: '../../packages/@green-stack-core/generators/templates/package-json.hbs', data: { packageLicense, privateLine }, }, + { + type: 'add', + path: `${workspacePath}/tsconfig.json`, + template: `{ + "extends": "@app/core/tsconfig", + "include": [ + "**/*.ts", + "**/*.tsx", + "../../features/**/*.ts", + "../../features/**/*.tsx", + "../../features/app-core/graphql-env.d.ts", + "../../packages/@green-stack-core/global.d.ts" + ], + "exclude": ["node_modules"] + }`, + } ] as PlopTypes.ActionType[] // -- Helpers -- diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index d1904e8..38c1be7 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -23,6 +23,6 @@ "collect:resolvers": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/collect-resolvers.ts", "collect:generators": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/collect-generators.ts", "link:routes": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/link-routes.ts", - "test": "bun test --preload ./preload.test.ts --tsconfig-override tsconfig.test.json --verbose" + "test": "bun test --preload ./preload.test.ts --verbose" } } diff --git a/packages/@green-stack-core/preload.test.ts b/packages/@green-stack-core/preload.test.ts index 7f0832e..56ca135 100644 --- a/packages/@green-stack-core/preload.test.ts +++ b/packages/@green-stack-core/preload.test.ts @@ -1,9 +1,40 @@ +import glob from 'glob' // @ts-ignore import { mock } from 'bun:test' +/* --- Mock tsConfig paths --------------------------------------------------------------------- */ + +// -i- We need to mock the tsConfig paths for esbuild-register to work +// -i- ... as it doesn't have the same path resolution as typescript. + +const featureTsConfigs = glob.sync('../../features/**/tsconfig.json') +const packageTsConfigs = glob.sync('../../packages/**/tsconfig.json') +const relevantTsConfigs = [...featureTsConfigs, ...packageTsConfigs] +relevantTsConfigs.forEach(async (tsConfigPath) => { + const tsConfig = await import(tsConfigPath) + const tsConfigPathAliases = tsConfig.compilerOptions?.paths || {} // @ts-ignore + Object.entries(tsConfigPathAliases).forEach(([aliasKey, [aliasedPath]]) => { + // Aliases to single files + if (!aliasKey.includes('*')) mock.module(aliasKey, () => import(aliasedPath)) + // Wildcard * aliases to multiple files + if (aliasKey.includes('*')) { + const normalizedAliasKey = aliasKey.replace('/*', '/') + const [importPathBase] = aliasedPath.split('*') + const aliasGlob = aliasedPath.replace('*', '**/*.{ts,tsx}') + const aliasedPaths = glob.sync(aliasGlob) + aliasedPaths.forEach((file) => { + const modulePathFromAlias = file.split(importPathBase)[1]?.replace('.tsx', '').replace('.ts', '') + const aliasFilePath = `${normalizedAliasKey}${modulePathFromAlias}` + const actualFilePath = file.replace('.tsx', '').replace('.ts', '') + mock.module(aliasFilePath, () => import(actualFilePath)) + }) + } + }) +}) + /* --- Mock Flow typed modules ----------------------------------------------------------------- */ // -i- We need aliases for these as they touch parts of react-native that ship Flow types -// -i- ...which typescript can't deal with. +// -i- ... which typescript can't deal with. mock.module('expo-constants', () => import('./__mocks__/expo-constants.mock')) mock.module(require.resolve('expo-constants'), () => import('./__mocks__/expo-constants.mock')) // @ts-ignore diff --git a/packages/@green-stack-core/schemas/bridgedFetcher.ts b/packages/@green-stack-core/schemas/bridgedFetcher.ts index 565f749..6a4ba36 100644 --- a/packages/@green-stack-core/schemas/bridgedFetcher.ts +++ b/packages/@green-stack-core/schemas/bridgedFetcher.ts @@ -1,5 +1,5 @@ import type { TadaDocumentNode, VariablesOf, ResultOf } from 'gql.tada' -import { graphqlQuery } from '@app/core/graphql/graphqlQuery' // '@app/core/graphql/graphqlQuery' +import { graphqlQuery } from '@app/core/graphql/graphqlQuery' /** --- bridgedFetcher() ----------------------------------------------------------------------- */ /** -i- Helper to create a typed fetcher from config created by `createDataBridge()` */ diff --git a/packages/@green-stack-core/schemas/createGraphResolver.ts b/packages/@green-stack-core/schemas/createGraphResolver.ts index 749f739..abe8369 100644 --- a/packages/@green-stack-core/schemas/createGraphResolver.ts +++ b/packages/@green-stack-core/schemas/createGraphResolver.ts @@ -1,5 +1,5 @@ -import { z } from '@green-stack/core/schemas' -import type { RequestContext } from '@app/core/middleware/createRequestContext' +import { z } from '../schemas' +import type { RequestContext } from '@app/middleware/createRequestContext' /** --- createGraphResolver() ------------------------------------------------------------------ **/ /** -i- Codegen: Build a graphQL resolver from aether an resolver */ diff --git a/packages/@green-stack-core/scripts/check-workspaces.ts b/packages/@green-stack-core/scripts/check-workspaces.ts index 336a832..77a2c07 100644 --- a/packages/@green-stack-core/scripts/check-workspaces.ts +++ b/packages/@green-stack-core/scripts/check-workspaces.ts @@ -1,4 +1,3 @@ -import * as dotenv from 'dotenv' import glob from 'glob' import fs from 'fs' import { excludeDirs, parseWorkspaces } from './helpers/scriptUtils' @@ -27,7 +26,8 @@ const checkWorkspaces = async (isDeepCheck = true) => { // Load .env file in dev mode const isDev = process.env.NODE_ENV !== 'production' const hasEnvFile = fs.existsSync('../../apps/next/.env') - if (isDev && hasEnvFile) dotenv.config({ path: '../../apps/next/.env' }) + const { config: dotenvConfig } = await import('dotenv') + if (isDev && hasEnvFile) dotenvConfig({ path: '../../apps/next/.env' }) // Scan all /features/ and /packages/ workspace .ts & .tsx files const featureFiles = glob.sync('../../features/**/*.ts*').filter(excludeDirs) diff --git a/packages/@green-stack-core/tsconfig.json b/packages/@green-stack-core/tsconfig.json index 92057d6..122618e 100644 --- a/packages/@green-stack-core/tsconfig.json +++ b/packages/@green-stack-core/tsconfig.json @@ -5,8 +5,8 @@ "**/*.tsx", "../../features/**/*.ts", "../../features/**/*.tsx", - "../../features/app-core/graphql-env.d.ts", - "global.d.ts" + "../../features/@app-core/graphql-env.d.ts", + "../../packages/@green-stack-core/global.d.ts" ], "exclude": ["node_modules", "**/*.test.ts", "**/*.test.tsx"] } diff --git a/packages/@green-stack-core/tsconfig.scripts.json b/packages/@green-stack-core/tsconfig.scripts.json index 048163c..59abac4 100644 --- a/packages/@green-stack-core/tsconfig.scripts.json +++ b/packages/@green-stack-core/tsconfig.scripts.json @@ -14,8 +14,8 @@ "**/*.tsx", "../../features/**/*.ts", "../../features/**/*.tsx", - "../../features/app-core/graphql-env.d.ts", - "global.d.ts" + "../../features/@app-core/graphql-env.d.ts", + "../../packages/@green-stack-core/global.d.ts" ], "exclude": ["node_modules"] } diff --git a/packages/@green-stack-core/tsconfig.test.json b/packages/@green-stack-core/tsconfig.test.json deleted file mode 100644 index 742d4f8..0000000 --- a/packages/@green-stack-core/tsconfig.test.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "@app/core/tsconfig", - "compilerOptions": { - "types": ["bun-types"] - }, - "include": [ - "**/*.ts", - "**/*.tsx", - "../../features/**/*.ts", - "../../features/**/*.tsx", - "../../features/app-core/graphql-env.d.ts", - "global.d.ts" - ], - "exclude": ["node_modules"] -} diff --git a/packages/@green-stack-core/utils/apiUtils.ts b/packages/@green-stack-core/utils/apiUtils.ts index 23ca8a6..d075cbb 100644 --- a/packages/@green-stack-core/utils/apiUtils.ts +++ b/packages/@green-stack-core/utils/apiUtils.ts @@ -1,7 +1,7 @@ -import type { NextApiRequest, NextApiResponse, GetServerSidePropsContext } from 'next' +import type { NextApiRequest, GetServerSidePropsContext } from 'next' import type { NextRequest } from 'next/server' // @ts-ignore import CryptoJS from 'crypto-js' -import { appConfig } from '@app/core/appConfig' +import { appConfig } from '@app/config' import { normalizeObjectProps } from './objectUtils' import { isEmpty, warnOnce } from './commonUtils' diff --git a/packages/@registries/resolvers.generated.ts b/packages/@registries/resolvers.generated.ts index de4e993..d50fc95 100644 --- a/packages/@registries/resolvers.generated.ts +++ b/packages/@registries/resolvers.generated.ts @@ -1,2 +1,2 @@ -// -i- Auto generated with "npx turbo run @green-stack/core#collect:resolvers" -- /packages/@green-stack-core/scripts/collect-resolvers.ts +// -i- Auto generated with "npx turbo run @green-stack/core#collect:resolvers" export { graphResolver as healthCheck } from '@app/core/routes/api/health/route' diff --git a/packages/@registries/tsconfig.json b/packages/@registries/tsconfig.json index c4a1ae8..011d695 100644 --- a/packages/@registries/tsconfig.json +++ b/packages/@registries/tsconfig.json @@ -5,8 +5,8 @@ "**/*.tsx", "../../features/**/*.ts", "../../features/**/*.tsx", - "../../features/app-core/graphql-env.d.ts", - "../@green-stack-core/global.d.ts" + "../../features/@app-core/graphql-env.d.ts", + "../../packages/@green-stack-core/global.d.ts" ], "exclude": ["node_modules"] } diff --git a/turbo/generators/config.ts b/turbo/generators/config.ts index 7c13b64..faf8fd0 100644 --- a/turbo/generators/config.ts +++ b/turbo/generators/config.ts @@ -112,10 +112,10 @@ export default function (plop: PlopTypes.NodePlopAPI) { return new Promise((resolve, reject) => { try { console.log("Running 'install' on workspace root") - execSync(`yarn install`) + execSync(`npm install`) resolve("Ran 'install' on workspace root") } catch (error) { - console.error("Failed to execute 'yarn install':", error) + console.error("Failed to execute 'npm install':", error) reject(error) } }) From e97ee50eae80a46e0eba6c69a5b17f9c37fe6e3f Mon Sep 17 00:00:00 2001 From: codinsonn Date: Thu, 20 Jun 2024 23:50:10 +0200 Subject: [PATCH 033/126] feat: Add createSchemaModel() method for mock memory db driver --- .../@db-driver/constants/memoryDB.mock.ts | 4 + packages/@db-driver/package.json | 7 + packages/@db-driver/tsconfig.json | 12 + .../utils/createSchemaModel.mock.test.ts | 473 ++++++++++++++++++ .../utils/createSchemaModel.mock.ts | 363 ++++++++++++++ packages/@green-stack-core/global.d.ts | 2 +- packages/@green-stack-core/package.json | 2 +- packages/@green-stack-core/preload.test.ts | 15 +- .../schemas/createGraphSchemaDefs.ts | 5 + packages/@green-stack-core/schemas/index.ts | 37 ++ .../schemas/tests/schemas.test.ts | 53 +- .../scripts/helpers/scriptUtils.test.ts | 8 +- .../transpiledWorkspaces.generated.js | 1 + 13 files changed, 968 insertions(+), 14 deletions(-) create mode 100644 packages/@db-driver/constants/memoryDB.mock.ts create mode 100644 packages/@db-driver/package.json create mode 100644 packages/@db-driver/tsconfig.json create mode 100644 packages/@db-driver/utils/createSchemaModel.mock.test.ts create mode 100644 packages/@db-driver/utils/createSchemaModel.mock.ts diff --git a/packages/@db-driver/constants/memoryDB.mock.ts b/packages/@db-driver/constants/memoryDB.mock.ts new file mode 100644 index 0000000..e866b57 --- /dev/null +++ b/packages/@db-driver/constants/memoryDB.mock.ts @@ -0,0 +1,4 @@ + +/** --- Memory DB ------------------------------------------------------------------------------ */ +/** -i- Data stored in memory, will be wiped on process end or when garbage collected */ +export const memoryDB = {} as ObjectType>> diff --git a/packages/@db-driver/package.json b/packages/@db-driver/package.json new file mode 100644 index 0000000..c549886 --- /dev/null +++ b/packages/@db-driver/package.json @@ -0,0 +1,7 @@ +{ + "name": "@db/driver", + "version": "0.0.1", + "description": "Database Driver & types to create DB drivers with ease. Falls back to mock memory DB if no driver is provided.", + "scripts": {}, + "dependencies": {} +} \ No newline at end of file diff --git a/packages/@db-driver/tsconfig.json b/packages/@db-driver/tsconfig.json new file mode 100644 index 0000000..011d695 --- /dev/null +++ b/packages/@db-driver/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@app/core/tsconfig", + "include": [ + "**/*.ts", + "**/*.tsx", + "../../features/**/*.ts", + "../../features/**/*.tsx", + "../../features/@app-core/graphql-env.d.ts", + "../../packages/@green-stack-core/global.d.ts" + ], + "exclude": ["node_modules"] +} diff --git a/packages/@db-driver/utils/createSchemaModel.mock.test.ts b/packages/@db-driver/utils/createSchemaModel.mock.test.ts new file mode 100644 index 0000000..7038414 --- /dev/null +++ b/packages/@db-driver/utils/createSchemaModel.mock.test.ts @@ -0,0 +1,473 @@ +// @ts-ignore +import { test, expect } from 'bun:test' +import { createSchemaModel } from './createSchemaModel.mock' +import { z, schema } from '@green-stack/schemas' + +/* --- Schemas --------------------------------------------------------------------------------- */ + +const UserSchema = schema('User', { + id: z.string().uuid(), + name: z.string(), + email: z.string().email(), + age: z.number().int().optional(), + meta: schema('UserMeta', { + version: z.number().int().optional(), + }).optional(), +}) + +/* --- Tests ----------------------------------------------------------------------------------- */ + +test('createSchemaModel() creates a new schema model in the memory DB', async () => { + const UserModel = createSchemaModel(UserSchema) + // Check that the UserModel is created with the correct methods + expect(UserModel).toBeDefined() + expect(UserModel.insertOne).toBeDefined() + expect(UserModel.insertMany).toBeDefined() + expect(UserModel.findOne).toBeDefined() + expect(UserModel.findMany).toBeDefined() + expect(UserModel.updateOne).toBeDefined() + expect(UserModel.updateMany).toBeDefined() + expect(UserModel.deleteOne).toBeDefined() + expect(UserModel.deleteMany).toBeDefined() + expect(UserModel.insertOne).toBeInstanceOf(Function) + expect(UserModel.insertMany).toBeInstanceOf(Function) + expect(UserModel.findOne).toBeInstanceOf(Function) + expect(UserModel.findMany).toBeInstanceOf(Function) + expect(UserModel.updateOne).toBeInstanceOf(Function) + expect(UserModel.updateMany).toBeInstanceOf(Function) + expect(UserModel.deleteOne).toBeInstanceOf(Function) + expect(UserModel.deleteMany).toBeInstanceOf(Function) +}) + +test('createSchemaModel() creates a new schema model with DB driver methods attached', async () => { + const UserModel = createSchemaModel(UserSchema) + // Check that the UserModel has the correct methods attached + expect(UserModel.driver).toBeDefined() + expect(UserModel.driver.insertOne).toBeDefined() + expect(UserModel.driver.insertMany).toBeDefined() + expect(UserModel.driver.findOne).toBeDefined() + expect(UserModel.driver.findMany).toBeDefined() + expect(UserModel.driver.updateOne).toBeDefined() + expect(UserModel.driver.updateMany).toBeDefined() + expect(UserModel.driver.deleteOne).toBeDefined() + expect(UserModel.driver.deleteMany).toBeDefined() + expect(UserModel.driver.insertOne).toBeInstanceOf(Function) + expect(UserModel.driver.insertMany).toBeInstanceOf(Function) + expect(UserModel.driver.findOne).toBeInstanceOf(Function) + expect(UserModel.driver.findMany).toBeInstanceOf(Function) + expect(UserModel.driver.updateOne).toBeInstanceOf(Function) + expect(UserModel.driver.updateMany).toBeInstanceOf(Function) + expect(UserModel.driver.deleteOne).toBeInstanceOf(Function) + expect(UserModel.driver.deleteMany).toBeInstanceOf(Function) +}) + +test('Model.driver.insertOne() inserts a new record in memory', async () => { + const UserModel = createSchemaModel(UserSchema, 'User1') + const newUser = await UserModel.driver.insertOne({ + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }) + expect(newUser).toBeDefined() + expect(newUser.id).toBeDefined() + expect(newUser.name).toBe('Thorr') + expect(newUser.email).toBe('thorr@codinsonn.dev') +}) + +test('Model.driver.insertOne() throws if inserted record does not match schema', async () => { + const UserModel = createSchemaModel(UserSchema, 'User2') + // Check that we throw an error when inserting a record with invalid data + await expect(UserModel.driver.insertOne({})).rejects.toThrow() // Missing required fields + await expect(UserModel.driver.insertOne({ name: 'Thorr' })).rejects.toThrow() // Missing required field email + await expect(UserModel.driver.insertOne({ name: 'Thorr', email: '' })).rejects.toThrow() // Missing email + await expect(UserModel.driver.insertOne({ name: 'Thorr', email: 'thorr@codinsonn' })).rejects.toThrow() // Invalid email +}) + +test('Model.driver.insertMany() inserts multiple records in memory', async () => { + const UserModel = createSchemaModel(UserSchema, 'User3') + const newUsers = await UserModel.driver.insertMany([ + { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }, + { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + }, + ]) + // Check that we can insert multiple records + expect(newUsers).toBeDefined() + expect(newUsers).toHaveLength(2) + expect(newUsers[0].id).toBeDefined() + expect(newUsers[0].name).toBe('Thorr') + expect(newUsers[1].id).toBeDefined() + expect(newUsers[1].name).toBe('Thorr') + const newUsersResults = JSON.stringify(newUsers) + expect(newUsersResults).toContain('thorr@codinsonn.dev') + expect(newUsersResults).toContain('thorr@fullproduct.dev') +}) + +test('Model.driver.insertMany() throws if inserted records do not match schema', async () => { + const UserModel = createSchemaModel(UserSchema, 'User4') + // Check that we throw an error when inserting records with invalid data + await expect(UserModel.driver.insertMany([{}])).rejects.toThrow() // Missing required fields + await expect(UserModel.driver.insertMany([{ name: 'Thorr' }])).rejects.toThrow() // Missing required field email + await expect(UserModel.driver.insertMany([{ name: 'Thorr', email: '' }])).rejects.toThrow() // Missing email + await expect(UserModel.driver.insertMany([{ name: 'Thorr', email: 'thorr@codinsonn' }])).rejects.toThrow() // Invalid email +}) + +test('Model.driver.findOne() finds a record stored in memory', async () => { + const UserModel = createSchemaModel(UserSchema, 'User5') + const newUser = await UserModel.driver.insertOne({ + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }) + // Check that we can find the record by id + const foundById = await UserModel.driver.findOne({ id: newUser.id }) + expect(foundById).toBeDefined() + expect(foundById.id).toBe(newUser.id) + expect(foundById.name).toBe('Thorr') + expect(foundById.email).toBe('thorr@codinsonn.dev') + // Check that we can find the record by name + const foundByName = await UserModel.driver.findOne({ name: 'Thorr' }) + expect(foundByName).toBeDefined() + expect(foundByName.id).toBe(newUser.id) + expect(foundByName.name).toBe('Thorr') + expect(foundById.email).toBe('thorr@codinsonn.dev') + // Check that we can find the record by email + const foundByEmail = await UserModel.driver.findOne({ email: 'thorr@codinsonn.dev' }) + expect(foundByEmail).toBeDefined() + expect(foundByEmail.id).toBe(newUser.id) + expect(foundByEmail.name).toBe('Thorr') + expect(foundById.email).toBe('thorr@codinsonn.dev') + // Check that we return undefined when no record is found + const notFound = await UserModel.driver.findOne({ id: '123' }) + expect(notFound).toBeUndefined() +}) + +test('Model.driver.findMany() finds multiple records stored in memory', async () => { + const UserModel = createSchemaModel(UserSchema, 'User6') + const newUsers = await UserModel.driver.insertMany([ + { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }, + { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + }, + ]) + // Check that we can find multiple records by name + const foundByName = await UserModel.driver.findMany({ name: 'Thorr' }) + expect(foundByName).toBeDefined() + expect(foundByName).toHaveLength(2) + expect(foundByName[0].name).toBe('Thorr') + expect(foundByName[1].name).toBe('Thorr') + const foundByNameResults = JSON.stringify(foundByName) + expect(foundByNameResults).toContain('thorr@codinsonn.dev') + expect(foundByNameResults).toContain('thorr@fullproduct.dev') +}) + +test('Model.driver.updateOne() updates a record stored in memory', async () => { + const UserModel = createSchemaModel(UserSchema, 'User7') + const newUser = await UserModel.driver.insertOne({ + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }) + // Update the record + const query = { id: newUser.id } + const updatedUser = await UserModel.driver.updateOne(query, { email: 'thorr@fullproduct.dev' }) + expect(updatedUser).toBeDefined() + expect(updatedUser.id).toBe(newUser.id) + expect(updatedUser.name).toBe('Thorr') + expect(updatedUser.email).toBe('thorr@fullproduct.dev') +}) + +test('Model.driver.updateOne() with errorOnUnmatched: true throws if updated record does not match schema', async () => { + const UserModel = createSchemaModel(UserSchema, 'User8') + const newUser = await UserModel.driver.insertOne({ + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }) + // Check that we dont throw errors when calling .updateOne() valid data + await expect(() => UserModel.driver.updateOne({ id: newUser.id }, {})).not.toThrow() // Should be fine + await expect(() => UserModel.driver.updateOne({ id: newUser.id }, { name: 'Thor' })).not.toThrow() // Missing required field email + // @ts-ignore + await expect(() => UserModel.driver.updateOne({ id: newUser.id }, { id: 'should-be-immutable' }, true)).toThrow() + // Check that we throw an error when updating a record with invalid data + await expect(() => UserModel.driver.updateOne({ id: newUser.id }, { name: undefined }, true)).toThrow() // Not nullable or optional + await expect(() => UserModel.driver.updateOne({ id: newUser.id }, { name: 'Thorr', email: '' }, true)).toThrow() // Missing email + await expect(() => UserModel.driver.updateOne({ id: newUser.id }, { name: 'Thorr', email: 'thorr@codinsonn' }, true)).toThrow() // Invalid email + // Check that we don't throw an error when updating a record that doesn't exist + await expect(() => UserModel.driver.updateOne({ id: '' }, { name: 'Thorr' })).not.toThrow() +}) + +test('Model.driver.updateMany() updates multiple records stored in memory', async () => { + const UserModel = createSchemaModel(UserSchema, 'User9') + const newUsers = await UserModel.driver.insertMany([ + { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }, + { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + }, + ]) + // Check that we can update multiple records + const query = { name: 'Thorr' } + const updatedUsers = await UserModel.driver.updateMany(query, { name: 'Thor' }) + expect(updatedUsers).toBeDefined() + expect(updatedUsers).toHaveLength(2) + expect(updatedUsers[0].name).toBe('Thor') + expect(updatedUsers[1].name).toBe('Thor') +}) + +test('Model.driver.updateMany() with errorOnUnmatched: true throws if updated records do not match schema', async () => { + const UserModel = createSchemaModel(UserSchema, 'User10') + const newUsers = await UserModel.driver.insertMany([ + { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }, + { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + }, + ]) + // Check that we throw an error when updating records with invalid data + await expect(() => UserModel.driver.updateMany({ name: 'Thorr' }, { name: undefined }, true)).toThrow() // Not nullable or optional + await expect(() => UserModel.driver.updateMany({ name: 'Thorr' }, { name: 'Thorr', email: '' }, true)).toThrow() // Missing email + // @ts-ignore + await expect(() => UserModel.driver.updateMany({ name: 'Thorr' }, { id: 'should-be-immutable' }, true)).toThrow() + // Check that we don't throw errors when calling .updateMany() with valid data + await expect(() => UserModel.driver.updateMany({}, {})).not.toThrow() // Should be fine + await expect(() => UserModel.driver.updateMany({ name: 'Thorr' }, { name: 'Thor' })).not.toThrow() // Should be fine + // Check that we don't throw an error when updating records that don't exist + await expect(() => UserModel.driver.updateMany({ email: '' }, { name: 'Thorr' })).not.toThrow() +}) + +test('Model.driver.deleteOne() deletes a record stored in memory', async () => { + const UserModel = createSchemaModel(UserSchema, 'User11') + const newUsers = await UserModel.driver.insertMany([ + { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }, + { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + }, + ]) + // Check that we return the deleted record + const deletedUser = await UserModel.driver.deleteOne({ email: 'thorr@codinsonn.dev' }) + expect(deletedUser).toBeDefined() + expect(deletedUser.id).toBeDefined() + expect(deletedUser.name).toBe('Thorr') + expect(deletedUser.email).toBe('thorr@codinsonn.dev') + // Check that the record is no longer in the DB + const foundByEmail = await UserModel.driver.findOne({ email: 'thorr@codinsonn.dev' }) + expect(foundByEmail).toBeUndefined() + const foundMany = await UserModel.driver.findMany({ name: 'Thorr' }) + expect(foundMany).toBeDefined() + expect(foundMany).toHaveLength(1) + // Check that we don't throw an error when attempting to delete a record that doesn't exist + await expect(() => UserModel.driver.deleteOne({ email: '' })).not.toThrow() +}) + +test('Model.driver.deleteMany() deletes multiple records stored in memory', async () => { + const UserModel = createSchemaModel(UserSchema, 'User12') + const newUsers = await UserModel.driver.insertMany([ + { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }, + { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + }, + ]) + // Check that we return the deleted records + const deletedUsers = await UserModel.driver.deleteMany({ name: 'Thorr' }) + expect(deletedUsers).toBeDefined() + expect(deletedUsers).toHaveLength(2) + expect(deletedUsers[0].name).toBe('Thorr') + expect(deletedUsers[1].name).toBe('Thorr') + // Check that the records are no longer in the DB + const foundMany = await UserModel.driver.findMany({ name: 'Thorr' }) + expect(foundMany).toBeDefined() + expect(foundMany).toHaveLength(0) + // Check that we don't throw an error when attempting to delete records that don't exist + await expect(() => UserModel.driver.deleteMany({ email: '' })).not.toThrow() +}) + +test('Model.driver.deleteMany() returns an empty array by default if no records are found', async () => { + const UserModel = createSchemaModel(UserSchema, 'User13') + const newUsers = await UserModel.driver.insertMany([ + { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }, + { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + }, + ]) + // Check that we return an empty array when no records are found + const deletedUsers = await UserModel.driver.deleteMany({ name: 'Thor' }) + expect(deletedUsers).toBeDefined() + expect(deletedUsers).toHaveLength(0) +}) + +test('Model query filters support logical $and, $or, $nor & $not operators', async () => { + const UserModel = createSchemaModel(UserSchema, 'User14') + const newUsers = await UserModel.driver.insertMany([ + { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }, + { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + }, + ]) + // Check that we can use the $and operator + const foundByAnd = await UserModel.driver.findMany({ + $and: [{ name: 'Thorr' }, { email: 'thorr@codinsonn.dev' }], + }) + expect(foundByAnd).toBeDefined() + expect(foundByAnd).toHaveLength(1) + expect(foundByAnd[0].name).toBe('Thorr') + expect(foundByAnd[0].email).toBe('thorr@codinsonn.dev') + // Check that we can use the $or operator + const foundByOr = await UserModel.driver.findMany({ + $or: [{ email: 'thorr@fullproduct.dev' }, { email: 'thorr@codinsonn.dev' }], + }) + expect(foundByOr).toBeDefined() + expect(foundByOr).toHaveLength(2) + const foundByOrResults = JSON.stringify(foundByOr) + expect(foundByOrResults).toContain('thorr@fullproduct.dev') + expect(foundByOrResults).toContain('thorr@codinsonn.dev') + // Check that we can use the $nor operator + const foundByNor = await UserModel.driver.findMany({ + $nor: [{ email: 'thorr@fullproduct.dev' }, { name: '' }], + }) + expect(foundByNor).toBeDefined() + expect(foundByNor).toHaveLength(1) + const foundByNorResults = JSON.stringify(foundByNor) + expect(foundByNorResults).toContain('thorr@codinsonn.dev') + // Check that we can use the $not operator + const foundByNot = await UserModel.driver.findMany({ + $not: { name: 'Thorr' }, + }) + expect(foundByNot).toBeDefined() + expect(foundByNot).toHaveLength(0) +}) + +test('Model query filters support conditional field operators $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin', async () => { + const UserModel = createSchemaModel(UserSchema, 'User15') + const newUsers = await UserModel.driver.insertMany([ + { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + age: 30, + }, + { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + age: 32, + }, + ]) + // Check that we can use the $eq operator + const foundByEq = await UserModel.driver.findMany({ + name: { $eq: 'Thorr' }, + }) + expect(foundByEq).toBeDefined() + expect(foundByEq).toHaveLength(2) + const foundByEqResults = JSON.stringify(foundByEq) + expect(foundByEqResults).toContain('thorr@codinsonn.dev') + expect(foundByEqResults).toContain('thorr@fullproduct.dev') + // Check that we can use the $ne operator + const foundByNe = await UserModel.driver.findMany({ + email: { $ne: 'thorr@codinsonn.dev' }, + }) + expect(foundByNe).toBeDefined() + expect(foundByNe).toHaveLength(1) + expect(foundByNe[0].email).toBe('thorr@fullproduct.dev') + // Check that we can use the $gt operator + const foundByGt = await UserModel.driver.findMany({ + age: { $gt: 30 }, + }) + expect(foundByGt).toBeDefined() + expect(foundByGt).toHaveLength(1) + expect(foundByGt[0].age).toBe(32) + expect(foundByGt[0].email).toBe('thorr@fullproduct.dev') + // Check that we can use the $gte operator + const foundByGte = await UserModel.driver.findMany({ + age: { $gte: 32 }, + }) + expect(foundByGte).toBeDefined() + expect(foundByGte).toHaveLength(1) + expect(foundByGte[0].age).toBe(32) + expect(foundByGte[0].email).toBe('thorr@fullproduct.dev') + // Check that we can use the $lt operator + const foundByLt = await UserModel.driver.findMany({ + age: { $lt: 32 }, + }) + expect(foundByLt).toBeDefined() + expect(foundByLt).toHaveLength(1) + expect(foundByLt[0].age).toBe(30) + expect(foundByLt[0].email).toBe('thorr@codinsonn.dev') + // Check that we can use the $lte operator + const foundByLte = await UserModel.driver.findMany({ + age: { $lte: 30 }, + }) + expect(foundByLte).toBeDefined() + expect(foundByLte).toHaveLength(1) + expect(foundByLte[0].age).toBe(30) + expect(foundByLte[0].email).toBe('thorr@codinsonn.dev') + // Check that we can use the $in operator + const foundByIn = await UserModel.driver.findMany({ + age: { $in: [30, 31, 32] }, + }) + expect(foundByIn).toBeDefined() + expect(foundByIn).toHaveLength(2) + const foundByInResults = JSON.stringify(foundByIn) + expect(foundByInResults).toContain('thorr@codinsonn.dev') + expect(foundByInResults).toContain('thorr@fullproduct.dev') + // Check that we can use the $nin operator + const foundByNin = await UserModel.driver.findMany({ + age: { $nin: [31] }, + }) + expect(foundByNin).toBeDefined() + expect(foundByNin).toHaveLength(2) + const foundByNinResults = JSON.stringify(foundByNin) + expect(foundByNinResults).toContain('thorr@codinsonn.dev') + expect(foundByNinResults).toContain('thorr@fullproduct.dev') +}) + +test("Model query filters support nested fields", async () => { + const UserModel = createSchemaModel(UserSchema, 'User16') + const newUsers = await UserModel.driver.insertMany([ + { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + meta: { + version: 1, + }, + }, + { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + meta: { + version: 2, + }, + }, + ]) + // Check that we can use nested fields in query filters + const foundByNested = await UserModel.driver.findMany({ + meta: { version: 1 }, + }) + expect(foundByNested).toBeDefined() + expect(foundByNested).toHaveLength(1) + expect(foundByNested[0].email).toBe('thorr@codinsonn.dev') +}) diff --git a/packages/@db-driver/utils/createSchemaModel.mock.ts b/packages/@db-driver/utils/createSchemaModel.mock.ts new file mode 100644 index 0000000..1654387 --- /dev/null +++ b/packages/@db-driver/utils/createSchemaModel.mock.ts @@ -0,0 +1,363 @@ +// @ts-ignore +import { v4 as uuidV4 } from 'uuid' +import { z } from '@green-stack/schemas' +import { warnOnce } from '@green-stack/utils/commonUtils' +import { getProperty } from '@green-stack/utils/objectUtils' +import { memoryDB } from '../constants/memoryDB.mock' + +/* --- Constants ------------------------------------------------------------------------------- */ + +const LOGICAL_OPERATORS = ['$and', '$or', '$nor', '$not'] + +const QUERY_OPERATORS = ['$eq', '$ne', '$gt', '$gte', '$lt', '$lte', '$in', '$nin'] + +/* --- Types ----------------------------------------------------------------------------------- */ + +type QueryPrimitive = string | number | boolean | Date | null | undefined + +type QueryOperators = { + $eq?: T; + $ne?: T; + $gt?: T; + $gte?: T; + $lt?: T; + $lte?: T; + $in?: T[]; + $nin?: T[]; +} + +type LogicalOperators = { + $and?: QueryFilterType[]; + $or?: QueryFilterType[]; + $nor?: QueryFilterType[]; + $not?: QueryFilterType; +} + +type QueryFilterType = { + [P in keyof T]?: T[P] extends QueryPrimitive + ? (QueryOperators | T[P]) + : QueryFilterType +} & LogicalOperators + +/** --- createSchemaModel() -------------------------------------------------------------------- */ +/** -i- Creates a schema model to interface with the mock memory DB */ +export const createSchemaModel = < + S extends z.ZodRawShape, + DataType extends Prettify> & { id: string }> = Prettify> & { id: string }>, // prettier-ignore + QueryFilter extends QueryFilterType = QueryFilterType, // prettier-ignore +>( + schema: z.ZodObject, + modelName?: string, +) => { + // Apply the schema name as the model key? + const schemaMeta = schema.introspect() + const modelKey = (modelName || schemaMeta.name) as string + + // Check if the model already exists in memory DB + if (memoryDB[modelKey]) { + warnOnce(`-!- Model "${modelKey}" already exists in memory DB. Skipping recreation from createSchemaModel()`) // prettier-ignore + } + + /** --- matchesCondition() ----------------------------------------------------------------- */ + /** -i- Checks whether mongo-like condition matching keys `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$in`, `$nin` match the query */ + const matchesCondition = (value: DataType[keyof DataType], condition: QueryFilter[keyof QueryFilter]): boolean => { + // Handle query operators + const isValidCondition = typeof condition === 'object' && condition !== null + if (isValidCondition) { + return Object.entries(condition).every(([operator, operatorValue]) => { + if (operator === '$eq') return value === operatorValue + if (operator === '$ne') return value !== operatorValue + if (operator === '$gt') return value > operatorValue + if (operator === '$gte') return value >= operatorValue + if (operator === '$lt') return value < operatorValue + if (operator === '$lte') return value <= operatorValue + if (operator === '$in') return operatorValue.includes(value) + if (operator === '$nin') return !operatorValue.includes(value) + throw new Error(`Unsupported condition operator in query: ${JSON.stringify(condition)}`) + }) + } + // Handle simple value comparison + // @ts-ignore + return value === condition + } + + /** --- handleLogicalOperators() ----------------------------------------------------------- */ + /** -i- Checks whether mongo-like logical query keys `$and`, `$or`, `$nor` and `$not` match the query */ + const handleLogicalOperators = (record: DataType, operator: string, conditions: QueryFilter[]): boolean => { + switch (operator) { + case '$and': + return conditions.every((condition: QueryFilter) => matchesQuery(record, condition)) + case '$or': + return conditions.some((condition: QueryFilter) => matchesQuery(record, condition)) + case '$nor': + return !conditions.some((condition: QueryFilter) => matchesQuery(record, condition)) + case '$not': + return !matchesQuery(record, conditions as unknown as QueryFilter) + default: + throw new Error(`Unsupported logical operator "${operator}" in query`) + } + } + + /** --- matchesQuery() --------------------------------------------------------------------- */ + /** -i- Checks if a given record in the collection matches the query params */ + const matchesQuery = (record: DataType, query: QueryFilter): boolean => { + return Object.entries(query).every(([key, value]) => { + if (LOGICAL_OPERATORS.includes(key)) { + return handleLogicalOperators(record, key, value as QueryFilter[]) + } else { + const fieldValue = getProperty(record, key) as DataType[keyof DataType] + const queryValue = value as QueryFilter[keyof QueryFilter] + // Check if it's a nested query filter or a field operator + const isNestedQuery = typeof queryValue === 'object' && queryValue !== null && !Array.isArray(queryValue) + const isFieldOperator = isNestedQuery && Object.keys(queryValue).some((operator) => { + return QUERY_OPERATORS.includes(operator) + }) + // Handle nested query filters + if (isNestedQuery && !isFieldOperator) { + return matchesQuery(fieldValue as DataType, queryValue as QueryFilter) + } + // Handle field operators & simple value comparison + return matchesCondition(fieldValue, queryValue) + } + }) + } + + /** --- insertOne() ------------------------------------------------------------------------ */ + /** -i- Create a new record in the collection */ + const insertOne = async (record: Partial) => { + memoryDB[modelKey] = memoryDB[modelKey] || {} + try { + // Generate a new ID if one is not provided + const id = record.id || uuidV4() + const newRecord = { ...record, id } + // Create a new model key if it does not exist (anymore) + // Check that the record to insert is valid + schema.parse(schema.applyDefaults(newRecord)) + // Check that the ID is unique + if (memoryDB[modelKey] && memoryDB[modelKey][id]) { + throw new Error(`Record with ID "${id}" already exists in model "${modelKey}"`) + } + // Insert the record into the memory DB + memoryDB[modelKey][id] = newRecord + // Return the inserted record + return memoryDB[modelKey][id] as Prettify + } catch (error: any$FixMe) { + throw new Error(`Failed to insert record into "${modelKey}" collection: ${error.message}`) // prettier-ignore + } + } + + /** --- insertMany() ----------------------------------------------------------------------- */ + /** -i- Create multiple records in the collection */ + const insertMany = async (records: Partial[]) => { + memoryDB[modelKey] = memoryDB[modelKey] || {} + try { + // Generate new IDs for records that don't have them + const newRecords = records.map((record) => { + const id = record.id || uuidV4() + return { ...record, id } + }) + // Check that the records to insert are valid + newRecords.forEach((record) => { + schema.parse(schema.applyDefaults(record)) + }) + // Check that all IDs are unique + newRecords.forEach((record) => { + if (memoryDB[modelKey] && memoryDB[modelKey][record.id]) { + throw new Error(`Record with ID "${record.id}" already exists in model "${modelKey}"`) // prettier-ignore + } + }) + // Insert the records into the memory DB + newRecords.forEach((record) => { + memoryDB[modelKey][record.id] = record + }) + // Return the inserted records + return newRecords as Prettify[] + } catch (error: any$FixMe) { + throw new Error(`Failed to insert records into "${modelKey}" collection: ${error.message}`) // prettier-ignore + } + } + + /** --- findOne() -------------------------------------------------------------------------- */ + /** -i- Finds a single record in the collection based on a query filter */ + const findOne = async (query: QueryFilter) => { + memoryDB[modelKey] = memoryDB[modelKey] || {} + try { + // Find the record in the memory DB + const result = Object.values(memoryDB[modelKey]).find((record) => { + return matchesQuery(record as DataType, query) + }) + // Return the found record + return result as DataType + } catch (error: any$FixMe) { + throw new Error(`Failed to find record in "${modelKey}" collection: ${error.message}`) + } + } + + /** --- findMany() -------------------------------------------------------------------------- */ + /** -i- Finds multiple records in the collection based on a query filter */ + const findMany = async (query: QueryFilter) => { + memoryDB[modelKey] = memoryDB[modelKey] || {} + try { + // Find the records in the memory DB + const result = Object.values(memoryDB[modelKey]).filter((record) => { + return matchesQuery(record as DataType, query) + }) + // Return the found records + return result as DataType[] + } catch (error: any$FixMe) { + throw new Error(`Failed to find records in "${modelKey}" collection: ${error.message}`) + } + } + + /** --- updateOne() ------------------------------------------------------------------------ */ + /** -i- Update a record in the collection */ + const updateOne = async ( + query: QueryFilter, + fieldUpdates: Prettify>>, + errorOnUnmatched = false, + ) => { + memoryDB[modelKey] = memoryDB[modelKey] || {} + let recordId = '' + try { + // Find the record to update + const recordToUpdate = await findOne(query) as DataType + if (!recordToUpdate && errorOnUnmatched) { + throw new Error(`No record found to update in "${modelKey}" collection`) + } else if (!recordToUpdate) { + return recordToUpdate + } + // Merge the new record data with the existing record + const updatedRecord = { ...recordToUpdate, ...fieldUpdates } as DataType + // Check that we're not trying to update the ID + if (recordToUpdate.id !== updatedRecord.id) { + recordId = recordToUpdate.id as string + throw new Error(`Cannot update a record's ID. Error while updating record with ID ${recordToUpdate.id} in "${modelKey}" collection`) // prettier-ignore + } + // Check that the updated record is valid + schema.parse(schema.applyDefaults(updatedRecord)) + // Update the record in the memory DB + memoryDB[modelKey][updatedRecord.id as string] = updatedRecord + // Return the updated record + return memoryDB[modelKey][updatedRecord.id as string] as DataType + } catch (error: any$FixMe) { + if (recordId) throw new Error(`Error while updating record with ID ${recordId} in "${modelKey}" collection: ${error.message}`) // prettier-ignore + else throw new Error(`Failed to update record in "${modelKey}" collection: ${error.message}`) // prettier-ignore + } + } + + /** --- updateMany() ----------------------------------------------------------------------- */ + /** -i- Update multiple records in the collection */ + const updateMany = async ( + query: QueryFilter, + fieldUpdates: Prettify>>, + errorOnUnmatched = false, + ) => { + memoryDB[modelKey] = memoryDB[modelKey] || {} + try { + // Find the records to update + const recordsToUpdate = await findMany(query) + if (!recordsToUpdate.length && errorOnUnmatched) { + throw new Error(`No records found to update in "${modelKey}" collection`) + } else if (!recordsToUpdate.length) { + return recordsToUpdate + } + // Update each record + const updatedRecords = recordsToUpdate.map((record) => { + const updatedRecord = { ...record, ...fieldUpdates } as DataType + // Check that the updated record is valid + schema.parse(schema.applyDefaults(updatedRecord)) + // Check that we're not trying to update the ID + if (record.id !== updatedRecord.id) { + throw new Error(`Cannot update a record's ID. Error while updating record with ID ${record.id} in "${modelKey}" collection`) // prettier-ignore + } + // Update the record in the memory DB + memoryDB[modelKey][updatedRecord.id as string] = updatedRecord + return updatedRecord + }) + // Return the updated records + return updatedRecords + } catch (error: any$FixMe) { + throw new Error(`Failed to update records in "${modelKey}" collection: ${error.message}`) + } + } + + /** --- deleteOne() ------------------------------------------------------------------------ */ + /** -i- Removes a single record from the collection */ + const deleteOne = async (query: QueryFilter, errorOnUnmatched = false) => { + memoryDB[modelKey] = memoryDB[modelKey] || {} + try { + // Find the record to delete + const recordToDelete = await findOne(query) as DataType + if (!recordToDelete && errorOnUnmatched) { + throw new Error(`No record found to delete in "${modelKey}" collection`) + } else if (!recordToDelete) { + return recordToDelete + } + // Delete the record from the memory DB + delete memoryDB[modelKey][recordToDelete.id as string] + // Return the deleted record + return recordToDelete + } catch (error: any$FixMe) { + throw new Error(`Failed to delete record from "${modelKey}" collection: ${error.message}`) + } + } + + /** --- deleteMany() ----------------------------------------------------------------------- */ + /** -i- Removes multiple records from the collection */ + const deleteMany = async (query: QueryFilter, errorOnUnmatched = false) => { + memoryDB[modelKey] = memoryDB[modelKey] || {} + try { + // Find the records to delete + const recordsToDelete = await findMany(query) + if (!recordsToDelete.length && errorOnUnmatched) { + throw new Error(`No records found to delete in "${modelKey}" collection`) + } else if (!recordsToDelete.length) { + return recordsToDelete + } + // Delete the records from the memory DB + recordsToDelete.forEach((record) => { + delete memoryDB[modelKey][record.id as string] + }) + // Return the deleted records + return recordsToDelete + } catch (error: any$FixMe) { + throw new Error(`Failed to delete records from "${modelKey}" collection: ${error.message}`) + } + } + + /* --- Return Model ------------------------------------------------------------------------ */ + + const driverMethods = { + insert: insertOne, + insertOne, + insertMany, + find: findOne, + findOne, + findMany, + update: updateOne, + updateOne, + updateMany, + delete: deleteOne, + deleteOne, + deleteMany, + // - Aliases - + create: insertOne, + createOne: insertOne, + createMany: insertMany, + read: findOne, + readOne: findOne, + readMany: findMany, + modify: updateOne, + modifyOne: updateOne, + modifyMany: updateMany, + remove: deleteOne, + removeOne: deleteOne, + removeMany: deleteMany, + // - Model meta - + _data: undefined as unknown as DataType, + } + + return Object.assign(driverMethods, { + driver: driverMethods + }) +} diff --git a/packages/@green-stack-core/global.d.ts b/packages/@green-stack-core/global.d.ts index 25bfe81..49f7a72 100644 --- a/packages/@green-stack-core/global.d.ts +++ b/packages/@green-stack-core/global.d.ts @@ -26,7 +26,7 @@ type ExtractRouteParams = Partial = { [K in keyof T]: T[K] extends Object ? Prettify : T[K] -} +} & {} type PrettifySingleKeyRecord = T extends Record ? K extends keyof T diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index 38c1be7..e99ec78 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -23,6 +23,6 @@ "collect:resolvers": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/collect-resolvers.ts", "collect:generators": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/collect-generators.ts", "link:routes": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/link-routes.ts", - "test": "bun test --preload ./preload.test.ts --verbose" + "test": "cd ../../ && bun test --tsconfig-override ./packages/@green-stack-core/tsconfig.json --preload ./packages/@green-stack-core/preload.test.ts --verbose" } } diff --git a/packages/@green-stack-core/preload.test.ts b/packages/@green-stack-core/preload.test.ts index 56ca135..6cca9a1 100644 --- a/packages/@green-stack-core/preload.test.ts +++ b/packages/@green-stack-core/preload.test.ts @@ -6,25 +6,26 @@ import { mock } from 'bun:test' // -i- We need to mock the tsConfig paths for esbuild-register to work // -i- ... as it doesn't have the same path resolution as typescript. -const featureTsConfigs = glob.sync('../../features/**/tsconfig.json') -const packageTsConfigs = glob.sync('../../packages/**/tsconfig.json') +const featureTsConfigs = glob.sync('./features/**/tsconfig.json') +const packageTsConfigs = glob.sync('./packages/**/tsconfig.json') const relevantTsConfigs = [...featureTsConfigs, ...packageTsConfigs] relevantTsConfigs.forEach(async (tsConfigPath) => { - const tsConfig = await import(tsConfigPath) + const actualTsConfigPath = tsConfigPath.replace('./', '../../') + const tsConfig = await import(actualTsConfigPath) const tsConfigPathAliases = tsConfig.compilerOptions?.paths || {} // @ts-ignore Object.entries(tsConfigPathAliases).forEach(([aliasKey, [aliasedPath]]) => { // Aliases to single files if (!aliasKey.includes('*')) mock.module(aliasKey, () => import(aliasedPath)) // Wildcard * aliases to multiple files if (aliasKey.includes('*')) { - const normalizedAliasKey = aliasKey.replace('/*', '/') const [importPathBase] = aliasedPath.split('*') - const aliasGlob = aliasedPath.replace('*', '**/*.{ts,tsx}') + const aliasGlob = aliasedPath.replace('*', '**/*.{ts,tsx}').replace('../../', './') const aliasedPaths = glob.sync(aliasGlob) aliasedPaths.forEach((file) => { - const modulePathFromAlias = file.split(importPathBase)[1]?.replace('.tsx', '').replace('.ts', '') + const actualFilePath = file.replace('./', '../../').replace('.tsx', '').replace('.ts', '') // prettier-ignore + const modulePathFromAlias = actualFilePath.split(importPathBase)[1]?.replace('.tsx', '').replace('.ts', '') // prettier-ignore + const normalizedAliasKey = aliasKey.replace('/*', '/').replace('./', '../../') const aliasFilePath = `${normalizedAliasKey}${modulePathFromAlias}` - const actualFilePath = file.replace('.tsx', '').replace('.ts', '') mock.module(aliasFilePath, () => import(actualFilePath)) }) } diff --git a/packages/@green-stack-core/schemas/createGraphSchemaDefs.ts b/packages/@green-stack-core/schemas/createGraphSchemaDefs.ts index 43b2d08..4140d98 100644 --- a/packages/@green-stack-core/schemas/createGraphSchemaDefs.ts +++ b/packages/@green-stack-core/schemas/createGraphSchemaDefs.ts @@ -83,6 +83,11 @@ export const createSchemaDefinition = ( if (fieldMeta.baseType === 'Number' && fieldMeta.isInt) { gqlType = 'Int' } + + // Handle ID - e.g. `someKey: ID!` + if (fieldMeta.baseType === 'String' && fieldMeta.isID) { + gqlType = 'ID' + } // Handle nested schemas - e.g. `someKey: SomeData!` if (graphqlType === 'Schema' && fieldMeta.schema) { diff --git a/packages/@green-stack-core/schemas/index.ts b/packages/@green-stack-core/schemas/index.ts index 773d2d7..db90be9 100644 --- a/packages/@green-stack-core/schemas/index.ts +++ b/packages/@green-stack-core/schemas/index.ts @@ -58,12 +58,25 @@ export type Metadata | any$Unknown[]> = { minValue?: number, maxValue?: number, isInt?: boolean, + isBase64?: boolean, + isEmail?: boolean, + isURL?: boolean, + isUUID?: boolean, + isDate?: boolean, + isDatetime?: boolean, + isTime?: boolean, + isIP?: boolean, literalValue?: any$Unknown, literalType?: 'string' | 'boolean' | 'number', literalBase?: BASE_TYPE, schema?: S, // only included when calling with .introspect(true) zodStruct?: z.ZodType & { _def: z.ZodTypeDef & { typeName: ZOD_TYPE } }, + // compatibility with other systems like databases & drivers + isID?: boolean, + isIndex?: boolean, + isUnique?: boolean, + isSparse?: boolean, } export type Meta$Schema = Metadata> @@ -92,6 +105,9 @@ declare module 'zod' { interface ZodType { metadata(): Record, addMeta(meta: Record): this + index(): this + unique(): this + sparse(): this example(exampleValue: T): this eg(exampleValue: T): this ex(exampleValue: T): this @@ -138,6 +154,18 @@ if (!ZodType.prototype.metadata) { }) } + ZodType.prototype.index = function () { + return this.addMeta({ isIndex: true }) + } + + ZodType.prototype.unique = function () { + return this.addMeta({ isUnique: true, isIndex: true }) + } + + ZodType.prototype.sparse = function () { + return this.addMeta({ isSparse: true, isIndex: true }) + } + ZodType.prototype.example = function (exampleValue) { return this.addMeta({ exampleValue }) } @@ -174,6 +202,15 @@ if (!ZodType.prototype.metadata) { const stringType = zodStruct as unknown as z.ZodString if (stringType.minLength) meta.minLength = stringType.minLength if (stringType.maxLength) meta.maxLength = stringType.maxLength + if (stringType.isBase64) meta.isBase64 = true + if (stringType.isEmail) meta.isEmail = true + if (stringType.isURL) meta.isURL = true + if (stringType.isUUID) meta.isUUID = true + if (stringType.isDate) meta.isDate = true + if (stringType.isDatetime) meta.isDatetime = true + if (stringType.isTime) meta.isTime = true + if (stringType.isIP) meta.isIP = true + if (meta.isUUID) meta.isID = true // Add number metadata if present const numberType = zodStruct as unknown as z.ZodNumber if (numberType.minValue) meta.minValue = numberType.minValue diff --git a/packages/@green-stack-core/schemas/tests/schemas.test.ts b/packages/@green-stack-core/schemas/tests/schemas.test.ts index 5e50769..87adf7a 100644 --- a/packages/@green-stack-core/schemas/tests/schemas.test.ts +++ b/packages/@green-stack-core/schemas/tests/schemas.test.ts @@ -131,7 +131,7 @@ test("Primitives z.string(), z.number(), z.boolean() & z.date() work as expected /* --- Subtypes -------------------------------------------------------------------------------- */ -test("Adds the .isInt metadata to z.number().int()", () => { +test("Adds isInt metadata to z.number().int()", () => { const Int = schema('Int', { int: z.number().int(), }) @@ -140,6 +140,57 @@ test("Adds the .isInt metadata to z.number().int()", () => { expect(metadata.schema?.int.isInt).toEqual(true) }) +test("Adds isBase64 / isEmail / isUUID / isURL / isDate metadata to z.string() subtypes", () => { + const StringSubtypes = schema('StringSubtypes', { + base64: z.string().base64(), + email: z.string().email(), + uuid: z.string().uuid(), + url: z.string().url(), + date: z.string().date(), + datetime: z.string().datetime(), + time: z.string().time(), + ip: z.string().ip(), + }) + const metadata = StringSubtypes.introspect() as Meta$Schema + // Check subtypes + expect(metadata.schema?.base64.isBase64).toEqual(true) + expect(metadata.schema?.email.isEmail).toEqual(true) + expect(metadata.schema?.uuid.isUUID).toEqual(true) + expect(metadata.schema?.url.isURL).toEqual(true) + expect(metadata.schema?.date.isDate).toEqual(true) + expect(metadata.schema?.datetime.isDatetime).toEqual(true) + expect(metadata.schema?.time.isTime).toEqual(true) + expect(metadata.schema?.ip.isIP).toEqual(true) + // Check that isID is set when isUUID is also true + expect(metadata.schema?.uuid.isID).toEqual(true) +}) + +/* --- Compatibility --------------------------------------------------------------------------- */ + +test("Adds isIndex: true to metadata when .index() is called", () => { + const Index = schema('Index', { + index: z.string().index(), + }) + const metadata = Index.introspect() as Meta$Schema + expect(metadata.schema?.index.isIndex).toEqual(true) +}) + +test("Adds isUnique: true to metadata when .unique() is called", () => { + const Unique = schema('Unique', { + unique: z.string().unique(), + }) + const metadata = Unique.introspect() as Meta$Schema + expect(metadata.schema?.unique.isUnique).toEqual(true) +}) + +test("Adds isSparse: true to metadata when .sparse() is called", () => { + const Sparse = schema('Sparse', { + sparse: z.string().sparse(), + }) + const metadata = Sparse.introspect() as Meta$Schema + expect(metadata.schema?.sparse.isSparse).toEqual(true) +}) + /* --- Advanced Types -------------------------------------------------------------------------- */ const AdvancedTypes = schema('AdvancedTypes', { diff --git a/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts b/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts index f839945..88f2986 100644 --- a/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts +++ b/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts @@ -115,7 +115,7 @@ test('parseWorkspaces() returns all workspace info and mappings', () => { workspacePathsMap, workspacePaths, workspacePackages - } = utils.parseWorkspaces('../../') + } = utils.parseWorkspaces('') // Verify we can retrieve the package.json config for the @green-stack/core workspace expect(workspaceConfigs['packages/@green-stack-core']).toBeDefined() expect(workspaceConfigs['packages/@green-stack-core'].name).toBe('@green-stack/core') @@ -130,7 +130,7 @@ test('parseWorkspaces() returns all workspace info and mappings', () => { }) test('getWorkspaceOptions() lists all available workspace path options for generators to use', () => { - const workspaceOptions = utils.getWorkspaceOptions() + const workspaceOptions = utils.getWorkspaceOptions('') // Check that the @green-stack/core package is omitted expect(workspaceOptions["packages/@green-stack-core -- importable from: '@green-stack/core'"]).toBeUndefined() // Check that the @app/core workspace is included @@ -138,7 +138,7 @@ test('getWorkspaceOptions() lists all available workspace path options for gener }) test('getAvailableSchemas() lists all available schemas in the codebase for generators to use', () => { - const schemaConfigMap = utils.getAvailableSchemas() + const schemaConfigMap = utils.getAvailableSchemas('') // Check that the healthCheck input & output schemas are included expect(schemaConfigMap['@app/core - HealthCheckArgs']).toBeDefined() expect(schemaConfigMap['@app/core - HealthCheckResponse']).toBeDefined() @@ -161,7 +161,7 @@ test('getAvailableSchemas() lists all available schemas in the codebase for gene }) test('getAvailableDataBridges() lists all available DataBridges in the codebase for generators to use', () => { - const dataBridgeConfigMap = utils.getAvailableDataBridges() + const dataBridgeConfigMap = utils.getAvailableDataBridges('') // Check that the healthCheck DataBridge is included expect(dataBridgeConfigMap['@app/core >>> healthCheck()']).toBeDefined() // Check that the config for the healthCheck DataBridge is correct diff --git a/packages/@registries/transpiledWorkspaces.generated.js b/packages/@registries/transpiledWorkspaces.generated.js index a673916..daa257f 100644 --- a/packages/@registries/transpiledWorkspaces.generated.js +++ b/packages/@registries/transpiledWorkspaces.generated.js @@ -1,5 +1,6 @@ // -i- Auto generated with "npx turbo run @green-stack/core#check:workspaces" module.exports = [ + "@db/driver", "@green-stack/core", "@app/registries", "@app/core" From e574d328ba15e1fe17e3e0cc946d34570617826f Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 28 Jun 2024 17:42:39 +0200 Subject: [PATCH 034/126] feat: Add mock db driver & collect:drivers scripts --- features/@app-core/appConfig.ts | 5 + features/@app-core/models/Settings.model.ts | 21 ++ .../resolvers/healthCheck.resolver.ts | 43 ++++- features/@app-core/tsconfig.json | 3 + package-lock.json | 1 + package.json | 2 + packages/@db-driver/drivers/mock.db.ts | 11 ++ packages/@db-driver/index.ts | 14 ++ packages/@db-driver/models.ts | 3 + packages/@db-driver/package.json | 7 +- packages/@db-driver/scripts/collect-models.ts | 96 ++++++++++ .../utils/createSchemaModel.mock.ts | 3 + .../@db-driver/utils/validateDriver.db.ts | 21 ++ packages/@green-stack-core/package.json | 12 +- .../scripts/collect-drivers.ts | 180 ++++++++++++++++++ .../scripts/collect-resolvers.ts | 2 +- .../scripts/helpers/scriptUtils.ts | 9 + .../@green-stack-core/utils/arrayUtils.ts | 4 +- packages/@registries/drivers.config.ts | 21 ++ packages/@registries/drivers.generated.ts | 14 ++ packages/@registries/models.generated.ts | 20 ++ turbo.json | 15 +- 22 files changed, 495 insertions(+), 12 deletions(-) create mode 100644 features/@app-core/models/Settings.model.ts create mode 100644 packages/@db-driver/drivers/mock.db.ts create mode 100644 packages/@db-driver/index.ts create mode 100644 packages/@db-driver/models.ts create mode 100644 packages/@db-driver/scripts/collect-models.ts create mode 100644 packages/@db-driver/utils/validateDriver.db.ts create mode 100644 packages/@green-stack-core/scripts/collect-drivers.ts create mode 100644 packages/@registries/drivers.config.ts create mode 100644 packages/@registries/drivers.generated.ts create mode 100644 packages/@registries/models.generated.ts diff --git a/features/@app-core/appConfig.ts b/features/@app-core/appConfig.ts index e6c1e71..670904c 100644 --- a/features/@app-core/appConfig.ts +++ b/features/@app-core/appConfig.ts @@ -1,5 +1,6 @@ import Constants from 'expo-constants' import { Platform } from 'react-native' +import { DRIVER_OPTIONS, createDriverConfig } from '@app/registries/drivers.config' /* --- Notes ----------------------------------------------------------------------------------- */ @@ -33,6 +34,10 @@ export const appConfig = { graphURL: process.env.NEXT_PUBLIC_GRAPH_URL || process.env.EXPO_PUBLIC_GRAPH_URL || `${fallbackBaseURL}/api/graphql`, // prettier-ignore // - Secrets - appSecret: process.env.APP_SECRET || process.env.APP_SECRET, + // - Drivers - + drivers: createDriverConfig({ + db: DRIVER_OPTIONS.db.mockDB, + }), } as const /* --- Debug ----------------------------------------------------------------------------------- */ diff --git a/features/@app-core/models/Settings.model.ts b/features/@app-core/models/Settings.model.ts new file mode 100644 index 0000000..6818f6c --- /dev/null +++ b/features/@app-core/models/Settings.model.ts @@ -0,0 +1,21 @@ +import { z, schema } from '@green-stack/schemas' +import { createSchemaModel } from '@db/driver' + +/* --- Schema ---------------------------------------------------------------------------------- */ + +export const Setting = schema('Setting', { + key: z.string().addMeta({ isID: true }), + value: z.any() +}) + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type Setting = z.infer + +/* --- Model ----------------------------------------------------------------------------------- */ + +export const SettingsModel = createSchemaModel(Setting) + +/* --- Drivers --------------------------------------------------------------------------------- */ + +export const driverModel = SettingsModel.driver diff --git a/features/@app-core/resolvers/healthCheck.resolver.ts b/features/@app-core/resolvers/healthCheck.resolver.ts index 270809a..06c5a51 100644 --- a/features/@app-core/resolvers/healthCheck.resolver.ts +++ b/features/@app-core/resolvers/healthCheck.resolver.ts @@ -3,6 +3,8 @@ import type { NextRequest } from 'next/server' import { createResolver } from '@green-stack/schemas/createResolver' import { appConfig } from '../appConfig' import { healthCheckBridge } from './healthCheck.bridge' +import { Settings } from '@db/models' +import { DRIVER_KEYS } from '@app/registries/drivers.config' /* --- Constants ------------------------------------------------------------------------------- */ @@ -29,6 +31,45 @@ export const healthCheck = createResolver(async ({ args, req, context }) => { const requestURL = r?.url || `${requestProtocol}://${requestHost}/api/health` const { baseURL, backendURL, apiURL, graphURL } = appConfig + // -- Context -- + + const extraContext = { requestContext: headerContext, drivers: {} } as ObjectType + + const addDriverStatus = ( + driverName: DRIVER_KEYS, + driverType = 'UNKNOWN', + status: 'OK' | 'NOK' | 'NONE', + ) => { + extraContext.drivers[driverName] = { + type: driverType, + status, + } + } + + // -- Test DB Driver -- + + try { + + const hasDbDriverSetting = !!(await Settings.findMany({ key: 'dbDriver' })).length + + if (!hasDbDriverSetting) { + await Settings.createOne({ + key: 'dbDriver', + value: appConfig.drivers.db, + }) + } + + const dbDriverSetting = await Settings.findOne({ key: 'dbDriver' }) + const dbDriverValue = dbDriverSetting?.value || 'NONE' + addDriverStatus('db', dbDriverValue, dbDriverValue ? 'OK' : 'NOK') + + } catch (error) { + + console.error('Error testing DB driver:', error) + addDriverStatus('db', appConfig.drivers.db, 'NOK') + + } + // -- Respond -- return { @@ -64,6 +105,6 @@ export const healthCheck = createResolver(async ({ args, req, context }) => { systemTotalMemory: OS.totalmem(), systemLoadAverage: OS.loadavg(), // CONTEXT - context: showContext ? headerContext : undefined, + context: showContext ? extraContext : undefined, } }, healthCheckBridge) diff --git a/features/@app-core/tsconfig.json b/features/@app-core/tsconfig.json index 6275c4b..7a52e65 100644 --- a/features/@app-core/tsconfig.json +++ b/features/@app-core/tsconfig.json @@ -42,6 +42,9 @@ "@green-stack/styles/*": ["../../packages/@green-stack-core/styles/*"], "@green-stack/navigation/*": ["../../packages/@green-stack-core/navigation/*"], "@green-stack/context/*": ["../../packages/@green-stack-core/context/*"], + "@green-stack/scripts/*": ["../../packages/@green-stack-core/scripts/*"], + "@db/models": ["../../packages/@db-driver/models.ts"], + "@db/mock": ["../../packages/@db-driver/drivers/mock.db.ts"] } }, "include": [ diff --git a/package-lock.json b/package-lock.json index 194efac..8bd325e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20556,6 +20556,7 @@ } }, "packages/@db-driver": { + "name": "@db/driver", "version": "0.0.1" }, "packages/@green-stack-core": { diff --git a/package.json b/package.json index 000fbf2..ac7dfff 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,8 @@ "check:workspaces": "npx turbo run @green-stack/core#check:workspaces", "collect:generators": "npx turbo run @green-stack/core#collect:generators", "collect:resolvers": "npx turbo run @green-stack/core#collect:resolvers", + "collect:drivers": "npx turbo run @green-stack/core#collect:drivers", + "collect:models": "npx turbo run @db/driver#collect:models", "link:routes": "npx turbo run @green-stack/core#link:routes", "add:dependencies": "npx turbo run @app-expo#add-dependencies", "env:local": "npx turbo run env:local", diff --git a/packages/@db-driver/drivers/mock.db.ts b/packages/@db-driver/drivers/mock.db.ts new file mode 100644 index 0000000..250226d --- /dev/null +++ b/packages/@db-driver/drivers/mock.db.ts @@ -0,0 +1,11 @@ +import { validateDriver } from '../utils/validateDriver.db' + +/* --- Import Driver Methods ------------------------------------------------------------------- */ + +import { createSchemaModel } from '../utils/createSchemaModel.mock' + +/* --- Driver Validation ----------------------------------------------------------------------- */ + +export const driver = validateDriver({ + createSchemaModel, +}) diff --git a/packages/@db-driver/index.ts b/packages/@db-driver/index.ts new file mode 100644 index 0000000..ccb52bc --- /dev/null +++ b/packages/@db-driver/index.ts @@ -0,0 +1,14 @@ +import { dbDrivers } from '@app/registries/drivers.generated' +import { appConfig } from '@app/config' + +/* --- Determine Main DB driver ---------------------------------------------------------------- */ + +const dbDriver = dbDrivers[appConfig.drivers.db] + +/* --- Re-export Driver Methods ---------------------------------------------------------------- */ + +export const createSchemaModel = dbDriver['createSchemaModel'] + +/* --- Export Driver Helpers ------------------------------------------------------------------- */ + +export { validateDriver } from './utils/validateDriver.db' diff --git a/packages/@db-driver/models.ts b/packages/@db-driver/models.ts new file mode 100644 index 0000000..97936fa --- /dev/null +++ b/packages/@db-driver/models.ts @@ -0,0 +1,3 @@ +/* --- Re-export Driver Models ----------------------------------------------------------------- */ + +export * from '@app/registries/models.generated' diff --git a/packages/@db-driver/package.json b/packages/@db-driver/package.json index c549886..dbc7aa8 100644 --- a/packages/@db-driver/package.json +++ b/packages/@db-driver/package.json @@ -2,6 +2,9 @@ "name": "@db/driver", "version": "0.0.1", "description": "Database Driver & types to create DB drivers with ease. Falls back to mock memory DB if no driver is provided.", - "scripts": {}, - "dependencies": {} + "dependencies": {}, + "scripts": { + "collect:models": "npm -w @green-stack/core run run:script ../../packages/@db-driver/scripts/collect-models.ts", + "collect:drivers": "npm -w @green-stack/core run run:script ../../packages/@green-stack-core/scripts/collect-drivers.ts" + } } \ No newline at end of file diff --git a/packages/@db-driver/scripts/collect-models.ts b/packages/@db-driver/scripts/collect-models.ts new file mode 100644 index 0000000..92f534d --- /dev/null +++ b/packages/@db-driver/scripts/collect-models.ts @@ -0,0 +1,96 @@ +import glob from 'glob' +import fs from 'fs' +import { addSetItem } from '@green-stack/utils/arrayUtils' +import { parseWorkspaces, replaceMany } from '@green-stack/scripts/helpers/scriptUtils' + +/* --- models.generated.ts --------------------------------------------------------------------- */ + +const modelsFileTemplate = `// -i- Auto generated with "npx turbo run @db/driver#collect-models" +{{modelImportLines}} + +/* --- Reexports ------------------------------------------------------------------------------- */ + +export { + {{modelModuleAliasLines}} +} + +/* --- Models ---------------------------------------------------------------------------------- */ + +const dbModels = { + {{modelModuleAliasLines}} +} + +/* --- Exports --------------------------------------------------------------------------------- */ + +export type DB_MODEL = keyof typeof dbModels + +export default dbModels +` + +/* --- Types ----------------------------------------------------------------------------------- */ + +type ModelRegistry = { + modelImportLines: string[], + modelAliasEntryLines: string[], +} + +/* --- collect-models -------------------------------------------------------------------------- */ + +const collectModels = () => { + try { + // Get all model file paths in /features/ & /packages/ workspaces + const featureModelPaths = glob.sync('../../features/**/models/*.model.ts') + const packageModelPaths = glob.sync('../../packages/**/models/*.model.ts') + const allModelPaths = [...featureModelPaths, ...packageModelPaths] + + // Figure out import paths from each workspace + const { workspaceImports } = parseWorkspaces() + + // Build overview of lines to build model registry files with + const modelRegistry = allModelPaths.reduce((acc, modelFilePath) => { + + // Skip if not a valid model + const modelFileContents = fs.readFileSync(modelFilePath, 'utf-8') + const isValidModel = modelFileContents.includes('export const driverModel = ') + if (!isValidModel) return acc + + // Figure out model workspace from filename + const workspaceEntry = Object.entries(workspaceImports).find(([pathKey]) => { + return modelFilePath.includes(pathKey) + }) + + // Figure out model name from filename + const [workspacePath, modelWorkspace] = workspaceEntry! + const innerModelFilePath = modelFilePath.split(workspacePath)[1] + const modelFilename = innerModelFilePath.replace('/models/', '') + const modelFileModuleName = modelFilename.replace('.tsx', '').replace('.ts', '') + const [modelName] = modelFileModuleName.split('.') + const modelImportPath = `${modelWorkspace}/models/${modelFileModuleName}` + const modelImportLine = `import { driverModel as ${modelName} } from '${modelImportPath}'` // prettier-ignore + const modelModuleAliasLine = ` ${modelName}` + + // Add to the accumulator + return { + modelImportLines: addSetItem(acc.modelImportLines, modelImportLine), + modelAliasEntryLines: addSetItem(acc.modelAliasEntryLines, modelModuleAliasLine), + } + + }, {} as ModelRegistry) + + // Build models.generated.ts file + const modelModuleAliasLines = modelRegistry.modelAliasEntryLines.join('\n,') + const modelImportLines = modelRegistry.modelImportLines.join('\n') + let modelsFileContent = modelsFileTemplate.replace('{{modelImportLines}}', modelImportLines) // prettier-ignore + modelsFileContent = replaceMany(modelsFileContent, [' {{modelModuleAliasLines}}'], modelModuleAliasLines) // prettier-ignore + fs.writeFileSync('../../packages/@registries/models.generated.ts', modelsFileContent) + + } catch (err) { + console.log(err) + console.error(err) + process.exit(1) + } +} + +/* --- init ------------------------------------------------------------------------------------ */ + +collectModels() diff --git a/packages/@db-driver/utils/createSchemaModel.mock.ts b/packages/@db-driver/utils/createSchemaModel.mock.ts index 1654387..afb9650 100644 --- a/packages/@db-driver/utils/createSchemaModel.mock.ts +++ b/packages/@db-driver/utils/createSchemaModel.mock.ts @@ -4,6 +4,7 @@ import { z } from '@green-stack/schemas' import { warnOnce } from '@green-stack/utils/commonUtils' import { getProperty } from '@green-stack/utils/objectUtils' import { memoryDB } from '../constants/memoryDB.mock' +import http from 'http' /* --- Constants ------------------------------------------------------------------------------- */ @@ -58,6 +59,8 @@ export const createSchemaModel = < warnOnce(`-!- Model "${modelKey}" already exists in memory DB. Skipping recreation from createSchemaModel()`) // prettier-ignore } + http.createServer() + /** --- matchesCondition() ----------------------------------------------------------------- */ /** -i- Checks whether mongo-like condition matching keys `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$in`, `$nin` match the query */ const matchesCondition = (value: DataType[keyof DataType], condition: QueryFilter[keyof QueryFilter]): boolean => { diff --git a/packages/@db-driver/utils/validateDriver.db.ts b/packages/@db-driver/utils/validateDriver.db.ts new file mode 100644 index 0000000..15c66fa --- /dev/null +++ b/packages/@db-driver/utils/validateDriver.db.ts @@ -0,0 +1,21 @@ +import { z } from '@green-stack/schemas' + +/* --- Schema ---------------------------------------------------------------------------------- */ + +export const DbDriverSchema = z.object({ + createSchemaModel: z.function().args( + z.instanceof(z.ZodObject), + z.string().optional(), + ), +}) + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type DbDriverShape = z.infer + +/** --- validateDriver() ----------------------------------------------------------------------- */ +/** -i- Validates whether a DB driver matches the expected methods */ +export const validateDriver = (driver: DB_DRIVER) => { + DbDriverSchema.parse(driver) + return driver +} diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index e99ec78..ec092f0 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -18,11 +18,13 @@ "typescript": "5.3.3" }, "scripts": { - "build:schema": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/build-graphql-schema.ts", - "check:workspaces": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/check-workspaces.ts", - "collect:resolvers": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/collect-resolvers.ts", - "collect:generators": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/collect-generators.ts", - "link:routes": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js ./scripts/link-routes.ts", + "run:script": "tsx --tsconfig ./tsconfig.scripts.json ./run-script.js", + "build:schema": "npm run run:script ./scripts/build-graphql-schema.ts", + "check:workspaces": "npm run run:script ./scripts/check-workspaces.ts", + "collect:resolvers": "npm run run:script ./scripts/collect-resolvers.ts", + "collect:generators": "npm run run:script ./scripts/collect-generators.ts", + "collect:drivers": "npm run run:script ../../packages/@green-stack-core/scripts/collect-drivers.ts", + "link:routes": "npm run run:script ./scripts/link-routes.ts", "test": "cd ../../ && bun test --tsconfig-override ./packages/@green-stack-core/tsconfig.json --preload ./packages/@green-stack-core/preload.test.ts --verbose" } } diff --git a/packages/@green-stack-core/scripts/collect-drivers.ts b/packages/@green-stack-core/scripts/collect-drivers.ts new file mode 100644 index 0000000..050294f --- /dev/null +++ b/packages/@green-stack-core/scripts/collect-drivers.ts @@ -0,0 +1,180 @@ +import glob from 'glob' +import fs from 'fs' +import { addSetItem } from '../utils/arrayUtils' +import { createDivider, parseWorkspaces, uppercaseFirstChar } from './helpers/scriptUtils' + +/* --- drivers.config.ts ----------------------------------------------------------------------- */ + +const driverTypeEntriesTemplate = [ +' {{driverType}}: {', +' {{driverTypeEnumEntries}}', +' }', +].join('\n') + +const driverConfigTemplate = `// -i- Auto generated with "npx turbo run @green-stack/core#collect-drivers" + +/* --- Constants ------------------------------------------------------------------------------- */ + +export const DRIVER_OPTIONS = { + {{driverTypeEntries}} +} as const + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type DRIVER_CONFIG = { + {{driverTypes}} +} + +export type DRIVER_KEYS = keyof typeof DRIVER_OPTIONS + +/* --- Helpers --------------------------------------------------------------------------------- */ + +export const createDriverConfig = (config: D) => config +` + +/* --- drivers.generated.ts -------------------------------------------------------------------- */ + +const driverTypeExportTemplate = `{{driverTypeDivider}} + +export const {{driverTypeExport}} = { + {{driverTypeOptionLines}} +}` + +const driversFileTemplate = `// -i- Auto generated with "npx turbo run @green-stack/core#collect-drivers" +{{driverImports}} + +{{driverTypeExports}} + +/* --- All Drivers ----------------------------------------------------------------------------- */ + +export const drivers = { + {{driverEntryLines}} +} +` + +/* --- Types ----------------------------------------------------------------------------------- */ + +type DriverConfig = { + driverImportLines: string[], + driverEntryLines: string[], + driverConfigTypeLines: string[], + drivers: { + [driverType: string]: { + driverType: string, + driverTypeKey: string, + driverTypeExportKey: string, + driverTypeEntryLines: string[], + driverConfigTypeEnumLines: string[], + } + } +} + +/* --- collect-drivers ------------------------------------------------------------------------- */ + +const collectDrivers = () => { + try { + // Get all driver file paths in /features/ & /packages/ workspaces + const featureDriverPaths = glob.sync('../../features/**/drivers/*.*.ts') + const packageDriverPaths = glob.sync('../../packages/**/drivers/*.*.ts') + const allDriverPaths = [...featureDriverPaths, ...packageDriverPaths] + + // Figure out import paths from each workspace + const { workspaceImports } = parseWorkspaces() + + // Build overview of lines to build driver registry files with + const driverConfig = allDriverPaths.reduce((acc, driverFilePath) => { + + // Skip if not a valid driver + const driverFileContents = fs.readFileSync(driverFilePath, 'utf-8') + const isValidDriver = driverFileContents.includes('export const driver = validateDriver(') + if (!isValidDriver) return acc + + // Figure out workspace info + const workspaceEntry = Object.entries(workspaceImports).find(([pathKey]) => { + return driverFilePath.includes(pathKey) + }) + + // Figure out driver type & name from filename + const [workspacePath, driverWorkspace] = workspaceEntry! + const innerDriverFilePath = driverFilePath.split(workspacePath)[1] + const driverFilename = innerDriverFilePath.replace('/drivers/', '') + const driverFileModuleName = driverFilename.replace('.tsx', '').replace('.ts', '') + const [driverName, driverType] = driverFileModuleName.split('.') + const driverImportPath = `${driverWorkspace}/drivers/${driverFileModuleName}` + const driverKey = driverName === 'mock' ? `mock-${driverType}` : driverName + const driverTypeKey = driverType.length <= 2 ? driverType.toUpperCase() : driverType + const driverEnumKey = driverName === 'mock' ? `mock${driverTypeKey}` : driverName + const driverTypeExportKey = `${driverType}Drivers` + const driverImportAlias = `${driverName}${uppercaseFirstChar(driverType)}Driver` + + // Turn these into lines of code + const driverImportLine = `import { driver as ${driverImportAlias} } from '${driverImportPath}'` + const driverTypeEntryLine = ` '${driverKey}': ${driverImportAlias},` + const driverEntryLine = ` ${driverType}: ${driverTypeExportKey},` + const driverConfigTypeLine = ` ${driverType}: typeof DRIVER_OPTIONS['${driverType}'][keyof typeof DRIVER_OPTIONS['${driverType}']]` + const driverConfigTypeEnumLine = ` ${driverEnumKey}: '${driverKey}',` + + // Add to the accumulator + return { + driverImportLines: addSetItem(acc.driverImportLines, driverImportLine), + driverEntryLines: addSetItem(acc.driverEntryLines, driverEntryLine), + driverConfigTypeLines: addSetItem(acc.driverConfigTypeLines, driverConfigTypeLine), + drivers: { + [driverType]: { + driverType, + driverTypeKey, + driverTypeExportKey, + driverTypeEntryLines: addSetItem( + acc.drivers?.[driverType]?.driverTypeEntryLines, + driverTypeEntryLine, + ), + driverConfigTypeEnumLines: addSetItem( + acc.drivers?.[driverType]?.driverConfigTypeEnumLines, + driverConfigTypeEnumLine, + ) + } + } + } + }, {} as DriverConfig) + + // Build drivers.config.ts type entries + const configTypeSections = Object.values(driverConfig.drivers).map((driverData) => { + const { driverType, driverConfigTypeEnumLines } = driverData + const driverTypeEnumEntries = driverConfigTypeEnumLines.join('\n') + const configSection = driverTypeEntriesTemplate.replace('{{driverType}}', driverType) + return configSection.replace(' {{driverTypeEnumEntries}}', driverTypeEnumEntries) + }).join('\n') + + // Build drivers.config.ts file + const driverTypes = driverConfig.driverConfigTypeLines.join('\n') + let driverConfigContent = driverConfigTemplate.replace(' {{driverTypeEntries}}', configTypeSections) // prettier-ignore + driverConfigContent = driverConfigContent.replace(' {{driverTypes}}', driverTypes) + fs.writeFileSync('../../packages/@registries/drivers.config.ts', driverConfigContent) + + // Build drivers.generated.ts subtype exports + const driverTypeExports = Object.values(driverConfig.drivers).map((driverData) => { + const { driverTypeKey, driverTypeExportKey, driverTypeEntryLines } = driverData + const driverTypeOptionLines = driverTypeEntryLines.join('\n') + let driverTypeExport = driverTypeExportTemplate.replace('{{driverTypeExport}}', driverTypeExportKey) // prettier-ignore + driverTypeExport = driverTypeExport.replace(' {{driverTypeOptionLines}}', driverTypeOptionLines) // prettier-ignore + return driverTypeExport.replace('{{driverTypeDivider}}', createDivider(driverTypeKey)) + }).join('\n') + + // Build drivers.generated.ts file + const driverEntryLines = driverConfig.driverEntryLines.join('\n') + const driverImports = driverConfig.driverImportLines.join('\n') + let driversFileContent = driversFileTemplate.replace('{{driverImports}}', driverImports) + driversFileContent = driversFileContent.replace('{{driverTypeExports}}', driverTypeExports) + driversFileContent = driversFileContent.replace(' {{driverEntryLines}}', driverEntryLines) // prettier-ignore + fs.writeFileSync('../../packages/@registries/drivers.generated.ts', driversFileContent) + + } catch (err) { + console.log(err) + console.error(err) + process.exit(1) + } +} + +/* --- init ------------------------------------------------------------------------------------ */ + +collectDrivers() diff --git a/packages/@green-stack-core/scripts/collect-resolvers.ts b/packages/@green-stack-core/scripts/collect-resolvers.ts index 64303af..7441853 100644 --- a/packages/@green-stack-core/scripts/collect-resolvers.ts +++ b/packages/@green-stack-core/scripts/collect-resolvers.ts @@ -11,7 +11,7 @@ const genMsg = `// -i- Auto generated with "npx turbo run @green-stack/core#coll const collectResolvers = () => { try { - // Get all resolver file paths in the next app's api folder + // Get all resolver file paths in /features/ & /packages/ workspace api folders const featureAPIRoutes = glob.sync('../../features/**/routes/api/**/route.ts').filter(excludeDirs) // prettier-ignore const packageAPIRoutes = glob.sync('../../packages/**/routes/api/**/route.ts').filter(excludeDirs) // prettier-ignore const allAPIRoutes = [...featureAPIRoutes, ...packageAPIRoutes] diff --git a/packages/@green-stack-core/scripts/helpers/scriptUtils.ts b/packages/@green-stack-core/scripts/helpers/scriptUtils.ts index 960a3db..143f1c4 100644 --- a/packages/@green-stack-core/scripts/helpers/scriptUtils.ts +++ b/packages/@green-stack-core/scripts/helpers/scriptUtils.ts @@ -25,6 +25,15 @@ export const matchMethods = (methods: HINTED_METHODS[], method: HINTED_METHODS) return methods.includes(method) } +/** --- createDivider() ------------------------------------------------------------------------ */ +/** -i- Creates a code divider that's always 100 chars wide */ +export const createDivider = (title: string, isDocDivider = false) => { + const baseTemplate = isDocDivider ? `/** --- ${title} */` : `/* --- ${title} */` + const remainingSpace = 100 - baseTemplate.length - 1 + const remainingDashes = '-'.repeat(remainingSpace) + return baseTemplate.replace(`${title} */`, `${title} ${remainingDashes} */`) +} + /** --- includesOption() ----------------------------------------------------------------------- */ /** -i- HoC to prefill a list of options that are checked against in the actual filter method * @example ``` diff --git a/packages/@green-stack-core/utils/arrayUtils.ts b/packages/@green-stack-core/utils/arrayUtils.ts index 693bfde..fdf52f3 100644 --- a/packages/@green-stack-core/utils/arrayUtils.ts +++ b/packages/@green-stack-core/utils/arrayUtils.ts @@ -1,14 +1,14 @@ /** --- addSetItem() --------------------------------------------------------------------------- */ /** -i- Adds an item to array if it doens't exist already */ -export const addSetItem = (arr: any$Unknown[], item: any$Unknown): any$Unknown[] => { +export const addSetItem = (arr: any$Unknown[] = [], item: any$Unknown): any$Unknown[] => { if (!arr.map((itm) => JSON.stringify(itm)).includes(JSON.stringify(item))) arr.push(item) return arr } /** --- arrFromSet() --------------------------------------------------------------------------- */ /** -i- Deduplicates items in an array */ -export const arrFromSet = (arr: any$Unknown[]): any$Unknown[] => Array.from(new Set(arr)) +export const arrFromSet = (arr: any$Unknown[] = []): any$Unknown[] => Array.from(new Set(arr)) /** --- createLookup() ------------------------------------------------------------------------- */ /** -i- Create a lookup object from an array of objects and a property key to index it for */ diff --git a/packages/@registries/drivers.config.ts b/packages/@registries/drivers.config.ts new file mode 100644 index 0000000..c497a42 --- /dev/null +++ b/packages/@registries/drivers.config.ts @@ -0,0 +1,21 @@ +// -i- Auto generated with "npx turbo run @green-stack/core#collect-drivers" + +/* --- Constants ------------------------------------------------------------------------------- */ + +export const DRIVER_OPTIONS = { + db: { + mockDB: 'mock-db', + } +} as const + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type DRIVER_CONFIG = { + db: typeof DRIVER_OPTIONS['db'][keyof typeof DRIVER_OPTIONS['db']] +} + +export type DRIVER_KEYS = keyof typeof DRIVER_OPTIONS + +/* --- Helpers --------------------------------------------------------------------------------- */ + +export const createDriverConfig = (config: D) => config diff --git a/packages/@registries/drivers.generated.ts b/packages/@registries/drivers.generated.ts new file mode 100644 index 0000000..4e3dfab --- /dev/null +++ b/packages/@registries/drivers.generated.ts @@ -0,0 +1,14 @@ +// -i- Auto generated with "npx turbo run @green-stack/core#collect-drivers" +import { driver as mockDbDriver } from '@db/driver/drivers/mock.db' + +/* --- DB -------------------------------------------------------------------------------------- */ + +export const dbDrivers = { + 'mock-db': mockDbDriver, +} + +/* --- All Drivers ----------------------------------------------------------------------------- */ + +export const drivers = { + db: dbDrivers, +} diff --git a/packages/@registries/models.generated.ts b/packages/@registries/models.generated.ts new file mode 100644 index 0000000..949cc61 --- /dev/null +++ b/packages/@registries/models.generated.ts @@ -0,0 +1,20 @@ +// -i- Auto generated with "npx turbo run @db/driver#collect-models" +import { driverModel as Settings } from '@app/core/models/Settings.model' + +/* --- Reexports ------------------------------------------------------------------------------- */ + +export { + Settings +} + +/* --- Models ---------------------------------------------------------------------------------- */ + +const dbModels = { + Settings +} + +/* --- Exports --------------------------------------------------------------------------------- */ + +export type DB_MODEL = keyof typeof dbModels + +export default dbModels diff --git a/turbo.json b/turbo.json index aaa28a0..c98bd17 100644 --- a/turbo.json +++ b/turbo.json @@ -38,7 +38,12 @@ "cache": false }, "@green-stack/core#build:schema": { - "dependsOn": ["@green-stack/core#collect:resolvers", "@green-stack/core#link:routes"], + "dependsOn": [ + "@green-stack/core#collect:resolvers", + "@green-stack/core#link:routes", + "@green-stack/core#collect:drivers", + "@db/driver#collect:models" + ], "outputs": ["**/schema.graphql", "**/schema.ts", "**/graphql-env.d.ts"], "inputs": [], "cache": true @@ -50,6 +55,14 @@ "dependsOn": ["@green-stack/core#collect:generators"], "cache": false }, + "@green-stack/core#collect:drivers": { + "dependsOn": ["@green-stack/core#check:workspaces"], + "cache": false + }, + "@db/driver#collect:models": { + "dependsOn": ["@green-stack/core#collect:drivers"], + "cache": false + }, "env:local": { "cache": false } From 44d103176db66c753e03d3e195652a01adcd0504 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Wed, 10 Jul 2024 15:21:16 +0200 Subject: [PATCH 035/126] feat: Added an "add-dependencies" script / generator --- features/@app-core/appConfig.ts | 5 +- features/@app-core/package.json | 17 ++- features/@app-core/tailwind.config.js | 2 +- features/@app-core/tailwind.theme.js | 2 +- features/@app-core/tsconfig.json | 2 +- package-lock.json | 134 +++++++++++++++++- package.json | 6 +- packages/@db-driver/package.json | 6 + .../generators/add-dependencies.ts | 75 ++++++++++ .../{gen-workspace.ts => add-workspace.ts} | 2 +- packages/@green-stack-core/global.d.ts | 1 + packages/@green-stack-core/package.json | 1 + .../scripts/check-workspaces.ts | 103 ++++++++++---- .../scripts/helpers/scriptUtils.ts | 11 +- packages/@registries/generators.generated.ts | 3 +- 15 files changed, 331 insertions(+), 39 deletions(-) create mode 100644 packages/@green-stack-core/generators/add-dependencies.ts rename packages/@green-stack-core/generators/{gen-workspace.ts => add-workspace.ts} (99%) diff --git a/features/@app-core/appConfig.ts b/features/@app-core/appConfig.ts index 670904c..007fefa 100644 --- a/features/@app-core/appConfig.ts +++ b/features/@app-core/appConfig.ts @@ -7,10 +7,13 @@ import { DRIVER_OPTIONS, createDriverConfig } from '@app/registries/drivers.conf // -i- Workpacke package '@green-stack/core' expects this file to be at '/features/app-core/appConfig.ts' // -i- Please keep it here to avoid issues -/* --- Computed Fallbacks ---------------------------------------------------------------------- */ +/* --- Flags ----------------------------------------------------------------------------------- */ export const isWebLocalhost = Platform.OS === 'web' && globalThis?.location?.hostname === 'localhost' export const isExpoWebLocal = isWebLocalhost && globalThis?.location?.port === '8081' + +/* --- Computed Fallbacks ---------------------------------------------------------------------- */ + export const fallbackExpoWebHost = isExpoWebLocal ? 'localhost' : '' export const expoDebuggerHost = Constants?.expoGoConfig?.debuggerHost || Constants.manifest2?.extra?.expoGo?.debuggerHost // prettier-ignore diff --git a/features/@app-core/package.json b/features/@app-core/package.json index 1dbc15b..f17bee9 100644 --- a/features/@app-core/package.json +++ b/features/@app-core/package.json @@ -9,11 +9,26 @@ "gql.tada": "^1.4.3", "graphql-tag": "^2.12.6", "graphql-type-json": "^0.3.2", - "nativewind": "^2.0.11" + "nativewind": "^2.0.11", + "react-native-svg": "^15.2.0" }, "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", "tailwindcss": "3.3.2", "typescript": "5.3.3" + }, + "stackConfig": { + "relatedWorkspaces": [ + "@green-stack/core", + "@app/registries", + "@app/core" + ], + "requiredEnvVars": [ + "NEXT_PUBLIC_BASE_URL", + "NEXT_PUBLIC_BACKEND_URL", + "NEXT_PUBLIC_API_URL", + "NEXT_PUBLIC_GRAPH_URL", + "APP_SECRET" + ] } } diff --git a/features/@app-core/tailwind.config.js b/features/@app-core/tailwind.config.js index 3bf8cee..0f2bac5 100644 --- a/features/@app-core/tailwind.config.js +++ b/features/@app-core/tailwind.config.js @@ -1,4 +1,4 @@ -const { universalTheme } = require('./tailwind.theme.cjs') +const { universalTheme } = require('./tailwind.theme.js') /** @type {import('tailwindcss').Config} */ module.exports = { diff --git a/features/@app-core/tailwind.theme.js b/features/@app-core/tailwind.theme.js index fdb93f5..f98eaa4 100644 --- a/features/@app-core/tailwind.theme.js +++ b/features/@app-core/tailwind.theme.js @@ -6,7 +6,7 @@ const universalTheme = { // -i- Reference this theme in the tailwind.config.js files in apps/expo, apps/next, features/app-core and other package or feature folders extend: { colors: { - primary: colors.green, + primary: colors.gray, }, } } diff --git a/features/@app-core/tsconfig.json b/features/@app-core/tsconfig.json index 7a52e65..fea6b42 100644 --- a/features/@app-core/tsconfig.json +++ b/features/@app-core/tsconfig.json @@ -52,7 +52,7 @@ "../../packages/@green-stack-core/global.d.ts", "appConfig.ts", "**/*.ts", - "**/*.tsx", + "**/*.tsx" ], "exclude": [ "node_modules" diff --git a/package-lock.json b/package-lock.json index 8bd325e..aa7eb91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -109,7 +109,8 @@ "gql.tada": "^1.4.3", "graphql-tag": "^2.12.6", "graphql-type-json": "^0.3.2", - "nativewind": "^2.0.11" + "nativewind": "^2.0.11", + "react-native-svg": "^15.2.0" }, "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", @@ -8957,6 +8958,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "node_modules/bplist-creator": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", @@ -9936,6 +9942,21 @@ "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/css-to-react-native": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", @@ -9959,6 +9980,17 @@ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -10312,6 +10344,57 @@ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dot-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", @@ -15974,6 +16057,17 @@ "node": ">=4" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/nullthrows": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", @@ -17288,6 +17382,44 @@ "react-native": "*" } }, + "node_modules/react-native-svg": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.2.0.tgz", + "integrity": "sha512-R0E6IhcJfVLsL0lRmnUSm72QO+mTqcAOM5Jb8FVGxJqX3NfJMlMP0YyvcajZiaRR8CqQUpEoqrY25eyZb006kw==", + "dependencies": { + "css-select": "^5.1.0", + "css-tree": "^1.1.3" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-svg/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/react-native-svg/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/react-native-svg/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==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-native-web": { "version": "0.19.11", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.19.11.tgz", diff --git a/package.json b/package.json index ac7dfff..fd7904b 100644 --- a/package.json +++ b/package.json @@ -24,14 +24,16 @@ "build": "npx turbo run build", "build:schema": "npx turbo run @green-stack/core#build:schema", "check:workspaces": "npx turbo run @green-stack/core#check:workspaces", + "check:workspaces:fix": "FIX_MODE=true npx turbo run @green-stack/core#check:workspaces", "collect:generators": "npx turbo run @green-stack/core#collect:generators", "collect:resolvers": "npx turbo run @green-stack/core#collect:resolvers", "collect:drivers": "npx turbo run @green-stack/core#collect:drivers", "collect:models": "npx turbo run @db/driver#collect:models", "link:routes": "npx turbo run @green-stack/core#link:routes", - "add:dependencies": "npx turbo run @app-expo#add-dependencies", + "add:dependencies": "npx turbo gen add-dependencies", + "add:workspace": "npx turbo gen add-workspace", "env:local": "npx turbo run env:local", - "gen": "turbo gen", + "gen": "npx turbo gen", "turbo:login": "npx turbo login", "turbo:link": "npx turbo link", "turbo:unlink": "npx turbo unlink" diff --git a/packages/@db-driver/package.json b/packages/@db-driver/package.json index dbc7aa8..c6a453b 100644 --- a/packages/@db-driver/package.json +++ b/packages/@db-driver/package.json @@ -6,5 +6,11 @@ "scripts": { "collect:models": "npm -w @green-stack/core run run:script ../../packages/@db-driver/scripts/collect-models.ts", "collect:drivers": "npm -w @green-stack/core run run:script ../../packages/@green-stack-core/scripts/collect-drivers.ts" + }, + "stackConfig": { + "relatedWorkspaces": [ + "@app/registries" + ], + "requiredEnvVars": [] } } \ No newline at end of file diff --git a/packages/@green-stack-core/generators/add-dependencies.ts b/packages/@green-stack-core/generators/add-dependencies.ts new file mode 100644 index 0000000..b6152d7 --- /dev/null +++ b/packages/@green-stack-core/generators/add-dependencies.ts @@ -0,0 +1,75 @@ +/* eslint-disable import/no-anonymous-default-export */ +import { PlopTypes } from '@turbo/gen' +import { parseWorkspaces } from '../scripts/helpers/scriptUtils' +import { execSync } from 'child_process' +import fs from 'fs' + +/* --- Disclaimer ------------------------------------------------------------------------------ */ + +// Learn more about Turborepo Generators at: +// https://turbo.build/repo/docs/core-concepts/monorepos/code-generation + +/* --- Constants ------------------------------------------------------------------------------- */ + +const { workspacePackages } = parseWorkspaces('./') + +/** --- Dependency Installer ------------------------------------------------------------------- */ +/** -i- Install Expo SDK compatible dependencies in your workspace of choice */ +export const registerDependencyGenerator = (plop: PlopTypes.NodePlopAPI) => { + plop.setGenerator('add-dependencies', { + description: 'Install Expo SDK compatible dependencies in your workspace of choice', + prompts: [ + { + type: 'list', + name: 'workspaceTarget', + message: 'Which workspace should we install the Expo SDK compatible versions in?', + choices: workspacePackages, + }, + { + type: 'input', + name: 'dependencies', + message: "Which dependencies should we install the Expo SDK compatible versions for? (separated by spaces)", + validate: (value) => !!value, + }, + ], + actions: (data) => { + // Args + const { workspaceTarget } = data! + const dependencies = data!.dependencies.split(' ') + const depList = dependencies.join(' ') + + // Log out the dependencies + console.log('\n', `> Installing Expo SDK compatible packages ${depList} in '${workspaceTarget}' workspace`) // prettier-ignore + + // Read the @app/expo package json + const originalExpoPackageJsonFile = fs.readFileSync(`apps/expo/package.json`, 'utf-8') + const originalExpoPackageJson = JSON.parse(originalExpoPackageJsonFile) // prettier-ignore + const originalDeps = originalExpoPackageJson.dependencies + + // Install the new dependencies in @app/expo + const output = execSync(`npm -w @app/expo run add-dependencies ${dependencies.join(' ')}`) // prettier-ignore + const loggableOutput = output.toString().split('\n').slice(0, 9).join('\n') + console.log(loggableOutput) + + // Extract the new dependencies from the package json + const newExpoPackageJson = JSON.parse(fs.readFileSync(`apps/expo/package.json`, 'utf-8')) // prettier-ignore + const newDeps = Object.entries(newExpoPackageJson.dependencies).filter(([key]) => !originalDeps[key]) // prettier-ignore + + // Restore the old package json + fs.writeFileSync(`apps/expo/package.json`, originalExpoPackageJsonFile) + + // Add the new dependencies to the chosen workspace + const installStatements = newDeps.map(([key, value]) => `${key}@${value}`).join(' ') + console.log(`> Moving ${installStatements} to '${workspaceTarget}' workspace`) + execSync(`npm -w ${workspaceTarget} install ${installStatements}`) + console.log(`> Install successfull`, '\n') + + // Log out the dependency list + const lsOutput = execSync(`npm ls ${depList}`) + console.log(lsOutput.toString()) + + // Actions + return [] + }, + }) +} diff --git a/packages/@green-stack-core/generators/gen-workspace.ts b/packages/@green-stack-core/generators/add-workspace.ts similarity index 99% rename from packages/@green-stack-core/generators/gen-workspace.ts rename to packages/@green-stack-core/generators/add-workspace.ts index e14e00e..d631179 100644 --- a/packages/@green-stack-core/generators/gen-workspace.ts +++ b/packages/@green-stack-core/generators/add-workspace.ts @@ -17,7 +17,7 @@ const WORKSPACE_FOLDER_MAPPER = { /** --- Workspace Generator -------------------------------------------------------------------- */ /** -i- Simple generator to add a new feature or package workspace */ export const registerWorkspaceGenerator = (plop: PlopTypes.NodePlopAPI) => { - plop.setGenerator('gen-workspace', { + plop.setGenerator('add-workspace', { description: 'Create a new feature or package workspace', prompts: [ { diff --git a/packages/@green-stack-core/global.d.ts b/packages/@green-stack-core/global.d.ts index 49f7a72..caa3696 100644 --- a/packages/@green-stack-core/global.d.ts +++ b/packages/@green-stack-core/global.d.ts @@ -48,3 +48,4 @@ type any$Todo = any type any$Unknown = any type any$FixMe = any type any$TooComplex = any +type any$Ignore = any diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index ec092f0..b6e17e8 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -25,6 +25,7 @@ "collect:generators": "npm run run:script ./scripts/collect-generators.ts", "collect:drivers": "npm run run:script ../../packages/@green-stack-core/scripts/collect-drivers.ts", "link:routes": "npm run run:script ./scripts/link-routes.ts", + "add:dependencies": "npm run run:script ../../packages/@green-stack-core/scripts/add-dependencies.ts", "test": "cd ../../ && bun test --tsconfig-override ./packages/@green-stack-core/tsconfig.json --preload ./packages/@green-stack-core/preload.test.ts --verbose" } } diff --git a/packages/@green-stack-core/scripts/check-workspaces.ts b/packages/@green-stack-core/scripts/check-workspaces.ts index 77a2c07..88a190e 100644 --- a/packages/@green-stack-core/scripts/check-workspaces.ts +++ b/packages/@green-stack-core/scripts/check-workspaces.ts @@ -5,12 +5,17 @@ import { isEmpty } from '../utils/commonUtils' /* --- Goal ------------------------------------------------------------------------------------ */ -// This script is used to check the workspaces in the monorepo for any missing dependencies or env vars +// -i- This script is used to check the workspaces in the monorepo for any missing dependencies or env vars /* --- Constants ------------------------------------------------------------------------------- */ -const KNOWN_ENV_VARS = ['NODE_ENV', 'TZ', 'PORT', 'MAX_TRIES', 'IS_DEEP_CHECK', 'ENDPOINT', 'HEALTH_ENDPOINT', 'GRAPHQL_ENDPOINT', 'TIME_INCREMENT'] // prettier-ignore +const KNOWN_ENV_VARS = ['NODE_ENV', 'TZ', 'PORT', 'MAX_TRIES', 'FIX_MODE', 'ENDPOINT', 'HEALTH_ENDPOINT', 'GRAPHQL_ENDPOINT', 'TIME_INCREMENT'] // prettier-ignore +const NODE_INTERNALS = ['fs', 'path', 'glob', 'uuid', 'util', 'os', 'events', 'child_process', 'http', 'https', 'crypto', 'stream', 'zlib', 'assert', 'tty', 'net', 'url', 'querystring', 'dns', 'dgram', 'tls'] const SKIPPED_WORKSPACES = ['@green-stack/core', '@app/registries'] +const SKIPPED_PACKAGES = [...NODE_INTERNALS, 'react', 'react-native', 'next', 'expo', 'expo-router', 'zod', 'dot-prop', 'expo-image', 'react-native-svg', 'graphql', 'expo-constants', 'nativewind', 'graphql-type-json', 'graphql-tag', 'crypto-js', 'gql.tada', '@tanstack/react-query', '@as-integrations/next', '@graphql-tools/merge', '@graphql-tools/schema', '@apollo/server', 'module-alias', '@turbo/gen', '@graphql-tools/load-files'] + +const mainEnvFilePath = '../../apps/next/.env' +const localEnvFilePath = '../../apps/next/.env.local' /* --- Templates ------------------------------------------------------------------------------- */ @@ -25,9 +30,16 @@ const checkWorkspaces = async (isDeepCheck = true) => { try { // Load .env file in dev mode const isDev = process.env.NODE_ENV !== 'production' - const hasEnvFile = fs.existsSync('../../apps/next/.env') + const hasMainEnv = fs.existsSync(mainEnvFilePath) + const hasLocalEnv = fs.existsSync(localEnvFilePath) + const [envFilePath] = [hasMainEnv && mainEnvFilePath, hasLocalEnv && localEnvFilePath].filter(Boolean) as string[] // prettier-ignore + const { config: dotenvConfig } = await import('dotenv') - if (isDev && hasEnvFile) dotenvConfig({ path: '../../apps/next/.env' }) + if (isDev && envFilePath) dotenvConfig({ path: envFilePath }) + + // Load main tsconfig.json + const appCoreTsConfig = JSON.parse(fs.readFileSync('../../features/@app-core/tsconfig.json', 'utf8')) // prettier-ignore + const typescriptAliases = Object.keys(appCoreTsConfig.compilerOptions.paths).map((path: string) => path.split('/*')[0]) // Scan all /features/ and /packages/ workspace .ts & .tsx files const featureFiles = glob.sync('../../features/**/*.ts*').filter(excludeDirs) @@ -37,6 +49,16 @@ const checkWorkspaces = async (isDeepCheck = true) => { // Figure out import paths from each workspace const { workspaceConfigs, workspaceImports, workspacePaths, workspacePackages } = parseWorkspaces() // prettier-ignore + // Figure out package versions + const expoPackageConfig = JSON.parse(fs.readFileSync('../../apps/expo/package.json', 'utf8')) + const nextPackageConfig = JSON.parse(fs.readFileSync('../../apps/next/package.json', 'utf8')) + const allPackageConfigs = [expoPackageConfig, nextPackageConfig, ...Object.values(workspaceConfigs)] // prettier-ignore + const allPackageVersions = allPackageConfigs.reduce((acc, packageJSON) => { + const { dependencies = [], devDependencies = [], peerDependencies = [] } = packageJSON + const allDependencies = { ...dependencies, ...devDependencies, ...peerDependencies } + return { ...acc, ...allDependencies } + }, {}) + // Loop through each workspace and track its imports and env var uses const workspaceMap = {} as ObjectType let workspaceResolutions = {} as Record @@ -45,58 +67,89 @@ const checkWorkspaces = async (isDeepCheck = true) => { // Double check based on file paths if a deep check is requested if (isDeepCheck) { + // Get the related package JSON config - const packageJSON = workspaceConfigs[workspacePath] + const { __tabSize, ...packageJSON } = workspaceConfigs[workspacePath] const shouldSkip = SKIPPED_WORKSPACES.includes(workspacePackage) + // Get all the lines of code from the workspace const workspaceFiles = allWsFiles.filter((filePath) => filePath.includes(`${workspacePath}/`)) const fileContents = workspaceFiles.map((filePath) => fs.readFileSync(filePath, 'utf8')) const allLinesOfCode = fileContents.map((content) => content.split('\n')).flat() + // Rebuild the related workspaces list const filterByRelevancy = (line: string) => line.includes(` from '`) && !line.includes(`./`) const allImportLines = allLinesOfCode.filter(filterByRelevancy) const allImportPaths = allImportLines.map((line) => line.split(` from '`)[1].split(`'`)[0]) const containsWorkspaces = (wsPkg: string) => allImportPaths.some((path) => path.includes(`${wsPkg}/`)) const newRelatedWorkspaces = workspacePackages.filter(containsWorkspaces) + + // List all the packages being used in that workspace + const workspaceDeps = allImportPaths.reduce((acc, importPath) => { + const [firstPart, secondPart] = importPath.split('/') + const isScoped = firstPart.startsWith('@') + const packageName = isScoped ? `${firstPart}/${secondPart}` : firstPart + const packageVersion = allPackageVersions[packageName] + if (!packageVersion) return acc + if (packageName.includes('${')) return acc + if (packageName.includes(')')) return acc + if (packageName.includes(':')) return acc + if (SKIPPED_PACKAGES.includes(packageName)) return acc + if (workspacePackages.includes(packageName)) return acc + if (typescriptAliases.includes(packageName)) return acc + return { ...acc, [packageName]: packageVersion } + }, {} as Record) + // Rebuild the required env vars list const allProcessEnvLines = allLinesOfCode.filter((line) => line.includes('process.env.')) const allProcessEnvVars = allProcessEnvLines.map((line) => line.match(/process\.env\.([A-Z0-9_]+)/)?.[1]) // prettier-ignore - const allGetEnvVarLines = allLinesOfCode.filter((line) => line.includes(`getEnvVar('`)) - const allGetEnvVarVars = allGetEnvVarLines.map((line) => line.match(/getEnvVar\('([A-Z0-9_]+)'\)/)?.[1]) // prettier-ignore const filterEnvs = (envVar?: string) => { if (shouldSkip) return false // Don't check @green-stack packages return !KNOWN_ENV_VARS.includes(envVar!) } - const newRequiredEnvVars = [...allProcessEnvVars, ...allGetEnvVarVars].filter(filterEnvs) - // Rebuild the "greenStack" config for the package.json - const existingRelations = packageJSON?.greenStack?.relatedWorkspaces || [] - const prevRequiredEnvVars = packageJSON?.greenStack?.requiredEnvVars || [] + const newRequiredEnvVars = allProcessEnvVars.filter(filterEnvs) + + // Rebuild the "stackConfig" config for the package.json + const existingRelations = packageJSON?.stackConfig?.relatedWorkspaces || [] + const prevRequiredEnvVars = packageJSON?.stackConfig?.requiredEnvVars || [] const relatedWorkspaces = Array.from(new Set([...existingRelations, ...newRelatedWorkspaces])) // prettier-ignore const requiredEnvVars = Array.from(new Set([...prevRequiredEnvVars, ...newRequiredEnvVars])) // prettier-ignore workspaceMap[workspacePath] = { - ...packageJSON.greenStack, + ...packageJSON.stackConfig, relatedWorkspaces, requiredEnvVars, } + + // Figure out if packages are missing from the package.json + const packageDeps = Object.keys({ + ...packageJSON.dependencies, + ...packageJSON.devDependencies, + ...packageJSON.peerDependencies, + }) + const missingDeps = Object.keys(workspaceDeps).filter((dep) => !packageDeps.includes(dep)) + const hasMissingDeps = missingDeps.length > 0 + // Save the updated package.json? const hasChangedRelations = existingRelations.join('-') !== relatedWorkspaces.join('-') const hasChangedEnvVars = prevRequiredEnvVars.join('-') !== requiredEnvVars.join('-') const hasChanged = !shouldSkip && isDev && (hasChangedRelations || hasChangedEnvVars) - if (hasChanged) { - if (!packageJSON.greenStack) packageJSON.greenStack = { relatedWorkspaces, requiredEnvVars } // prettier-ignore - packageJSON.greenStack.relatedWorkspaces = relatedWorkspaces - packageJSON.greenStack.requiredEnvVars = requiredEnvVars - fs.writeFileSync(`../../${workspacePath}/package.json`, `${JSON.stringify(packageJSON, null, 4)}`) + const shouldChange = isDeepCheck && (hasChanged || hasMissingDeps) + if (shouldChange) { + if (!packageJSON.stackConfig) packageJSON.stackConfig = { relatedWorkspaces, requiredEnvVars } // prettier-ignore + packageJSON.dependencies = { ...packageJSON.dependencies, ...workspaceDeps } + packageJSON.stackConfig.relatedWorkspaces = relatedWorkspaces + packageJSON.stackConfig.requiredEnvVars = requiredEnvVars + fs.writeFileSync(`../../${workspacePath}/package.json`, `${JSON.stringify(packageJSON, null, __tabSize)}`) } } // Do a shallow check of the workspace's package.json if (!isDeepCheck) { const packageJSON = workspaceConfigs[workspacePath] - const relatedWorkspaces = packageJSON?.greenStack?.relatedWorkspaces || [] - const requiredEnvVars = packageJSON?.greenStack?.requiredEnvVars || [] + const relatedWorkspaces = packageJSON?.stackConfig?.relatedWorkspaces || [] + const requiredEnvVars = packageJSON?.stackConfig?.requiredEnvVars || [] workspaceMap[workspacePath] = { - ...packageJSON.greenStack, + ...packageJSON.stackConfig, workspacePackage, relatedWorkspaces, requiredEnvVars, @@ -114,8 +167,8 @@ const checkWorkspaces = async (isDeepCheck = true) => { const missingWorkspaces = relatedWorkspaces.filter((ws: string) => !workspaceIdentifiers.includes(ws)) // Check for resolutions to add to next.config.js - const greenStack = workspaceMap[workspacePath] - workspaceResolutions = { ...workspaceResolutions, ...greenStack?.resolutions } + const stackConfig = workspaceMap[workspacePath] + workspaceResolutions = { ...workspaceResolutions, ...stackConfig?.resolutions } // Warn of any missing env vars or related workspaces if (missingEnvVars.length || missingWorkspaces.length) console.warn(`\n-!- --- /${workspacePath}/ ${'-'.repeat(45 - workspacePath.length - 2)} -!-`) // prettier-ignore @@ -123,12 +176,12 @@ const checkWorkspaces = async (isDeepCheck = true) => { console.warn(`-!- ⚠️ Missing env vars for '/${workspacePath}/':`, missingEnvVars.join(', ')) console.warn(`-i- Please add these through a secret manager (like doppler.com) or another env var config like .env`) // prettier-ignore console.warn(`-i- You may need to prefix them with NEXT_PUBLIC_ or EXPO_PUBLIC_ depending on the target`) // prettier-ignore - if (isDev && !hasEnvFile) console.warn(`-!- Couldn't detect a .env file in /apps/next/ - you may need to create one, see .example.env`) // prettier-ignore + if (isDev && !envFilePath) console.warn(`-!- Couldn't detect a .env file in /apps/next/ - you may need to create one, see .example.env`) // prettier-ignore // Log CI env var warnings? const missingExpoToken = missingEnvVars.includes('EXPO_ACCESS_TOKEN') const missingCItokens = missingExpoToken if (missingExpoToken) console.log('-i- EXPO_ACCESS_TOKEN is used for automatically deploying your app to Expo from CI, get it from expo.dev') // prettier-ignore - if (missingCItokens) console.log(`-i- If you don't plan on using CI for these, remove them from the "greenStack" field in this package's package.json`) // prettier-ignore + if (missingCItokens) console.log(`-i- If you don't plan on using CI for these, remove them from the "stackConfig" field in this package's package.json`) // prettier-ignore } if (missingWorkspaces.length) { console.warn(`-!- ⚠️ Missing related workspaces for '/${workspacePath}': ${missingWorkspaces.join(', ')}`) // prettier-ignore @@ -158,4 +211,4 @@ const checkWorkspaces = async (isDeepCheck = true) => { /* --- init ------------------------------------------------------------------------------------ */ -checkWorkspaces(!!process.env.IS_DEEP_CHECK && !!JSON.parse(process.env.IS_DEEP_CHECK)) +checkWorkspaces(!!process.env.FIX_MODE && !!JSON.parse(process.env.FIX_MODE)) diff --git a/packages/@green-stack-core/scripts/helpers/scriptUtils.ts b/packages/@green-stack-core/scripts/helpers/scriptUtils.ts index 143f1c4..44877d9 100644 --- a/packages/@green-stack-core/scripts/helpers/scriptUtils.ts +++ b/packages/@green-stack-core/scripts/helpers/scriptUtils.ts @@ -75,10 +75,13 @@ export const parseWorkspaces = (folderLevel = '../../') => { const workspaceConfigs = {} as Record // Build a map of workspace imports as { [workspacePath]: workspacePackage, ... } - const workspaceImports = packageJSONPaths.reduce((acc, wsPath) => { - const packageJSON = JSON.parse(fs.readFileSync(wsPath, 'utf8')) - const workspaceMatcher = wsPath.replace(`${folderLevel}`, '').replace('/package.json', '') - workspaceConfigs[workspaceMatcher] = packageJSON + const workspaceImports = packageJSONPaths.reduce((acc, packageJsonPath) => { + const packageJsonString = fs.readFileSync(packageJsonPath, 'utf8') + const packageJsonLines = packageJsonString.split('\n') + const __tabSize = packageJsonLines[1].split('"')[0].length + const packageJSON = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) + const workspaceMatcher = packageJsonPath.replace(`${folderLevel}`, '').replace('/package.json', '') + workspaceConfigs[workspaceMatcher] = { ...packageJSON, __tabSize } return { ...acc, [workspaceMatcher]: packageJSON.name } }, {}) as Record diff --git a/packages/@registries/generators.generated.ts b/packages/@registries/generators.generated.ts index 90a22ab..4a14be8 100644 --- a/packages/@registries/generators.generated.ts +++ b/packages/@registries/generators.generated.ts @@ -1,2 +1,3 @@ // -i- Auto generated with "npx turbo run @green-stack/core#collect:generators" -export { registerWorkspaceGenerator } from '@green-stack/core/generators/gen-workspace' +export { registerDependencyGenerator } from '@green-stack/core/generators/add-dependencies' +export { registerWorkspaceGenerator } from '@green-stack/core/generators/add-workspace' From b6b89044ade59c5b38bb63744f3e26cd238e8a7d Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 12 Jul 2024 20:12:18 +0200 Subject: [PATCH 036/126] feat: Update HomeScreen design --- apps/expo/app/ExpoRootLayout.tsx | 1 + apps/next/app/Document.tsx | 6 +- apps/next/app/NextClientRootLayout.tsx | 1 + apps/next/app/ServerStylesProvider.tsx | 2 +- features/@app-core/appConfig.ts | 9 +- .../assets/automagic-api-gen-icons.png | Bin 0 -> 11434 bytes .../@app-core/assets/cross-platform-icons.png | Bin 0 -> 12879 bytes features/@app-core/components/BackButton.tsx | 51 ++++ features/@app-core/components/styled.tsx | 12 +- .../@app-core/constants/testableFeatures.ts | 7 + features/@app-core/icons/ArrowLeftFilled.tsx | 28 ++ features/@app-core/icons/ArrowRightFilled.tsx | 28 ++ features/@app-core/screens/HomeScreen.tsx | 266 ++++++++++++++++-- features/@app-core/screens/ImagesScreen.tsx | 66 +++-- features/@app-core/screens/SlugScreen.tsx | 97 ++++--- .../screens/UniversalAppProviders.tsx | 20 +- features/@app-core/tsconfig.json | 3 +- .../components/Image.next.tsx | 12 +- .../@green-stack-core/context/CoreContext.tsx | 13 +- .../navigation/Link.expo.tsx | 4 +- .../navigation/Link.types.ts | 1 + .../UniversalRouteScreen.helpers.ts | 2 +- .../@green-stack-core/navigation/index.ts | 8 + 23 files changed, 526 insertions(+), 111 deletions(-) create mode 100644 features/@app-core/assets/automagic-api-gen-icons.png create mode 100644 features/@app-core/assets/cross-platform-icons.png create mode 100644 features/@app-core/components/BackButton.tsx create mode 100644 features/@app-core/constants/testableFeatures.ts create mode 100644 features/@app-core/icons/ArrowLeftFilled.tsx create mode 100644 features/@app-core/icons/ArrowRightFilled.tsx create mode 100644 packages/@green-stack-core/navigation/index.ts diff --git a/apps/expo/app/ExpoRootLayout.tsx b/apps/expo/app/ExpoRootLayout.tsx index 9b22b19..f78d3eb 100644 --- a/apps/expo/app/ExpoRootLayout.tsx +++ b/apps/expo/app/ExpoRootLayout.tsx @@ -32,6 +32,7 @@ export default function ExpoRootLayout() { contextLink={ExpoContextLink} contextRouter={expoContextRouter} useContextRouteParams={useExpoRouteParams} + isExpo > { // -- Render -- return ( - + {/* - Title & Keywords - */} Universal App Router @@ -26,7 +26,9 @@ const Document = (props: { children: React.ReactNode }) => { - {children} + +
{children}
+
) diff --git a/apps/next/app/NextClientRootLayout.tsx b/apps/next/app/NextClientRootLayout.tsx index 3448ea3..9a49fbb 100644 --- a/apps/next/app/NextClientRootLayout.tsx +++ b/apps/next/app/NextClientRootLayout.tsx @@ -31,6 +31,7 @@ const NextClientRootLayout = ({ children }: NextClientRootLayoutProps) => { contextLink={NextContextLink} contextRouter={nextContextRouter} useContextRouteParams={useNextRouteParams} + isNext > {children}
diff --git a/apps/next/app/ServerStylesProvider.tsx b/apps/next/app/ServerStylesProvider.tsx index 8ebc99e..450fd2f 100644 --- a/apps/next/app/ServerStylesProvider.tsx +++ b/apps/next/app/ServerStylesProvider.tsx @@ -27,7 +27,7 @@ const ServerStylesProvider = (props: { children: React.ReactNode }) => { return ( <> {reactNativeStyleElement} - {/* TODO: Insert other SSR'd styles here */} + {/* OPTIONAL: Insert other SSR'd styles here? */} ) }) diff --git a/features/@app-core/appConfig.ts b/features/@app-core/appConfig.ts index 007fefa..fd08182 100644 --- a/features/@app-core/appConfig.ts +++ b/features/@app-core/appConfig.ts @@ -1,5 +1,5 @@ import Constants from 'expo-constants' -import { Platform } from 'react-native' +import { Platform, Dimensions } from 'react-native' import { DRIVER_OPTIONS, createDriverConfig } from '@app/registries/drivers.config' /* --- Notes ----------------------------------------------------------------------------------- */ @@ -12,6 +12,10 @@ import { DRIVER_OPTIONS, createDriverConfig } from '@app/registries/drivers.conf export const isWebLocalhost = Platform.OS === 'web' && globalThis?.location?.hostname === 'localhost' export const isExpoWebLocal = isWebLocalhost && globalThis?.location?.port === '8081' +export const isMobile = ['ios', 'android'].includes(Platform.OS) +export const isLargeScreen = Dimensions.get('window').width > 1024 +export const isLargeTablet = isMobile && isLargeScreen + /* --- Computed Fallbacks ---------------------------------------------------------------------- */ export const fallbackExpoWebHost = isExpoWebLocal ? 'localhost' : '' @@ -30,6 +34,9 @@ export const appConfig = { isWebLocalhost, isExpoWebLocal, isExpoMobileLocal, + isMobile, + isLargeScreen, + isLargeTablet, // - Server URLs - baseURL: process.env.NEXT_PUBLIC_BASE_URL || process.env.EXPO_PUBLIC_BASE_URL || `${fallbackBaseURL}`, // prettier-ignore backendURL: process.env.NEXT_PUBLIC_BACKEND_URL || process.env.EXPO_PUBLIC_BACKEND_URL || `${fallbackBaseURL}`, // prettier-ignore diff --git a/features/@app-core/assets/automagic-api-gen-icons.png b/features/@app-core/assets/automagic-api-gen-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..eae52d727627409dd7518c46604987b24e452245 GIT binary patch literal 11434 zcmd6NbyQo;*DhAvDXsxpD8-%NP^?&yQoLAz;Dq1~!2<+`QnWy!Sg``ZDmcZhc#9QJ z@!~h_`&;jKzq`J>*8TJTk(@I#dp~>6e)i0qGjrme>8OzqG7w^5V3262KhZ~D*D)|K z^$YXNQDUHPr;+-*Soey$#9 zX$%Y*c|Q+pTW1iI%?9KEc9Z2owRLf^f$e0uUWjQ6YI`Vy9Kq@V5RgHDj-hRUv#pdJ zm%JRIj2{pU;0l6Tv-!EYxOoBnWV!z00@3$>ss*^vLJ&K9p#Brp|A?SVvRsZ(s0UC$ zz}MH8-&cg+9pWG$Bqb#!ASf&#EX;?N;Pdi#gIfFXxp{G*5eV7-VmtwP*+Re`P_Vlj z+aFA88+UK0EEg9c+kc=Hp->3e=3jI-FMjL4HQs+z_|csfu(tCO5aJj7;}#p6%s=u# zMLVxQ#ea+#fIR;e{wcYD|61~}hIoMt{XIakT>2m{cW;O-=r6(_rT>5^LqOJ0ke!^c zps*;Ppah?gl#Iat(e%g0e<`T=K{f2;B!q=Qw$?UMd_scac6_2j62g4ef|5df5`tn< z=oWh$VIk1JK>w)xcNkS0G>Vw8n6S8*ln`29N=#DlUxmMo|6ShD-P_jjPgmrG{}ubM zy1%kA0)L|G0{$l`e+&PK%D)=_gzO)||BaUacdG1c|E0;p8{+ae1?+4EKrSFxkQ?+5 zNkac2$<7uC1w&mx|3#6a3-rHJgw8#ni?y4BESDdj9mw9=+Xc!cr|RwE@(ki`=WPq+ zw*&dGJpsA8dssVw*!b9l{)Zm^2UJGjf3x>L^zWZ4bT*^&THxR8M;HDbKOi^spn;%A zhhIQ?AO;2-hQ<>`L%-Mid3dimRZjaJ{PYW3e=S2kz|M|^#jdzchEIuuqf(5Y%9+Ql zu1ZjhL%@@xjDUN{Hn zJlE~0IN6!b>U@F^u=4=0S1N1{n~^C28R&j!AaqNTlL3JWn*(MNNdh>=M9rcCq_%2JB^&&!e zxPy&MQt+!~e=^{>jsFiM&($#nZk={-V^-vAEdSAP&s)5DOgo^PyJRO9)oN=9rYCFj3<`7scC3W{3d3m|EZ}>2r)bC*!S`&lcOfzGn%s z%BBKHD{YQc%D_Z%sG&)*Ppi`S>th;35%u{ikCS7E@7LaDS&v3`DLa|k$W`8dwAj&b9o;Isuwus^~- zD*=jO8AW6}*M2$_pBxiaNrBVF-Y z^}g0*RGH(M$f1N&0I+ONeY&gOmX~=1*SnF)%}VFITglPcZjR|3!RAvIx}k^`?5Gkv zYR8e-r)AE`BsYql!yii+j2qH z9jZ31$Adp8x7r`C^W#NVm=l}uplvEfJgJp+V-ZQzpa3s^+Y=Tg60$g4W3y$VD@%G2 zijyONf~1J6FjdR0&QCHJ_8LbojT92+D%FH(d0V|6jgRa9$j`TpO}$zk`_u~(0o}~H z<+8c(Z_U|o6tgi!hDr-+sWj*CrTFHkj}%gVeMmaX;(2pR!m|t*=Fzl_m7>^#YJ`yM zk?$NetD>2a3Ks~SjvYKy7!-Z;L3KOxEr8L18nnOwiG1RIkn~0On4f3>Gw9G))iAz8 zzpT|Ha?mGb7t+XR)4L%bC6hP7=3N0UMGrUASV`kRxO&_8!R@p~W@%o^NguCyX7fQw z)OVs4o?_waN4E2i#mZgCT6y}cur`+OL7cTBgGAheHHcCi-P5(1OG14j37Z=dAjGOA zsO+d&j{MP9|6L7JoX)){4xZ0uNk?NKL>$FM&^mj;C*u51y%eJkJ?*C)d{{5f1keHm zq{mW{?5uD7NmRRE`%-p0`0uKk!bB|t%_lrV^!Od_&0df^e0KH-Fbe9go=qkH1*)a8 zW;+)Jbh)dozcv2}9Q_oQUA|*YJlABps;qS%CFtX>pU=Taw=tWW;w~L2yuy0KoB!2J zVuJk_Xq3wOzQL<()GQ<2dc*Kw8?&N+R-zw`*+w-hnBsT6Z$deKmgI;tL4OfKjgiha z@zi2-Wu&l*D@q2NdEq#HOGmLdm{$Ud=w$dYN<~*REXO}6Nr(7#^EULa0nUIIcMJ3r z!!|H+GbvuT1@?!QE_9Xa|A3FimE(75WzXm*!Qc1p5A*o80Ur8!k(&qZ-S4iFRi$v| zBcI(T^8cJd!86I0CDC@hACYZP@kJ+YbKdqX+h$3*;4L~otr6o%@MnE>41LhIM(G`S zh%J)EKMPeo) zo}5(w2#5EOZm+@iwrFC?Umz5P9)->Ra-X*vr=SwaHMFqtPzcLE?57a>x<8mUAFs!U zkh0^f#ptW(2~NeGO387FLnHh(O$1DBJ%M>HnHbW|s|!0UfPuF)bWz6VT^Lf9(H|>} zhjB+8b7N8A6vNW@g62YF%kkApwG3|bTf_1&WNN#jg79?2BhwTyI``%{;Cd#a?#wp| zZ#e+9adE`AVcC&Jc&8frW1*M?@<(pX|4Euzc6i;sjBPh;n@lO0^93qX(f>Z?i5%x@ zU^bWgjd}uN>zH(b|6_W$G{n5`J<`BtyZtmV0alB-@~YXbL`D5%eyzLxlt?MHz%Hmj z6s+9zxVzhqWX;)sSIrdmBql~u-u)&b%#xK;w4VXEd`)HdrhVu;9`Hu)i9?O759O-W ze%-V}ZJq%`$#A8O&atTs>WG_?1vkw(IWHo6GW)Ziocm32SV*O!8+tMy^iN&;RNf!h zhriTe^ zkNyh;0hm{qD~~q$SsdB`tb0M>nq}Rv|Hywg7ia4#I8IKf)`Iw`pWItCmU@;&njq-M z+XofzzXSS{k7lF^Y*v3W;rTZx&K(SCblt(WzOWhPMQ0!APYoDZZykLq0OW31L~|;v zBzC_}5t1s@;**cjFP>$2;o2luLh_OJuH!x~_?TuLhyDqRP<-|=t+%$mgrR#%8Yyjz zjKNLHIyy5W1VXXyzVa)OHH8m_4Ab{dI4&G`a80HC|!b* znLeZv&3q(=5N7&p*!57j^}Cfa9mgOs6l5bDcK7iRgE^H+$YOpUz$z^`lEtQ`nJekv zj74ycSe@q>z~vdYv61mN_lRly5$%{&7?k@Yy}&uSo5Tj$==}6IxJ%==AzXLoSNqTg zgOGE9;x7#538rVQn=}o-@&^YNVh&a%wdMuKjP$#oIDALrkqI66J4gy@ZP@pd`e!}j z8w*Co)_d-!G?JoS@aD7(d#Ac(mm1yf*m?)1DMUpAHh%okGW_V@?UGDLWR`-HICW+K zKIWJ&T&br3(HZJo+TnB9r^xJdZ?GE5A&Z`JFU{5Bm`?|J`pF{76YKLF+gi^Kv%<}Pd=z}^ zx9#$Z4W+9zfo5vk#R|tuL7a+ejq9;3Tc2jPqNI%tWz?r8H6^Fm?TL2{3KNkpBU{w4 zNF#d!@9L+nlp7g9oa%fLE z9|^v?*Yo6&2T7zcMe04e@puFy6aBiAe^v|vfC&fd^k-6bCcdK}woy?R3G?K`kzy}W zJSb>hh7tQ)IaWSh!;YU)45Jtz08^tA$4uGskbaGOyRdu@*2tXiNg7j?*31thSHcJU z|MCarWfyj@;~t_Wtha9EUD-d#TspiXI}Ete*Z9zTC9UYQmk-$eJ}=b~Xg_M^t`v&d;qj#OuQbg%1Wc(_iCXD4B+-zAhDckMM7s-AM< z!$*ZpW#3~w$LWKZLoKkCpGrSo{*foeZzAxT331-s|0=vE>C zofI|-H*kWbNi_$X_E;k~f)3W&=I$F^zi1PYL9%h}n}?=fI5h9I;)cE?78^;GdCuQ| zejGvyTOWbb*K@*Goz&+XxaU=FFnZ71LF$+1`Gpz``yrp->omjlYl9ob>((~Jn4$x4 zYXSjet*=)AL*k>WqcBIBSw6hVMRZ;X+kV%DW%9;I`U9;+?njrc#T|cE+#f zPhoY5?@3w=cWxS7)5Qp*OxoBwQd-K^ouvYQ-3oE2de~<|@dXi4GPdRESH8>zIdN|G z`$!wl8J6eRho)Lk?Jg<~*Zo_|@XV%HKBw-AJ_KznvmuPCcic6*b7vx=yQ9e zc}ffACzZcrN9i0gkO8_8LcZc6i{@En)|XIh)vY*AsVY-jbi0f&V{+a)|C=%J^slV-d~qC zsGeZkzQIbQcn+t$H@AXjkb8Acq-Q6UXy%CsIF%P(b6gvord;qvuvsHj9^gu3nt%GN zVx=A#DWVy*Eb_UgKv;#QM@+;iI$_4OR`g<3&C1(7wI3Qt)DS{>zMP-R6dQL%1|q8`x0Lbg+p8AI}ox2Rt@O^<3*4y7ok= zXtoL*hYiLma!~t$u+vjH<(WP)^7>AzT$PGf3A`@ zPPHX()~eZ=a7AczewxC2NuJ6mShZG7kZO4y8vY@h1oim2Wu-5*CdAZ8cC3C$Uz1Fp zTvsVZDs?fL=E@JQcJ-Pn9>VX7Kq#u{CcA{iOZU9%zJq(Q@>~i+`R-o0kH;TXZvmZSkS zA_^SPxE@moeV+X;HL_;qy-$(hQ&Qw4OqAO2BuZ%cvV8PQ*^y)F;7i^!76( zKx4y9&P{IeI%%ZD{?o`wh4JAMDuA}4gTS~Gyh67>eIuy^H;V9fR*sChb+O2;;Y+q# zv%UM>0gAM8QkvMCnhy04fqLGy43feP4Sg|@S!di4n%<=Pj!LHBN9Q-^Tv#J>1{(-39F)#S)>vE=OK90FelKQOP=@cWSn zMP}R!Irt8jU_I5ZOLM507*n5xAL>!R^fIN!gYIV&bU6n@uVIZVQ8J0`2QzM>NAj!? z_GM|~S+=5~4;!7_c+^l&3CCWq2b|Q)A)jB3ZpF+8%oXhVRU>=9@j0&@^ND6>s1kp? z<0^&}B+t$&v2dT0ZTy%To1&ejmD#nRn``Z*!n@1@(Y7y}b5NHLS$q+ueLOnVH}rsh zyfH>oU4Jaq-0AtrT?UlMz=XehWfyQ>{8=vHd_{nxcSSks(Bx0w zQDK_GO%`e>GUK=Zp%a(V#?1fy*;yd;!Si}!lmH*q4D^#pSduJEUA0L$7E zD#=^uJGuA4X}}HpY83cI(=uTn{%h)criTu@VDEw38Ym~H7_#rZT#-Tg=tLRELsjSM z(tRc8GwQ5>8Sb2(n^zRf*+SL1m0;?}`aJ#aOcm_&P&@>q^pjnqm{nHLy*$P%mfFwMfawws`mjqN=W-eH4tE=<8v*v$#q+XzScFV79>Xi|n@z%nd>&w^; zB9me%=K&ux>uexi>0sm^_o;UpEqIMoO_x4+HI%${&J>H}?Tzh96HdmiuG^t9nNad4 ztG=V7emoi-)x=o>vReGzj8vp)pttiakayWUv~XkzShpxp?4JZg5eLyAFKBKg}_f(BhK&!v;RWm8vF|iR`)GjZOyEgTl#ixP`P@y1kY&aC_Hjrvm zA-aoE+2g;Mkt8nov2?I>r&DcB#Zbo`Q5s?H>^&>s`Byx_3juoarlI8d!K>B|G3-mD z*OE2hu{>6EU+<@?B^zXQI!PuMx4YcXS5Nkxjim zp3X|9L|McK7kfBavpFhK`aC_WDrbg@!Mv-*je91sXDh%78XgJ#Qdbj`DT-7uxs8LW zDleZQD|F6nOi^8VAHKpQ-x?xzs|ONO&Wslc7wk(+yX3d-RfFw`g#rK*oH|O6`-^i6c$BV(fh7tzn%>AaBLt>If(~)m^rO!|L z?I+6y7!t(=vW9cAEEzh~L{Zz6spPVx?F+y$T9_!!=gjI#Y_}?UpLb0RJbOI+`)W* zI>S`$Iat4Jzx~^)A=3e0LtD&Jy9F>GJwq~1RcFb!tCLc^7$10tBSnP*L&JlIW=K;Z zb&yrjrFn5jXN@AU3|JTkJh_RVPIo913MYJT2l3Z77G zhIBwGUOrBj`~{(7aQY(L|K#@VJn$WrzqUZ*d#<*L1VmXF&7orD=Va|kB$%An@a(74 z_V=a+Ke024pJS(R9N@5pu=A^?nv=>!H*Xa+Lm&{Bg`s>>zJ#Ee! z=uZ70?%UYgM$iGQM}jBcX3a(%((Lpar-znGX~iPUpLLDv*9liFi}4!CDc-YW z*I+Ox>o0COC#hU`1q?Gv%#Uz!X@YbhAI@#DB&u7AFa4S)({k5Mt}1v=t7Q7LRr5oG zDM$5JGTm3{yymLS{87d~#Or;`#_O34G;58kx=oM98kBgM2Y=UHn9wle50D68DY!bQ z)Vf(eg}gh0(@(1eUBx0%Z>LpgQPzmsDYHd4siyJMQhk)W^F`KFEKx?A1#^Rr`jFy= z#h7$a%K;mPa*O3?8r=WRg~4+CsLCJM#DCAE_xMsM;J*DngU@~-YP%+FIRQBo?4VG* zaAR!l&Zaa^BleV}&$?FEsXV#mz<#-=E!sWsy}rB z_bXV|QCuSg)+o!+hRe5M>vK+x`%B2~PIaw*C+RL#3uWfB)gd@wtdnJ7g)oqfoUtXu zg}x~26VInjI(-Asm3R!t2eiHkDR2zuZ#H8SL)a8S%-$H`tNK|6^O{s?y>K|o_8*Df zWv#sI%(OIC&8*X* z>S*@3tQAB(8UJJO`Kbuf22}4`8@jTowH`{k^aKAwzsamM9+!bXYv+gTCHe$*D18T( zph_Ybp7RoQ-Wq+#-S3{#n+cS9gIU*p;JRWg<~P~cYt&)d9C&C>subimL>dtCCe-|A z+SBQeL8?ZFG)Ig*J2|B+(n}9pW_C{60VSBz-e2nX@V`ja8dgo2BA4+wh%!>8h~F~u zZ855&lA|8UGOk<5DdF-7baH#0p7fVZ-^6Y#ACL2Nl3-um553#1W*p%;rLQ_z|J@R> zsj7D{Gr+jm%qT%gHNgq3daH*o+FRLaRGW9OUGG!G#<(MdODE4S@5V%e`2T5x;eYVO zjUuJ>XeJzybPu;h&`z^I5n(9=k8w$Fc7qXvt?U{UX~JDdT9u3a#oU7l==J?@Tj=cY z`Xfn*1!JEd^J4=dX+|+(6n!FO@;_s|gx#;YBm3H>1tVs#5^PY;4BI30e;9=+hj$^n z-iEm75Up*N>*D{(PC3!(hx;4UPX?$h6a46KjZ25<3!gb<{eXnS8u{`u`LQo3)~oO1 z{=UEN(tn1yu-R;VCy-d0YoUXFqc*&iVjEHp!J^OojG?9+f;UGh?2aqjYX&~}S^r19 ze9ueC2zE^@%pZlx6B^~RYg`-Z2M)!b`vRJWHIn3G*5F8C2?I(oFX!3`0^A7a#=McR zbwZv~bHp@TpQ4o{j{{dQ-K#D@RLIZc}XE@VftLXZI4RW4V=^$%M2o(xQ zR;r0$A~pFi4NN1&qIS8#rLNC`inY2hDkQ~RlN`y|z2fNb#x+j#O0nP31ri&U`OcxBkHSaZU~ob)1mvUrFnM!^SWPMnh>ocDE2y`)ZL-CkWt z*}vW+GXWI|m9(KjP1e5>sFu|)OLJn1yUL7sjh*wFee@jQo8T$)jkaDD?E$pdMU`mk)-7&2qj3Tx_2_x;`!N2W*i+Z&?<6QNWPemhnI zp?27X0HKr=Tfq;L$%mZpKnp{@c?|Z|VgYiT)!PKbJ@!PX+hNXb-RZ0AlkDy7s;#<- zZa!n1*Q>5NZbp_Rk>r!7$0B^|^9xnZA>Xg|;G8sD%Cl1PQF~0OwU^~`D{P4|Y%xli z=+`8|@u36$u9bH|1LUfo`%;K-&9B^7#C|5sS$l>mVH4YAk>B`aZ4JEYQpj|_O=BpW zHNr%Goph4zC&!`Q&IlXy4oAJ(7s)l348 z8lz7nziP|)BpI>9mLS&e4!9Hh9l9STDxbo{jO>vt?qbxp^!_YAa?aA1!YOToOwsVy zfa4|945$E26LRn`Sk`5>%|3sd@)hKZ6~Ms2U-3T=IQ}Nmk0g=s6oD7sUJ1Cqd#gt9QfT- zoznj?ODU5ym8oUcn0MVvK+J8Qx-O z5(?RBRwO~c8awx%k=|(>>4S*^cF1X)KL=$CXx|y{e|?zw+_%E~@nJEb-1hS}1$h5^ zTmG8*ggFy^VZmvz|F!IQhNX%Ef2KH5aS9PkudMEsveJ>G9jg_`h{3MJ#5MI*8pC%N zJ$^s8Xdb-4-Ew&OGCxMuys}7i$|{uL;^F#GXQ0?^vX89q@r0flG*RJPpRfa373BB% zCn%ZYrSBm#xxUKRS7wjJuPnERBpm17Jm31Q7aFAB)N7L&=+YvOruHkbQ>7ml+nv2i z3z1EFc1L2)7ghGe%3yG9s+hJ?{oeJ9d~zxsTlfBbA(Y8T)*WBxsQ0Frs~=~gkn z)@+*v_DijhPHNCZRM%TjjyRx31g% z*#f30PbQ6ejvs6N)j_isuRd-SxAbNm%wpBVos_yhv_UTG-L^8Ud1w3X_jHc_@kUYQ z73H(T#=v(v-xy}r>bmV|NANH&u9$~?T|6(QpFfM_PEHy#OMd)q#dqcIqQ;~(BOnbx z$TOi=Q^kiRo1`%Mz?JeK47r5KoEnkV0&mylyq7NAM-NwVvJCqiEo}2@uJQIU+ zE_~#P9RX={FDJzq*I7>@-@llWeKgdHwN6J*w<-)bD^--F2)a%3mi-&f4i@^XILmu- z#77yh3%qJIo}KRM9{_{APWV-Hf|QX$GKZgtqDf6u6}1Ri=z8Sb&=%h*eHuuT~ohQHO7B)_pHjf8| zgp}?Ys&~)NfHz|*1fO5Z-B~0I)%Fo>&D)Ii?lWB4 zuE|&0fmg)Zn)Ka;pHMVN%fVy1nE)Pz#4__itznHL@DDva(!UQ5rMcS|B7~hQYoyI? zXBA#ps7e9ZnFC*P{|SG&`Z3I~HwLTbChPPfOiV7WIp&CIMK%}L{0)D=NTyIX{KAKp zifyQCiV_x0KhB!&D?%Sckg+RLrGr(XwI?tgL%=x@@E_w+W1 zf%PNqj7;afZ*kYj`yU`AY_<%Q`zCiP?mOEM%-($SmH%U1_!o?8qdaWa=iK6r&Wc&w zoVAdYV$aKuSv8?d^wGGcGsbes7wB#3#w$AeZ+cq{Z*+7X$R%pxy4kM%T>_hxw|_f% z?lO4iX?kU3t0S}H-eZdEF=^4eTzl&F*H8A2VJ;t z3hoPva>f7^_888X^kteOgZ;Is zA0N#m5(Bzns#@_QPEJE-&Kg3R+e3GZos9`KgPT~W3-kL&Ob3Hz^1?WA)?rAi8nd#b zD3?XpHBsmF2WXxeLt!5#<-yv!zLVjs<|I4(hLMrc68 zu}fhxi@>j9*yM>{eMuyRh)L0>#86WDeC6A>mpnoIYwAMziixCDKq;~%d@#L@lIL%* zhA;Vr3sI{oL(JQ$;ei}%dkSH0L^xxlfSbM?P~%Na7=x>95?Kw9hS*sCft@CHcU6%kFTRH8EUET-u@cmU>s37*&~ehS4Vw=L(S*nd zW+D{t!9fB-4pA+F3KkC2GZIs8Gs!8jg#yXMJ|rJtjQ^HH{U+9VGrMgK)Quw$gJfiX n97TUqIARw1e?L-HXT2kHj`@mBElT$HYhn!*ohLO)RuTUTih?>> literal 0 HcmV?d00001 diff --git a/features/@app-core/assets/cross-platform-icons.png b/features/@app-core/assets/cross-platform-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..657d1b55f08cf71017609f879729533e546a8dcf GIT binary patch literal 12879 zcmb`tXIN8R(=ZwYMUFh zfhbgg&*1rU03`lLRWk5H5fK0|1U!75J*|8MoIP#>6fSW7rJ;)OfVA|Wmf5rardi%SXrXTsly|Be6H#S3nC zDvG?wf6)F1_7_)H=v2E-_Wvm5@8Dmp{Ab2LD*FfVe{IYE`>nEp|7V+Az1*Gtnt%;l z2;qc4A)Gx=Hwp6ZCfUHDp7x$ji2vClB`44S-Xg&EpiWlKNI4!K0ULy^m6wwzkNg8K zC#Q$*E;e3pPeB_5no|{la&fgnA~*#&A^!&n|0OCb^uPH1ALRQ71Xwd**FyiXeqivQ z^Mh~(4vjl-I`a45z5#(aK^m$`kA2d~V`rPL|JeGt#`OAJ-L137##%$*rVwSyPX%9d z>Q&aJ^tjaByu-oig;aIfbgZTIAG8jeQ$}~^UR zC2(i?XNu^~@iOx70sh}#+0a{6>A2~dC*@=-RGqzy4oQMI=f%zevVmd7EQsT8*Td}7 zzIru*Vxc%?|bi=~;;Z3>V>p@u_2a&_Z;O;7qS z@ucDH+F9|wZ`KMRPKb{7kR3^lM5Q(5r{r+AYIx$wW3%wt+H#nOC5W@~E=!QJhGF|j zO;6@$^nWzrg%~Fk_Oyu zFJd%agG7oVYz-?dB@Zq1(lZ`dI#!0z4D9NW#O%MG0X5sbNHHOmBvOezAgzjy6r%hS z{?zECp|wH8^pM(TLMGroDbziinkV|ps1l`8RT#v8gaCIvh@KMh&TM@T;T8OK3k}jyXKZgofIDrYr_EG9v(!0O7Iy`L`l-0m z`-EXC-Nt2Z{Ke!WR?JlSlU3?x=L%@1yb<7U7Falc;aa!AWS(EGamQ8=$W9ncuQGl8 z7qneZ3@iP`g2UvULgP3Ch)$XDa}xsG4#C1B^VYU7yD8p$m6=ONpni}Ti}?-AU6>oY z3olJ<53r2Va5EwtfUWe;i>>2NJxy5?AL;Hn>`@fHDlZdk+~2(2tnbNV?4ZLe8qF*k$j z$#!kYgTB2&|FN`7yM_U+c(cQao>_t=5MGOUKMqj7_UBpU>A1=B1c>eZ9dbM%wlKh% z^UfoY$h13iyeQGeXi=@kU}{406%Nm429N{SB(cM-?@+#^ENe+>NomKUHF?@qYg5$L zsziuiVI#f5=W2g?uFbWb($%g(+YQR!$18?YQa{J$kxbwNWz)Wf*X)XPH5>F%8e!#* zX=7fIg6j3KE-zx3BZ;&wI>)le%#U9g^uyC;pCj5M2evZ{RMKv4HeumTo?!V7(a-L* zNgnJR&n~DN`y4eD+)lgyGX>J93>IwOw~d(g!7Pn{;&a%&{AgBLlhzw>p-=E5PWhX( zQ;g>Lv)Pf!H^&J?CJ%PY>es!cEE1GG$}$T_i8fNEBt7i3qpjZ|_O6@x$ud+BbjNPK zX)KPm=gcalIi9e*c`egqYGmaX@FdU<-!vXaD-$BFqL+hTn*-y$RS0ercXKn=!CE5A z-*Kr+yQZP>78g@RU9un9h0BrvGMg4J0Wy4>#?Gcw*G^8!Tqeh=@OQ-Kn7`gM?&T|3 z6}DW2N`Mr)ya(F=uVCvn(&D>`S}U!aP7OJ`f=lh4sE=l_^Cw>30Tf32NKItdldVVHfRKPP$Kea<7Zrcx&cY-==5PxZ5Lad<+Yb-7#?JJLrb6oOr%bCGb%>%*INEWr` zg&^~*9;HT}>>T~WHH^m^%UWTX8Ed$rAKR#!vY!2b^4LokC4G83L=ycj`Rf#|@etN1 zP&zV`d|-MFtp=%SRNDP_@~?5?KYCdA?70`e=AN`hm*PSt^BC zpke^3&8|aDSu?+azWOU$!<9z^CqnTEbCZF3hF2P4W~b_N1Y`Flh=WQlT|Ok+NAHtz zQS6sCJVHb43P%(m`zJ@$kpdUFC-Gcu8UJcY%kE%&P$?YQgu>8X#B{Zfmo8#1om@IP zIWlQal87i@?5>HVQDh;~Fvq(ZF6oKrN;F0VtC9Hps|%%WJ~+97JbvpHX+Q8#@{LBA ziupg9-_Tg3p^CihHF8`#fWyB3Gk=jlcadhTePMzv;ou2DI}*}SvACK@sRO9N94vUz zw9|uV+wF6Zq(*wbYpe4}IbC{x2R+cr=GSZ;<&u$Xlf0PW4??K#2K*r<(mOaicgL-5 z>%PGm{OCyq)3|LfOjz17+LOg_O4j9zO~YORie{KUZ|e#C?B4?dwoLCWrKr}oPHyJS&ysq2DY(;>YHYuny$a0v_h`N!jL?trJ<1_&a7 zxJFafK2U`7ethiTmDus5!*}xu}71WQ#>{j`ktZ{_USiWiy@mA!5)9 z^g(u6MBv~f{os1zc9O+yqG1n#2M(U{8X(k_3J{44+sx7OPcqQoUIYyo!qK7sBLC$9)AaxZ#1&oxo_DjSQ7Y-(}Hm+JQ0rK zU*H2yBnP&!!|3NB8^^ch43^MgpJU)R{{IFrUf-k5ri~FOvoHx($uci0&^oOg56pXXWZX)3Zu697_jD zIIWrtUWKxEBB~@MB09-6f>N}4Cpd5QhnKPeO`i=4q5VJ$dvr#Ou2L6DH0cYusV`)< zAB$7rx~|!m@oVdX*DKM4T?;E{nKp7`rCLXnZdA)UY0)7B)OqP3KX1-HLWzEA)bew6 zON;g`X(JN1-sINT+!=kon}Rn2SNAq|a&7oU-!vCuY|htnuVJFG(^5ETF8)>s0eoU~ zOJ4t4P$-W5i#uiR-J6M}@c1n3G{RJ$1=VFZWN$q0N%fE#tgvX;)^qOmWYnvk+9$>2 zEifdQZ&K6Kwly(2XdbZNbmDY|)kD+1 zn%W{weSgo5YvVmqejZOlba}$J@1e8JaXG>sbiblQE_RT(*%7GdD;fbh^ZHyWA8(SM zwO%=p^}kwX8s4c6080QMg!gDSZPKZ;#4sQ4agc0dXG=~Q_KH+Ad&AOVQ0u@x1BZpf4gF--ZbJyUlcsfN~QdOwuX)z`BKaC;l_DVIu`DD)sLS5_GcN=0X+4k zx2}zcExq3CMkW35hE$2ZINDV-5F~GbVRaJ(B6iy0EO^)xR>7rGt$EWM^ZdcB$-#s` zffXp$mInyuKy*n`4^yO!8^;|F$4>W z|Eayhl4{>xEK0?ifbM71^!$l8$Nz}rGFLxl)Dk&-WpiFkikyGX6#AzTSSB~Pw`jLz z);K5!A+YimsE`y1YvLji zmg?iBLxX)@k)Zea>^p{9MH0HkrL)kM2d6nmpIJ1?2UXn|eOXbN_z z&50mZ_Ptu%l&O#IyBc9B#O~@`+Q4(gPy@IEQNDS}N78t&01#_>$dKiz?0Xb90b-~; zZO&t>Am|OKfIEjKFAH}=OT-t(8URy_a)}*bj%ytSW~4@PN3+y;nZ>;}L3>CLAc?td zbl->VBR(v;T%vGQW&9>&9haM8;73n@Fb(;fQklkT_E5$GksUc!J_IA%4 zZ>L@#duXSX-gn_*2c`N;Zj60RptFVqhof1)TYy$X;LW{9Tq>YojTY?|~LCx2=tBWmzIOB|I6Hcf~ZAL>?tn4!<`&<@#4dn^@CCj2~ zQ%rG^Z3m0LFH?h(L&Sc@MYcPz#jfFW)^v*LP#RAZP#u1^vxeT~=5;o0TOvCDN~XEar0Kx{;uKHK#sT$_ z8IMnMedr8xpYY}H)w+WR9@FYHZXu)PO%R1d$J&}+-&O}v6;AyX6FHY zPYBsy#TKJ{CojwX@6!3d|Mzd^nj~z;xn8a|($rR%w?9xNZ4g(6(X}|nTGV@#GhvNV z(K_|ZIr|U7ny&V{iX=MX_7JXk>4@@~acc2gKe`y_t*80IZDj!0vJ`mknS~gn>>W7~ z%JoUF`}bRF$F!a;H&B0juIer>Pjw{83<>C&@DLmWZc#xWC>249crg%qWIp7@L@o<02M^QUsl8n zsaD0}Vy^Slh$TZG#NB#k!=)XT1%=tz-{L(}oLOTb!Y{1hW=lYHL#k`{P?l0K<1Ix!s!O_8^-Tn^3THD;6Ir(0XN%(zQB2P@$mPeLlwmUbwf!BfvCqTdF- zCI>IjG=rxC8RVG`HsJWEBpODUL3(&PZqK}x19W|m%hiRLQeaA;YtA!LZu-4%rgi+& zm)Y{Rqf-Uy7}*|`7JL7$%9B&n0jdgDCX)iw)ux@C>;CJ~>)+tF5r-iW>y!BARf&lJ z{FwVD4RS6Rd!o728SQ@~4k5*Fceds>`4DN7V)EW?ZqMjjyBQfW%MUs4zE_^*Kk!4p z1%1dn-|-Ep){(Izn~u1v&3x{3LSA(@|BsPbmv9}8fFu51ua-)e`UCQo{T>uIkAYaXzFPJ@^=`oj|Lj(d#{N@-W8LxQD@xCvM!Y zFgkW158p}ee_hr<1rOlekWiaR2x;K8CFP(-$?HkfAptmX@^F!y(X`3PNeIK z|Jp2JrtThA#z3U$xX@~E6;*j851aNlvH&8;_QqDaZOS)&-Bw|PTVmviHjY@eEFZtl zRvxrxBkjfxc0vfmG6)MQ?V^R#epq@Q*U>NA=slqlv$Ie9hP3o#`3?IQMgAuu4AM5) z646ha)^lmJ{xCJoKXCO>3+u(QviC2}%5r?y&%29hv^{iJJ>Uhuz8YDqZUyS+ll#vT zR+*pCM&zYbGDz=d>ECHHIOigm6}-3gSb?;&Jdnflq}386lAm#y;D=0b$kG~jA~pLT zEt6J*9?rii^7*-SaF$br*kM^_Bms#brQlcgx!XQd(MuGi`?{59arkv*Y+Yz5$D994 zrPj|T4g$x|^4Q$nGOt>tu53N{^@_*;sCObp_T7z}NuR}4vlHxjf^Tcs3bzeM_re+u zjxX<>v_n)T70Oz5rsm^xL!XiIlkQ6u{u>v&nMM2Vq@~>n#7sWI8%avnX}tK_>Jpbv$}p#Hx#)$UOJc|)j$Z#8&VBj|aNo^JA$x+vU;j$qTFpYQ6+m<{pJxeg4M zbCZ`(IYDkO@(s8d7KL>`3ZnQHi(Xg3*qrmgkI3G)<~F~ZbmdL?QHrX>?}Fc})5(sB zU(0J3asE6s9}N8)|1Ml+@0V%ymjwuXcKhTfkNJhm5D-ZS-anAYSBlp9x&ZUm$;aSNX zF#K5M$_JcgoM;cL4|d|--xD!pDso>}Hzpn3Td>Df`;$YmcLLNf|6C2RT)(!r6vdMf zH2K&&0wu5#U7IqJvx^k^(D=J6tJbG;>wqeoKEIvCr9F~`$DiG&`?1PYOUy_L+dXDW zHOMnx-&9PSSF z!Gl*1I39GhI^W<1jIn~hr91m|-1P1mqkkak<3~D7SjLy(f6sAqa2&1Gu#O;C(U!!R ziTu%_)+m}l*~Q(~!mYjhjiHi3%1Qm$FIRv!wKi39+9;~R@|mkW)$yYs%yEw)(kRO4>1E}2zd zso*gYN~8KyFZ33@U-rJ^QlQpT?G7C#3;$_$>7^I<5E-q@cge7A5aa7^dEQ?UH-ld%eN_PNwl3bk@i+m~`)E zs;Yh1U}&(y+Qhuy)i>oWUj#a9ZhuMb$oY|$0r0~K1o0z z;gXuHyhul3i`P*m$WP+=*yK zA`tErU-pN%sxX;w3lvfn?eedcdFwria4BAzX2^c7F6DVF*u#%0^bl%2MQI046}C-02YW3p+~ErQn@GGJ)_M(Ow;dWwTwjesZO(JjrE0@G zG6o!;W)dG{2%46^e`eI;>KQn$XT7{xGINb~GL zUWB~?s!bI3!gg%Nu|{CtFPI{mU&m0(PUhj~j$86&5QQLJW3ni~j32NkShMcM3%(yxDL6y|{^N5#n(Kr!V`<$?Z=lr7qdFq6Ux$KAq$5ZEBoOn|hKrK4Zi5GXZK!#cI!J<-NU zCvLf;6~^hk;Mm*Y%BnatAlk+#5aAM+DLszrJ?5*&N&Rp&C6V@t!Gm9RFA@&UgAgf> z!H+)QOBi`!cV0Gw8`r!!5hNyy<%YmIPb@eO^l+5fIkU2(e43{EcdFBc)R<37rH3|T zO$=Ih{5*>qQYSZO4qb^DEnX5uziYR+`~+qo@k^p8G8{KCBvFznJ`R53U%Cy=(uqzop`LFg&EVC4Xc|w;I{wWcYK=_Z6uSvGCaXv=H_&Nlpciajy1px z=qFMQ7fh@g%`WLMdv_l%D0W5yMfQ?E*;c4&1+PSc$IJN|Gsdd;4P1q17 zZ*p@so(xhC)zBPBNiDl1v+<#MuPVc(AZxWlXCTGl-HbWb327t9bHoCpRPUD6WH!D~ zxwX7>=tr;drV|}a4^AY{oM9=6aAWI4gC5@rrXESE6VSlN6Q#@qIr&I?)tTZ!S07vA z;Jv~+qrDvfui|g@ZX(F1_iEP=s<*k~4u?cr4zqCKjONJhB=UmEbjCh(<8;&V?Rwi} z_-P7B-{~8pD~)rUitfdFya++a_~G`Ra}U?n_nyyA67jeZG*pb#2Q(#UiKcVlC9Tb5 z+ezt+()X`yYA;f0-Ac(vhNsm>mxJfD%S*Hj2XC%*0fO&UvCGjLJ;G7eR9={qb$TyT zGvFj6Iv3DzQ{5Ps*S3iCV6UQWv(N7F$#l9rGB0}=zO)<17f)VbS-GtAxr!adxVh^@ zaN@WC0>7G*J^U1Rx76c?L|VWnUrx5)@_{$F_(^LrvyVH`&zP9BV=bu@r5U!C|0EiI z=(t2z#5{cD&-ux#-4(~KyRxznyT`WmfbkjCy2lN_^^iNf$;!*XB|>rnZ#9|9-7q!) zml3nMLzsl#?muHaFH1YKg_fe^<0FkqpYKA0bu3DdQPhBih`l>Z4}WfMvv`PU{D3eZ zK!(j8ch^zBpojW|B`Ge=TgALx}ddz!WJ2NLG-gEyW$6EONH#uE8r(i0%@5YQx4Btu7L zr7V%2B=DSn5!!CcltAX6_g_~AP+FYSCbE_Q5r1cQr-x6t>D*%>!LHyJYxTr>%GBO(B)6#H0LBf^G$B$AUIF*|Q~TBpF&v5GZK3w4RT z1i&^WFv_FRt6la=>s1+jo271)SkW^E{jh4)rzso#J2U98r_L!|S5vRm5q99#FD5th z?W6*w5HgA^d$acgeZLQOG`2@4NSotd#Yzu#d3^&N#rg@Js;s=&DST3_-)K2KyrtqN)X9}=_CT}OjE=A1AHhpw2glNe8{EdZ&Jb5(Q zJMofrIDKUu!Q6@N-|mbj?xxF$F>F{YQjZXc^4hK$5KCMhG771Wdx})Du3}wtvv--prxMy&gJ}*<`zTt=o4b zcO4-ky_eB~*QGXyC+}M5#t?YRqizUP1GlrBUPOp34S#_|3y-e*qvqPHooG*~fcp=9 zM|*8rJqB+8Zy4xZ?eX=go?Xs1lj(2)^tXRk+oEK3k3uP>ie2Gwe;Nxvr*~CyJ|~m? z_*=%;ZJV&6v6j+z!PKi~gLL05Mb52GS3}_K-78Q-PH{i9Pvk8B)42JLMC|lSvw>SC zq=ah^9F>=8y0vA2CaB)0^zgepse21ugUDBMtNMY@5-(G&Gn>7OTJ5?-SoLchO1KgaF=9&8a|Q8s7ypUPH|0h)<0;=SQ6Dy$-6vmaaX29KSac9IhKA zym6VREH*#si_;Ba*JN;Kzx{J*9YFvWNbK=E-dsfn0}al1zc3uLr-)&h6e~A2I$E=q zc7ItIC6(IT!wj;w^G(U`d0mqW(+vUyPu@FUCN$siC{g!VW52l! zXdv%wF1xA#*sc1&4L?UL;I~z!2fEd=@bPd6u)vo=>n=`5Gdr_fr#fG=nfxffG2nX2 zb0*7d+h2YP!yy5nGXOf%Nx!?%5Pexa^tiHb(tka47IUHyuzuTl?l!wpz{hSiJC;oP zP_dhd{CWKf+qLx{evap+#Pn9Bv!|xS32(m0MJ2P{ zlf@B&fQ6&(SjLh&?sl;#PVRm0*n?gEHfp>3MYu6=A$+nIr@Z_T16)>9=L;^RA4+y{ z1iqWG!`_iA)^NLwWv|6uu$7+*V>698w%QrW*>?t;jhjJhrRj?SN}4Z17C?Xe)O!vq130?tqZ(r-d%- zvcBA`tVXHV?m$0u&jzr(&p>d84fXVJ$vVD^;^}i|XF;_cR;JPCAkQ0}n+#z{pf4x_ zV)EJb*YpjBbAmP-r!HiC{rO17QY^w8fBt*M;0&tQ(*mL0*(&hK0=NC7CP3nU1(Y9n5vBSqSYa*#7CcO`Y>cb4`Q?)sD~t3 zDA%#BC)1-Iul7S%)9|SnJG028$f$5>hUZkdOOZqK0n)s`6@SndeF)TTp@+^2c~-Sw zrm6~hnzgs^7%*zOKCT*b7_K)o24pCc-kU_WL&}6zvDf8FGbq$H1z)kI{2|;XP`&*c zoq2NZM-n+Xt7p+GfQ_Cp{8DDOH=HHZ|JL-f#CnbfVz zfIrEaRVn?Dr!og*%KhIjAY@Xn?OZ&~I1sv>=&Dn1f{T#?Tu;0Z0E$Ipy}{;4ejo%r z?UiL|EVu`p6WT6+5slWmXyCji0s*$WAY*yrZ#EJ0dsXO@i58U4*e0@zNip$tCpwI( zqYK^Agv6Yl)D%FY5h}Mdbr|kAUcoo6z4dp1qZuyq6-aed)ww4(ip_xl5t}vI7f8>F6fkDs4_OA>Hr5_#9%DFOK=unQgSlGNdt zvT@1IYM{nom0SH)K_}W-Qf1xn28{Z7DI1WV$!4VKDl!hy%X&X8FG#yy>ku|H2c0$p zocg!}VKA2=CPo1NQrRgxCFQ2GV5}AHL&01MQXkFu-4Iu;TM|$9M0cJUW?;}=L4|9b zQ|#jNsN3xN+)qefOi@N15!sYJix-JQEC#y~GJDbtat-+H$(#;%rPKR1rQRe)0rsET zX0>h;SwcXDXi`Al8`BIM(oI#PO(R3$DGV{Xsixs$O>X5a(?C|M(H>`FdM83O$b)Hp0tHpY)j5-M?6?Y(;R2@hX%iuSJOtqzb~$Orf54$cFx`zdIH+Qmg@wvQv)u>?FgiiZnRQV(P~iR}z(?T<5M{wbm`& zZlhFWd==KLYXbEl)J@c;C=n(_Pw@Jm69+VRwkoTuD#JXSwj$7H!DQR3 z>>-S*rmWt+WV3W77&rMIh%ro}PCr|_C4d4zv0B#QpNy``FNv(`aYG(?@aJi-N_NEk zws9>~n}v>PiE+>>^MFYvYQ%UTW2)GxD2qEK?PW+cd0{m=UFy+30WQTZGoK@r$GXLR z>DdLvBz!WFMxbZxXTkvUPNFi_a9Uh9|;0+82ms4 zC#7t-?(yR;)`;sbEc;?&zV~{=>x6{lZHm#}GDoMXdqR{0YZfey#ltfvr3N#{>-JV9VQwV#@*v=B1${ z`&%haZ4XelhcuOeWb{g)!gZi57??&E(HG6@Nf~WPLzEG*fz$V9%Hd|5o5I1ynd<-T} zisqr#OmKubiaa6hPhS3(5>EuN^wVz}hh{WAtdQ;9m?{5}nX}N>$1-xEGLXeehVloB z-JVV2_voa=;`PwiQz!R^;YE??YN1HP{eIg#UsYSj?o(lKKBta zYUeb%&;cyv_#o2Mmm7e?P9nFdw4U5cI-siw&1IvRr|QT$Ia0*@HVy0x5cAD=>RYCf zx+zil1s)bzW40afKCT> z)^)ExYG)2ExSdoud9x~L^Wm(fo3`Yce%ytUwU3$TiWZZ_Xk zN8i5LBh4`3l4u1V7~K{e7)6V>Esk>tKEJ-=2RIeppX&XSe=aL+NrLw?*~d-!DpOE1 zXQaE<8!?T6EX&ptj#o2K<;4-?0=_;R+(nkc4m1!ILRZ@sl=-V0e^}b^*41I6iv68? zZ<{S+2C6R`NjlkIbo#&}$dZa|^3`UrJ6HJ9Ka;;SW9Rwr-T=R##<#yZ#@N|Kf<2jP zs}btXVNukL;}bPkGEf}AJsRlAK#(JNxr0af=)}ccdbHcC6!iYF=k3W-pvvl1dmb45 zIgGDX1GC2|+$ZM=hGZsDBQCAxj4O2KE0-Xk|~m?yc^>ZVGbcKCN9Df1cK^OqnNga%B4hijOJ9PWWz|hvh#V7k{9b z$@gJV)JoRFO?R*WE-oM!nX%*sbXc_R0#Wf1P!^t+Y5~f0GyM)lWa?*O2|%43I~$;D zp)Q=>+lRw!%r@3Ab({gs=T6q}k{TqeMqx?Z?T>7&yn$YqsWMP|-2}+`*y_NYKZ5L7 zfN>)<{a9+!tDT|Rc!&j*4ng{5WK=x^noo=)JYjbOqXsaO*lFOsX`s|Ogh`hH9SG5{ z!yn-I=!`b6Wl$_20n%T`j}aa=B$vsP$J<5G&(!VJZVpTA*jq1c7+MZ58NF&+#NG1* zNZdeP26ssVTt4?NeKTtzYy=?ZxomUK^|xGTgTJn!`2XB|e5QKLk!H$XpOn9J>6Dnp MeV8g%`RR-Q3k77-dH?_b literal 0 HcmV?d00001 diff --git a/features/@app-core/components/BackButton.tsx b/features/@app-core/components/BackButton.tsx new file mode 100644 index 0000000..f6bae09 --- /dev/null +++ b/features/@app-core/components/BackButton.tsx @@ -0,0 +1,51 @@ +import React from 'react' +import { View, Text, Link } from '../components/styled' +import { useRouter } from '@green-stack/navigation/useRouter' +import { ArrowLeftFilled } from '../icons/ArrowLeftFilled' +import { schema, z } from '@green-stack/schemas' + +/* --- Props ----------------------------------------------------------------------------------- */ + +const BackButtonProps = schema('BackButtonProps', { + backLink: z.string().default('/'), +}) + +type BackButtonProps = z.input + +/* --- --------------------------------------------------------------------------- */ + +const BackButton = (props: BackButtonProps) => { + // Props + const { backLink } = BackButtonProps.applyDefaults(props) + + // Routing + const { canGoBack, back } = useRouter() + + // Vars + const showBackButton = canGoBack() + + // -- Render -- + + return ( + + + + {showBackButton ? ( + + {`Back`} + + ) : ( + + {`Back`} + + )} + + ) +} + +/* --- Exports --------------------------------------------------------------------------------- */ + +export default BackButton diff --git a/features/@app-core/components/styled.tsx b/features/@app-core/components/styled.tsx index 603144e..c92d3e6 100644 --- a/features/@app-core/components/styled.tsx +++ b/features/@app-core/components/styled.tsx @@ -1,6 +1,6 @@ import type { KnownRoutes } from '@app/registries/routeManifest.generated' import { styled } from 'nativewind' -import { Text as RNText, View as RNView } from 'react-native' +import { Text as RNText, View as RNView, ScrollView as RNScrollView } from 'react-native' import { Link as UniversalLink } from '@green-stack/navigation/Link' import { UniversalLinkProps } from '@green-stack/navigation/Link.types' import { Image as UniversalImage } from '@green-stack/components/Image' @@ -13,20 +13,20 @@ export const Image = styled(UniversalImage, '') /* --- Typography ------------------------------------------------------------------------------ */ -export const H1 = styled(RNText, 'font-bold text-2xl text-primary-500') -export const H2 = styled(RNText, 'font-bold text-xl text-primary-500') -export const H3 = styled(RNText, 'font-bold text-lg text-primary-500') +export const H1 = styled(RNText, 'font-bold text-2xl text-primary-100') +export const H2 = styled(RNText, 'font-bold text-xl text-primary-100') +export const H3 = styled(RNText, 'font-bold text-lg text-primary-100') export const P = styled(RNText, 'text-base') /* --- Fix for Next Link ----------------------------------------------------------------------- */ export const Link = (props: UniversalLinkProps) => { - const StyledLink = styled(UniversalLink, 'text-blue-500 underline') // @ts-ignore + const StyledLink = styled(UniversalLink, 'text-blue-300 underline') // @ts-ignore return } -export const LinkText = styled(RNText, 'text-blue-500 underline') +export const LinkText = styled(RNText, 'text-blue-300 underline') export const TextLink = (props: Omit, 'className'> & { className?: string }) => { const { className, style, children, ...universalLinkProps } = props diff --git a/features/@app-core/constants/testableFeatures.ts b/features/@app-core/constants/testableFeatures.ts new file mode 100644 index 0000000..14f614f --- /dev/null +++ b/features/@app-core/constants/testableFeatures.ts @@ -0,0 +1,7 @@ + +export const testableFeatures = [ + { + title: 'Test Images?', + link: '/images' + }, +] diff --git a/features/@app-core/icons/ArrowLeftFilled.tsx b/features/@app-core/icons/ArrowLeftFilled.tsx new file mode 100644 index 0000000..f97481a --- /dev/null +++ b/features/@app-core/icons/ArrowLeftFilled.tsx @@ -0,0 +1,28 @@ +import * as React from 'react' +import Svg, { Path } from 'react-native-svg' +import type { SvgProps } from 'react-native-svg' + +/* --- Types ----------------------------------------------------------------------------------- */ + +type IconProps = SvgProps & { fill?: string; stroke?: string; size?: number } + +/* --- --------------------------------------------------------------------- */ + +export const ArrowLeftFilled = ({ size = 24, fill = '#333333', ...svgProps }: IconProps) => ( + + + + +) diff --git a/features/@app-core/icons/ArrowRightFilled.tsx b/features/@app-core/icons/ArrowRightFilled.tsx new file mode 100644 index 0000000..36038d6 --- /dev/null +++ b/features/@app-core/icons/ArrowRightFilled.tsx @@ -0,0 +1,28 @@ +import * as React from 'react' +import Svg, { Path } from 'react-native-svg' +import type { SvgProps } from 'react-native-svg' + +/* --- Types ----------------------------------------------------------------------------------- */ + +type IconProps = SvgProps & { fill?: string; stroke?: string; size?: number } + +/* --- --------------------------------------------------------------------- */ + +export const ArrowRightFilled = ({ size = 24, fill = '#333333', ...svgProps }: IconProps) => ( + + + + +) diff --git a/features/@app-core/screens/HomeScreen.tsx b/features/@app-core/screens/HomeScreen.tsx index 44df11d..4b6b318 100644 --- a/features/@app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/HomeScreen.tsx @@ -1,10 +1,19 @@ import React from 'react' -import { HydratedRouteProps, createQueryBridge } from '@green-stack/navigation/UniversalRouteScreen.helpers' -import { View, Link, Image, P, H3, Text } from '../components/styled' +import { ScrollView } from 'react-native' +import { HydratedRouteProps, createQueryBridge } from '@green-stack/navigation' +import { View, Link, Image, P, H1, H3, Text, H2 } from '../components/styled' import { healthCheckFetcher } from '../resolvers/healthCheck.query' +import { ArrowRightFilled } from '../icons/ArrowRightFilled' +import { isLargeTablet } from '../appConfig' /* --- Data Fetching --------------------------------------------------------------------------- */ +// -i- Think of a `QueryBridge` as a bridge between the route component and the data-fetching logic. +// -i- It's a way to fetch data for a route, based on the route's parameters. + +// -i- The closest thing you could compare it to is next.js's `getServerSideProps`... +// -i- Except it also works to fetch data on your Native App, next to just during Web SSR or CSR. + export const queryBridge = createQueryBridge({ routeDataFetcher: healthCheckFetcher, routeParamsToQueryKey: (routeParams) => ['healthCheck', routeParams.echo], @@ -12,43 +21,244 @@ export const queryBridge = createQueryBridge({ fetcherDataToProps: (fetcherData) => ({ serverHealth: fetcherData?.healthCheck }), }) +/* --- Types ----------------------------------------------------------------------------------- */ + +type HomeScreenProps = Prettify> + /* --- --------------------------------------------------------------------------- */ -const HomeScreen = (props: HydratedRouteProps) => { +const HomeScreen = (props: HomeScreenProps) => { // Props const { serverHealth } = props // -- Render -- return ( - - -

Full-Product, Universal App with the GREEN-stack 🚀

-

- Open HomeScreen.tsx in features/@app-core/screens to start working on your app -

- - Test navigation - - - Test images - - {serverHealth?.graphURL ? ( - - Test GraphQL - - ) : ( -

- {'Loading server health...'} -

- )} - - Docs - -
+ <> + + + + + + + + {/* Side Icons */} + + + + FullProduct.dev Starterkit Logo + + + FullProduct.dev Starterkit Logo + + + + {/* Logo & Tagline */} + + + + + FullProduct.dev Starterkit Logo + + + +

+ FullProduct.dev ⚡️ +

+ +

+ Your Universal App Starterkit +

+
+ +
+ + {/* Learn More */} + + + + + + + + + + )} + summary="Test universal navigation for Web & Mobile, sharing up to 90% UI code" + href="/subpages/Universal%20Nav" + /> + + + + + {/* Made by */} + + + + + + + + By + + + + + Thorr / codinsonn's Profile Picture + + + + + Thorr ⚡️ codinsonn.dev + + + + + + + + +
+ + {/* Start from */} + + + + + + ) } +/* --- ----------------------------------------------------------------------- */ + +const GettingStarted = () => ( + +

+ + Start from + @app-core/screens/HomeScreen.tsx + +

+
+) + +/* --- -------------------------------------------------------------------------- */ + +const InfoSection = (props: { title: string, titleIcon?: any, summary: string, href: string }) => ( + + +

+ {props.title} +

+ {!!props.titleIcon && ( + <> + + {props.titleIcon} + + )} + +

+ {props.summary} +

+
+) + /* --- Exports --------------------------------------------------------------------------------- */ export default HomeScreen diff --git a/features/@app-core/screens/ImagesScreen.tsx b/features/@app-core/screens/ImagesScreen.tsx index 13390d7..6f8dfab 100644 --- a/features/@app-core/screens/ImagesScreen.tsx +++ b/features/@app-core/screens/ImagesScreen.tsx @@ -1,6 +1,6 @@ -import type { HydratedRouteProps } from '@green-stack/navigation/UniversalRouteScreen.helpers' import React from 'react' -import { View, Text, Image, Link } from '../components/styled' +import { View, Text, Image } from '../components/styled' +import BackButton from '../components/BackButton' /* --- Images ---------------------------------------------------------------------------------- */ @@ -8,34 +8,42 @@ const greenStackLogo = require('../assets/green-stack-logo.png') /* --- ------------------------------------------------------------------------- */ -const ImagesScreen = (props: HydratedRouteProps) => { - return ( - - - {`< Back`} - - {/* - 1 - */} - - src=static-require | width: 60 | height: 60 - {/* - 2 - */} - - src=external-url | width: 60 | height: 60 - {/* - 3 - */} - - - - wrapper=50x80, relative | fill=true - {/* - 4 - */} - - - - wrapper=80x60, relative | fill | contentFit=contain +const ImagesScreen = () => ( + + + {/* - Example 1 - */} + Example Green Stack Logo + src=static-require | width: 60 | height: 60 + {/* - Example 2 - */} + Example Profile picture + src=external-url | width: 60 | height: 60 + {/* - Example 3 - */} + + Example Green Stack Logo - ) -} + wrapper=50x80, relative | fill=true + {/* - Example 4 - */} + + Example Green Stack Logo + + wrapper=80x60, relative | fill | contentFit=contain + +) /* --- Exports --------------------------------------------------------------------------------- */ diff --git a/features/@app-core/screens/SlugScreen.tsx b/features/@app-core/screens/SlugScreen.tsx index 247e10d..b2110ec 100644 --- a/features/@app-core/screens/SlugScreen.tsx +++ b/features/@app-core/screens/SlugScreen.tsx @@ -1,57 +1,84 @@ -import React from 'react' +import React, { Fragment } from 'react' import { useRouteParams } from '@green-stack/navigation/useRouteParams' -import { View, Text, H3, P, Link } from '../components/styled' +import { View, Text, H1, P, Link } from '../components/styled' import { useRouter } from '@green-stack/navigation/useRouter' import type { UniversalRouteScreenProps } from '@green-stack/navigation/useRouteParams.types' +import BackButton from '../components/BackButton' +import { testableFeatures } from '../constants/testableFeatures' /* --- --------------------------------------------------------------------------- */ const SlugScreen = (props: UniversalRouteScreenProps) => { // Routing - const { slug, count = '' } = useRouteParams(props) - const { canGoBack, back, push, navigate, replace, setParams } = useRouter() - - // Vars - const showBackButton = canGoBack() + const { slug, count = 0 } = useRouteParams(props) + const { push, navigate, replace, setParams } = useRouter() // -- Render -- return ( - - {showBackButton && ( - - {`< Back`} - - )} -

- Page slug: {decodeURIComponent(slug as string)} - {!!count && ` | count: ${count}`} -

-

- Need a more robust, Fully-Stacked, Full-Product, Universal App Setup? + + +

+ slug - {decodeURIComponent(slug as string)} +

+ +

+ Universal URL routing built on Expo & Next.js routers, shared between Web and Native. e.g. Tap to change the count {`(${count})`} param:

- - Check out the GREEN Stack Starter - - push('/subpages/push')}> + + setParams({ count: `${+count + 1}` })}> + {`router.setParams()`} + + + {/* Nav & Routing Tests */} + + + + push('/subpages/push')}> {`router.push()`} - navigate('/subpages/navigate')}> + + navigate('/subpages/navigate')}> {`router.navigate()`} - replace('/subpages/replace')}> + + replace('/subpages/replace')}> {`router.replace()`} - setParams({ count: `${+count + 1}` })}> - {`router.setParams()`} - + + {/* Other Tests */} + + + + {testableFeatures.map((feature, index) => ( + + + {feature.title} + + {index < (testableFeatures.length - 1) && ( + + )} + + ))} + + {/* Try the full startkit? */} + + + +

+ Upgrade your Universal App Setup? +

+ + FullProduct.dev + +
) } diff --git a/features/@app-core/screens/UniversalAppProviders.tsx b/features/@app-core/screens/UniversalAppProviders.tsx index 27c3bcc..750c2ed 100644 --- a/features/@app-core/screens/UniversalAppProviders.tsx +++ b/features/@app-core/screens/UniversalAppProviders.tsx @@ -20,11 +20,29 @@ const UniversalAppProviders = (props: UniversalAppProvidersProps) => { // Props const { children, contextImage, contextLink, contextRouter, useContextRouteParams } = props + // State + const [isDebugMode, setIsDebugMode] = React.useState(false) + + // Flags + const isExpo = props.isExpo && !props.isNext + const isNext = props.isNext && !props.isExpo + // -- Render -- return ( - + {children} diff --git a/features/@app-core/tsconfig.json b/features/@app-core/tsconfig.json index fea6b42..af86644 100644 --- a/features/@app-core/tsconfig.json +++ b/features/@app-core/tsconfig.json @@ -36,11 +36,12 @@ "@app/middleware/*": ["../../features/@app-core/middleware/*"], "@green-stack/schemas": ["../../packages/@green-stack-core/schemas"], "@green-stack/schemas/*": ["../../packages/@green-stack-core/schemas/*"], + "@green-stack/navigation": ["../../packages/@green-stack-core/navigation/index.ts"], + "@green-stack/navigation/*": ["../../packages/@green-stack-core/navigation/*"], "@green-stack/utils/*": ["../../packages/@green-stack-core/utils/*"], "@green-stack/hooks/*": ["../../packages/@green-stack-core/hooks/*"], "@green-stack/components/*": ["../../packages/@green-stack-core/components/*"], "@green-stack/styles/*": ["../../packages/@green-stack-core/styles/*"], - "@green-stack/navigation/*": ["../../packages/@green-stack-core/navigation/*"], "@green-stack/context/*": ["../../packages/@green-stack-core/context/*"], "@green-stack/scripts/*": ["../../packages/@green-stack-core/scripts/*"], "@db/models": ["../../packages/@db-driver/models.ts"], diff --git a/packages/@green-stack-core/components/Image.next.tsx b/packages/@green-stack-core/components/Image.next.tsx index 373c62f..7e85214 100644 --- a/packages/@green-stack-core/components/Image.next.tsx +++ b/packages/@green-stack-core/components/Image.next.tsx @@ -21,7 +21,7 @@ const Image = (props: UniversalImageProps): JSX.Element => { nextPlaceholder, /* - Next.js - */ loader, - fill, + fill: fillProp, sizes, quality, onLoad, @@ -40,10 +40,14 @@ const Image = (props: UniversalImageProps): JSX.Element => { // -- Overrides -- + const fill = fillProp === true || width === '100%' || height === '100%' + if (fill) finalStyle.height = '100%' if (fill) finalStyle.width = '100%' if (fill) finalStyle.objectFit = contentFit || 'cover' + const finalClassName = [className, nativeWindClassName].filter(Boolean).join(' ') + // -- Render -- return ( @@ -51,9 +55,9 @@ const Image = (props: UniversalImageProps): JSX.Element => { /* - Universal - */ src={src as any} alt={alt || accessibilityLabel!} - width={width as any} - height={height as any} - className={[className, nativeWindClassName].filter(Boolean).join(' ')} + width={fill ? undefined : width as any} + height={fill ? undefined : height as any} + className={finalClassName} style={finalStyle} priority={priority === 'high'} onError={onError as any} diff --git a/packages/@green-stack-core/context/CoreContext.tsx b/packages/@green-stack-core/context/CoreContext.tsx index 11f8b41..9d59e10 100644 --- a/packages/@green-stack-core/context/CoreContext.tsx +++ b/packages/@green-stack-core/context/CoreContext.tsx @@ -16,15 +16,23 @@ import { KnownRoutes } from '@app/registries/routeManifest.generated' /* --- Types ----------------------------------------------------------------------------------- */ export type CoreContextType = { + // Components contextImage: ((props: UniversalImageProps) => JSX.Element) & UniversalImageMethods contextLink: (props: UniversalLinkProps) => JSX.Element contextRouter: UniversalRouterMethods + // Hooks useContextRouteParams: (routeScreenProps: UniversalRouteScreenProps) => ReturnType + // Flags + isExpo?: boolean + isNext?: boolean + isDebugMode?: boolean + // Setters + setIsDebugMode?: (isDebugMode: boolean) => void } /* --- Dummy ----------------------------------------------------------------------------------- */ -const createDummyComponent = (contextComponentName: string) => (props: any) => { +const createDummyComponent = (contextComponentName: string) => () => { throw new Error(`CoreContext was not provided with a ${contextComponentName}. Please provide one in UniversalAppProviders.`) } @@ -35,4 +43,7 @@ export const CoreContext = React.createContext({ contextLink: createDummyComponent('contextLink'), contextRouter: null as unknown as UniversalRouterMethods, useContextRouteParams: () => ({}), + isExpo: undefined, + isNext: undefined, + isDebugMode: false, }) diff --git a/packages/@green-stack-core/navigation/Link.expo.tsx b/packages/@green-stack-core/navigation/Link.expo.tsx index 17230de..f89f046 100644 --- a/packages/@green-stack-core/navigation/Link.expo.tsx +++ b/packages/@green-stack-core/navigation/Link.expo.tsx @@ -23,7 +23,8 @@ export const Link = < nativeID, allowFontScaling, numberOfLines, - maxFontSizeMultiplier + maxFontSizeMultiplier, + suppressHighlighting = true, } = props // -- Inject params? -- @@ -57,6 +58,7 @@ export const Link = < allowFontScaling={allowFontScaling} numberOfLines={numberOfLines} maxFontSizeMultiplier={maxFontSizeMultiplier} + suppressHighlighting={suppressHighlighting} > {children} diff --git a/packages/@green-stack-core/navigation/Link.types.ts b/packages/@green-stack-core/navigation/Link.types.ts index fba3fb3..e19d2ba 100644 --- a/packages/@green-stack-core/navigation/Link.types.ts +++ b/packages/@green-stack-core/navigation/Link.types.ts @@ -55,6 +55,7 @@ export type UniversalLinkProps = { allowFontScaling?: ExpoLinkProps['allowFontScaling']; numberOfLines?: ExpoLinkProps['numberOfLines']; maxFontSizeMultiplier?: ExpoLinkProps['maxFontSizeMultiplier']; + suppressHighlighting?: ExpoLinkProps['suppressHighlighting']; // - Next - diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts b/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts index 34f4195..6366ff6 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.helpers.ts @@ -97,7 +97,7 @@ export const createQueryBridge = < /* --- Defaults -------------------------------------------------------------------------------- */ export const DEFAULT_QUERY_BRIDGE = { - routeParamsToQueryKey: (routeParams: Record) => JSON.stringify(routeParams), + routeParamsToQueryKey: (routeParams: Record) => [JSON.stringify(routeParams)], routeParamsToQueryInput: (routeParams: Record) => routeParams, routeDataFetcher: async () => ({}), initialData: {}, diff --git a/packages/@green-stack-core/navigation/index.ts b/packages/@green-stack-core/navigation/index.ts new file mode 100644 index 0000000..494d6fc --- /dev/null +++ b/packages/@green-stack-core/navigation/index.ts @@ -0,0 +1,8 @@ +export * from './Link' +export * from './Link.types' +export * from './UniversalRouteScreen' +export * from './UniversalRouteScreen.helpers' +export * from './useRouteParams' +export * from './useRouteParams.types' +export * from './useRouter' +export * from './useRouter.types' From d73c67980f22a5a77579930860baaaf716511730 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Thu, 8 Aug 2024 12:08:10 +0200 Subject: [PATCH 037/126] chore: Rename args & response schemas to input & output --- features/@app-core/graphql-env.d.ts | 6 +-- features/@app-core/graphql/schema.graphql | 8 ++-- features/@app-core/graphql/typeDefs.ts | 8 ++-- .../@app-core/resolvers/healthCheck.bridge.ts | 16 +++++--- .../resolvers/healthCheck.fetcher.ts | 6 +-- .../resolvers/healthCheck.fetcher.web.ts | 8 ++-- .../@app-core/resolvers/healthCheck.query.ts | 2 +- .../resolvers/healthCheck.resolver.ts | 6 +-- features/@app-core/routes/api/health/route.ts | 2 + ...HealthCheckArgs.ts => HealthCheckInput.ts} | 6 +-- ...hCheckResponse.ts => HealthCheckOutput.ts} | 4 +- .../schemas/createDataBridge.ts | 38 +++++++++---------- .../schemas/createResolver.ts | 16 ++++---- .../schemas/tests/bridges.test.ts | 4 +- .../schemas/tests/plugins.test.ts | 6 +-- .../scripts/helpers/scriptUtils.test.ts | 16 ++++---- 16 files changed, 79 insertions(+), 73 deletions(-) rename features/@app-core/schemas/{HealthCheckArgs.ts => HealthCheckInput.ts} (64%) rename features/@app-core/schemas/{HealthCheckResponse.ts => HealthCheckOutput.ts} (90%) diff --git a/features/@app-core/graphql-env.d.ts b/features/@app-core/graphql-env.d.ts index 82ac35e..f35958e 100644 --- a/features/@app-core/graphql-env.d.ts +++ b/features/@app-core/graphql-env.d.ts @@ -18,12 +18,12 @@ export type introspection = { 'Boolean': unknown; 'Date': unknown; 'Float': unknown; - 'HealthCheckArgs': { kind: 'INPUT_OBJECT'; name: 'HealthCheckArgs'; isOneOf: false; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'showContext'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }]; }; - 'HealthCheckResponse': { kind: 'OBJECT'; name: 'HealthCheckResponse'; fields: { 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'backendURL': { name: 'backendURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'context': { name: 'context'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'graphURL': { name: 'graphURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; + 'HealthCheckInput': { kind: 'INPUT_OBJECT'; name: 'HealthCheckInput'; isOneOf: false; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'verbose'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }]; }; + 'HealthCheckOutput': { kind: 'OBJECT'; name: 'HealthCheckOutput'; fields: { 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'backendURL': { name: 'backendURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'context': { name: 'context'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'graphURL': { name: 'graphURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; 'Int': unknown; 'JSON': unknown; 'JSONObject': unknown; - 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'healthCheck': { name: 'healthCheck'; type: { kind: 'OBJECT'; name: 'HealthCheckResponse'; ofType: null; } }; }; }; + 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'healthCheck': { name: 'healthCheck'; type: { kind: 'OBJECT'; name: 'HealthCheckOutput'; ofType: null; } }; }; }; 'String': unknown; }; }; diff --git a/features/@app-core/graphql/schema.graphql b/features/@app-core/graphql/schema.graphql index 053199c..a0f063d 100644 --- a/features/@app-core/graphql/schema.graphql +++ b/features/@app-core/graphql/schema.graphql @@ -6,12 +6,12 @@ scalar JSON scalar JSONObject -input HealthCheckArgs { +input HealthCheckInput { echo: String - showContext: Boolean + verbose: Boolean } -type HealthCheckResponse { +type HealthCheckOutput { echo: String status: String! alive: Boolean! @@ -41,7 +41,7 @@ type HealthCheckResponse { } type Query { - healthCheck(args: HealthCheckArgs): HealthCheckResponse + healthCheck(args: HealthCheckInput): HealthCheckOutput } schema { diff --git a/features/@app-core/graphql/typeDefs.ts b/features/@app-core/graphql/typeDefs.ts index 07eba0a..028e9d4 100644 --- a/features/@app-core/graphql/typeDefs.ts +++ b/features/@app-core/graphql/typeDefs.ts @@ -6,12 +6,12 @@ scalar JSON scalar JSONObject -input HealthCheckArgs { +input HealthCheckInput { echo: String - showContext: Boolean + verbose: Boolean } -type HealthCheckResponse { +type HealthCheckOutput { echo: String status: String! alive: Boolean! @@ -41,7 +41,7 @@ type HealthCheckResponse { } type Query { - healthCheck(args: HealthCheckArgs): HealthCheckResponse + healthCheck(args: HealthCheckInput): HealthCheckOutput } schema { diff --git a/features/@app-core/resolvers/healthCheck.bridge.ts b/features/@app-core/resolvers/healthCheck.bridge.ts index 7411156..1e4ee44 100644 --- a/features/@app-core/resolvers/healthCheck.bridge.ts +++ b/features/@app-core/resolvers/healthCheck.bridge.ts @@ -1,14 +1,18 @@ import { createDataBridge } from '@green-stack/schemas/createDataBridge' -import { HealthCheckArgs } from '../schemas/HealthCheckArgs' -import { HealthCheckResponse } from '../schemas/HealthCheckResponse' +import { HealthCheckInput } from '../schemas/HealthCheckInput' +import { HealthCheckOutput } from '../schemas/HealthCheckOutput' -/* --- Bridge ---------------------------------------------------------------------------------- */ +/* --- Types ----------------------------------------------------------------------------------- */ +export { HealthCheckInput, HealthCheckOutput } + +/** --- Bridge --------------------------------------------------------------------------------- */ +/** -i- Bundled meta for the healthCheck() resolver, reusable on server, browser & mobile */ export const healthCheckBridge = createDataBridge({ resolverName: 'healthCheck', - resolverArgsName: 'HealthCheckArgs', - argsSchema: HealthCheckArgs, - responseSchema: HealthCheckResponse, + // resolverArgsName: 'HealthCheckInput', + inputSchema: HealthCheckInput, + outputSchema: HealthCheckOutput, apiPath: '/api/health', allowedMethods: ['GRAPHQL', 'GET'], }) diff --git a/features/@app-core/resolvers/healthCheck.fetcher.ts b/features/@app-core/resolvers/healthCheck.fetcher.ts index 74c47a0..496de19 100644 --- a/features/@app-core/resolvers/healthCheck.fetcher.ts +++ b/features/@app-core/resolvers/healthCheck.fetcher.ts @@ -1,9 +1,9 @@ -import type { HealthCheckArgs, HealthCheckResponse } from './healthCheck.bridge' +import type { HealthCheckInput, HealthCheckOutput } from './healthCheck.bridge' import { appConfig } from '../appConfig' /** --- healthCheckFetcher() ------------------------------------------------------------------- */ /** -i- Isomorphic fetcher for our healthCheck() resolver at '/api/health' */ -export const healthCheckFetcher = async (args: HealthCheckArgs) => { +export const healthCheckFetcher = async (args: HealthCheckInput) => { const response = await fetch(`${appConfig.backendURL}/api/health?echo=${args.echo}`, { method: 'GET', headers: { @@ -11,5 +11,5 @@ export const healthCheckFetcher = async (args: HealthCheckArgs) => { }, }) const data = await response.json() - return data as HealthCheckResponse + return data as HealthCheckOutput } diff --git a/features/@app-core/resolvers/healthCheck.fetcher.web.ts b/features/@app-core/resolvers/healthCheck.fetcher.web.ts index 70539dc..418f4c3 100644 --- a/features/@app-core/resolvers/healthCheck.fetcher.web.ts +++ b/features/@app-core/resolvers/healthCheck.fetcher.web.ts @@ -1,10 +1,10 @@ import type { NextRequest, NextResponse } from 'next/server' -import type { HealthCheckArgs, HealthCheckResponse } from './healthCheck.bridge' +import type { HealthCheckInput, HealthCheckOutput } from './healthCheck.bridge' import { appConfig } from '../appConfig' /** --- healthCheckFetcher() ------------------------------------------------------------------- */ /** -i- Isomorphic fetcher for our healthCheck() resolver at '/api/health' */ -export const healthCheckFetcher = async (args: HealthCheckArgs) => { +export const healthCheckFetcher = async (args: HealthCheckInput) => { // Vars const isServer = typeof window === 'undefined' @@ -18,7 +18,7 @@ export const healthCheckFetcher = async (args: HealthCheckArgs) => { }, }) const data = await response.json() - return data as HealthCheckResponse + return data as HealthCheckOutput } // -- Server -- @@ -31,5 +31,5 @@ export const healthCheckFetcher = async (args: HealthCheckArgs) => { res: {} as NextResponse, }, }) - return data as HealthCheckResponse + return data as HealthCheckOutput } diff --git a/features/@app-core/resolvers/healthCheck.query.ts b/features/@app-core/resolvers/healthCheck.query.ts index f3232c1..7ef1c74 100644 --- a/features/@app-core/resolvers/healthCheck.query.ts +++ b/features/@app-core/resolvers/healthCheck.query.ts @@ -6,7 +6,7 @@ import { graphql } from '../graphql/graphql' /* --- Query ----------------------------------------------------------------------------------- */ export const healthCheckQuery = graphql(` - query healthCheck ($healthCheckArgs: HealthCheckArgs) { + query healthCheck ($healthCheckArgs: HealthCheckInput) { healthCheck(args: $healthCheckArgs) { echo status diff --git a/features/@app-core/resolvers/healthCheck.resolver.ts b/features/@app-core/resolvers/healthCheck.resolver.ts index 06c5a51..57859f3 100644 --- a/features/@app-core/resolvers/healthCheck.resolver.ts +++ b/features/@app-core/resolvers/healthCheck.resolver.ts @@ -12,9 +12,9 @@ const ALIVE_SINCE = new Date() /** --- healthCheck() -------------------------------------------------------------------------- */ /** -i- Check the health status of the server. Includes relevant urls, server time(zone), versions and more */ -export const healthCheck = createResolver(async ({ args, req, context }) => { +export const healthCheck = createResolver(async ({ args, withDefaults, req, context }) => { // Inputs - const { echo, showContext } = args + const { echo, verbose } = args // Context const { req: _, res: __, ...headerContext } = context @@ -105,6 +105,6 @@ export const healthCheck = createResolver(async ({ args, req, context }) => { systemTotalMemory: OS.totalmem(), systemLoadAverage: OS.loadavg(), // CONTEXT - context: showContext ? extraContext : undefined, + context: verbose ? extraContext : undefined, } }, healthCheckBridge) diff --git a/features/@app-core/routes/api/health/route.ts b/features/@app-core/routes/api/health/route.ts index 7f60ff0..a7f26fd 100644 --- a/features/@app-core/routes/api/health/route.ts +++ b/features/@app-core/routes/api/health/route.ts @@ -10,4 +10,6 @@ export const POST = createNextRouteHandler(healthCheck) /* --- GraphQL --------------------------------------------------------------------------------- */ +// -i- Picked up by `npm run collect:resolvers` when running dev to add to list of resolvers +// -i- which `npm run build:schema` will later turn into new GraphQL schema definitions export const graphResolver = createGraphResolver(healthCheck) diff --git a/features/@app-core/schemas/HealthCheckArgs.ts b/features/@app-core/schemas/HealthCheckInput.ts similarity index 64% rename from features/@app-core/schemas/HealthCheckArgs.ts rename to features/@app-core/schemas/HealthCheckInput.ts index b90c57c..eeb299a 100644 --- a/features/@app-core/schemas/HealthCheckArgs.ts +++ b/features/@app-core/schemas/HealthCheckInput.ts @@ -2,11 +2,11 @@ import { z, schema } from '@green-stack/schemas' /* --- Schemas --------------------------------------------------------------------------------- */ -export const HealthCheckArgs = schema('HealthCheckArgs', { +export const HealthCheckInput = schema('HealthCheckInput', { echo: z.string().default('Hello World'), - showContext: z.boolean().default(false), + verbose: z.boolean().default(false), }) /* --- Type Alias ------------------------------------------------------------------------------ */ -export type HealthCheckArgs = z.infer +export type HealthCheckInput = z.infer diff --git a/features/@app-core/schemas/HealthCheckResponse.ts b/features/@app-core/schemas/HealthCheckOutput.ts similarity index 90% rename from features/@app-core/schemas/HealthCheckResponse.ts rename to features/@app-core/schemas/HealthCheckOutput.ts index e24b1fd..2d844da 100644 --- a/features/@app-core/schemas/HealthCheckResponse.ts +++ b/features/@app-core/schemas/HealthCheckOutput.ts @@ -2,7 +2,7 @@ import { z, schema } from '@green-stack/schemas' /* --- Schemas --------------------------------------------------------------------------------- */ -export const HealthCheckResponse = schema('HealthCheckResponse', { +export const HealthCheckOutput = schema('HealthCheckOutput', { echo: z.string().optional(), status: z.literal('OK'), alive: z.boolean(), @@ -33,4 +33,4 @@ export const HealthCheckResponse = schema('HealthCheckResponse', { /* --- Type Alias ------------------------------------------------------------------------------ */ -export type HealthCheckResponse = z.infer +export type HealthCheckOutput = z.infer diff --git a/packages/@green-stack-core/schemas/createDataBridge.ts b/packages/@green-stack-core/schemas/createDataBridge.ts index 3a266a6..d620fd9 100644 --- a/packages/@green-stack-core/schemas/createDataBridge.ts +++ b/packages/@green-stack-core/schemas/createDataBridge.ts @@ -24,25 +24,25 @@ export const normalizeInputSchemaName = (schemaName: string, prefix: 'type' | 'i } /** --- renderGraphqlQuery() ------------------------------------------------------------------- */ -/** -i- Accepts a resolverName, argsSchema and responseSchema and spits out a graphql query that stops at 3 levels (or a custom number) of depth */ +/** -i- Accepts a resolverName, inputSchema and outputSchema and spits out a graphql query that stops at 3 levels (or a custom number) of depth */ export const renderGraphqlQuery = ({ resolverName, resolverArgsName, resolverType, - argsSchema, - responseSchema, + inputSchema, + outputSchema, maxFieldDepth = 5, }: { resolverName: string resolverArgsName: string resolverType: 'query' | 'mutation' - argsSchema: z.ZodObject - responseSchema: z.ZodObject + inputSchema: z.ZodObject + outputSchema: z.ZodObject maxFieldDepth?: number }) => { // Introspect input & output schemas - const argsSchemaDefs = argsSchema.introspect() - const responseSchemaDefs = responseSchema.introspect() + const argsSchemaDefs = inputSchema.introspect() + const responseSchemaDefs = outputSchema.introspect() const argsSchemaName = normalizeInputSchemaName(argsSchemaDefs.name!, 'input') const _resolverArgsName = lowercaseFirstChar(resolverArgsName) @@ -122,8 +122,8 @@ export const createDataBridge = < resolverName, resolverType: customResolverType, resolverArgsName = `${resolverName}Args`, - argsSchema, - responseSchema, + inputSchema, + outputSchema, apiPath, allowedMethods, graphqlQuery, @@ -132,8 +132,8 @@ export const createDataBridge = < resolverName: ResolverName resolverType?: 'query' | 'mutation' resolverArgsName?: ResolverArgsName | HintedKeys - argsSchema: z.ZodObject - responseSchema: z.ZodObject + inputSchema: z.ZodObject + outputSchema: z.ZodObject apiPath?: string allowedMethods?: ALLOWED_METHODS[] graphqlQuery?: CustomQuery @@ -148,8 +148,8 @@ export const createDataBridge = < // -- Error Checks -- if (!resolverName) throw new Error('Resolver name is required') - if (!argsSchema) throw new Error('Args schema is required') - if (!responseSchema) throw new Error('Response schema is required') + if (!inputSchema) throw new Error('Args schema is required') + if (!outputSchema) throw new Error('Response schema is required') // -- Build default graphql query? -- @@ -162,11 +162,11 @@ export const createDataBridge = < resolverName, resolverArgsName, resolverType, - argsSchema, - responseSchema, + inputSchema, + outputSchema, }) - const gqlArgsSchema = z.object({ [resolverName as ResolverName]: argsSchema }) - const gqlResSchema = z.object({ [resolverName as ResolverName]: responseSchema }) + const gqlArgsSchema = z.object({ [resolverName as ResolverName]: inputSchema }) + const gqlResSchema = z.object({ [resolverName as ResolverName]: outputSchema }) const documentNode = graphql(defaultGraphqlQueryString) as TadaDocumentNode< z.infer, z.infer @@ -180,8 +180,8 @@ export const createDataBridge = < resolverName, resolverType, resolverArgsName, - argsSchema, - responseSchema, + inputSchema, + outputSchema, apiPath, allowedMethods, isMutation, diff --git a/packages/@green-stack-core/schemas/createResolver.ts b/packages/@green-stack-core/schemas/createResolver.ts index 08f0167..c0b9f9a 100644 --- a/packages/@green-stack-core/schemas/createResolver.ts +++ b/packages/@green-stack-core/schemas/createResolver.ts @@ -63,20 +63,20 @@ export const createResolver = < resolverFn: (ctx: ResolverExecutionParamsType) => Promise, options: { paramKeys?: string, - argsSchema: z.ZodObject, - responseSchema: z.ZodObject, + inputSchema: z.ZodObject, + outputSchema: z.ZodObject, isMutation?: boolean }, ) => { // Extract options - const { paramKeys, argsSchema, responseSchema, isMutation } = options + const { paramKeys, inputSchema, outputSchema, isMutation } = options // Build Resolver const resolverWrapper = (ctx?: ResolverInputType): Promise => { const { req, res, nextSsrContext, parent, args, context, info, cookies: _, ...resolverContext } = ctx || {} // prettier-ignore const { logErrors, respondErrors, allowFail, onError, ...restParams } = resolverContext // Collect params from all possible sources const { body, method } = (req as NextApiRequest) || {} - const schemaParamKeys = Object.keys(argsSchema?.shape ?? {}) + const schemaParamKeys = Object.keys(inputSchema?.shape ?? {}) const apiParamKeys = [ctx?.paramKeys, paramKeys || schemaParamKeys].flat().filter(Boolean).join(' ') // prettier-ignore const query = { ...nextSsrContext?.query, ...(req as NextApiRequest)?.query } const params = { ...restParams, ...nextSsrContext?.params, ...context, ...ctx?.params } // @ts-ignore @@ -124,9 +124,9 @@ export const createResolver = < } } // Validation helpers - const parseArgs = (args: ArgsInput) => argsSchema.parse(args) as ArgsInput + const parseArgs = (args: ArgsInput) => inputSchema.parse(args) as ArgsInput const withDefaults = (response: ResInput) => { - return responseSchema.applyDefaults(response as Record) as ResOutput + return outputSchema.applyDefaults(response as Record) as ResOutput } // Return resolver return resolverFn({ @@ -143,8 +143,8 @@ export const createResolver = < } // Return Resolver return Object.assign(resolverWrapper, { - argSchema: argsSchema, - resSchema: responseSchema, + argSchema: inputSchema, + resSchema: outputSchema, _input: undefined as ArgsInput, _output: undefined as ResOutput, isMutation, diff --git a/packages/@green-stack-core/schemas/tests/bridges.test.ts b/packages/@green-stack-core/schemas/tests/bridges.test.ts index 5148823..9388967 100644 --- a/packages/@green-stack-core/schemas/tests/bridges.test.ts +++ b/packages/@green-stack-core/schemas/tests/bridges.test.ts @@ -6,8 +6,8 @@ import { bridgedFetcher } from '../bridgedFetcher' const healtCheckBridge = createDataBridge({ resolverName: 'healthCheck', - argsSchema: schema('HealthCheck', { echo: z.string().default('Hello World') }), - responseSchema: schema('HealthCheckResponse', { echo: z.string().optional() }), + inputSchema: schema('HealthCheck', { echo: z.string().default('Hello World') }), + outputSchema: schema('HealthCheckOutput', { echo: z.string().optional() }), apiPath: '/api/health', allowedMethods: ['GET', 'GRAPHQL'], }) diff --git a/packages/@green-stack-core/schemas/tests/plugins.test.ts b/packages/@green-stack-core/schemas/tests/plugins.test.ts index 5fb3f9c..0fc292f 100644 --- a/packages/@green-stack-core/schemas/tests/plugins.test.ts +++ b/packages/@green-stack-core/schemas/tests/plugins.test.ts @@ -216,11 +216,11 @@ test("createGraphSchemaDefs() can handle resolvers created by createGraphResolve const printedSchema = print(graphqlSchemaDefs) // Check queries expect(printedSchema).toContain('Query {') - expect(printedSchema).toContain('healthCheck(args: HealthCheckArgs): HealthCheckResponse') + expect(printedSchema).toContain('healthCheck(args: HealthCheckInput): HealthCheckOutput') // Check input definitions - expect(printedSchema).toContain('input HealthCheckArgs {') + expect(printedSchema).toContain('input HealthCheckInput {') // Check output definitions - expect(printedSchema).toContain('type HealthCheckResponse {') + expect(printedSchema).toContain('type HealthCheckOutput {') }) test("createGraphSchemaDefs() correctly differentiates between Int & Float", () => { diff --git a/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts b/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts index 88f2986..bb7c4f2 100644 --- a/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts +++ b/packages/@green-stack-core/scripts/helpers/scriptUtils.test.ts @@ -140,20 +140,20 @@ test('getWorkspaceOptions() lists all available workspace path options for gener test('getAvailableSchemas() lists all available schemas in the codebase for generators to use', () => { const schemaConfigMap = utils.getAvailableSchemas('') // Check that the healthCheck input & output schemas are included - expect(schemaConfigMap['@app/core - HealthCheckArgs']).toBeDefined() - expect(schemaConfigMap['@app/core - HealthCheckResponse']).toBeDefined() + expect(schemaConfigMap['@app/core - HealthCheckInput']).toBeDefined() + expect(schemaConfigMap['@app/core - HealthCheckOutput']).toBeDefined() // Check that the config for the healthCheck input schema is correct - const HealthCheckArgsInfo = schemaConfigMap['@app/core - HealthCheckArgs'] - expect(HealthCheckArgsInfo.schemaName).toBe('HealthCheckArgs') - expect(HealthCheckArgsInfo.schemaPath).toBe('features/@app-core/schemas/HealthCheckArgs.ts') + const HealthCheckArgsInfo = schemaConfigMap['@app/core - HealthCheckInput'] + expect(HealthCheckArgsInfo.schemaName).toBe('HealthCheckInput') + expect(HealthCheckArgsInfo.schemaPath).toBe('features/@app-core/schemas/HealthCheckInput.ts') expect(HealthCheckArgsInfo.workspacePath).toBe('features/@app-core') expect(HealthCheckArgsInfo.workspaceName).toBe('@app/core') expect(HealthCheckArgsInfo.isNamedExport).toBe(true) expect(HealthCheckArgsInfo.isDefaultExport).toBe(false) // Check that the config for the healthCheck output schema is correct - const HealthCheckResponseInfo = schemaConfigMap['@app/core - HealthCheckResponse'] - expect(HealthCheckResponseInfo.schemaName).toBe('HealthCheckResponse') - expect(HealthCheckResponseInfo.schemaPath).toBe('features/@app-core/schemas/HealthCheckResponse.ts') + const HealthCheckResponseInfo = schemaConfigMap['@app/core - HealthCheckOutput'] + expect(HealthCheckResponseInfo.schemaName).toBe('HealthCheckOutput') + expect(HealthCheckResponseInfo.schemaPath).toBe('features/@app-core/schemas/HealthCheckOutput.ts') expect(HealthCheckResponseInfo.workspacePath).toBe('features/@app-core') expect(HealthCheckResponseInfo.workspaceName).toBe('@app/core') expect(HealthCheckResponseInfo.isNamedExport).toBe(true) From ed0cae4ad015a18ec9f54f6c1d13f1eb0794a7a1 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Thu, 8 Aug 2024 16:15:15 +0200 Subject: [PATCH 038/126] feat: Add upsertOne() to db model driver --- features/@app-core/models/Settings.model.ts | 4 +- packages/@db-driver/index.ts | 1 + packages/@db-driver/scripts/collect-models.ts | 2 +- .../utils/createSchemaModel.mock.test.ts | 83 +++++++++++++++---- .../utils/createSchemaModel.mock.ts | 21 +++++ .../utils/validateDriverModel.db.ts | 26 ++++++ packages/@green-stack-core/schemas/index.ts | 19 +++++ .../schemas/tests/schemas.test.ts | 9 ++ 8 files changed, 146 insertions(+), 19 deletions(-) create mode 100644 packages/@db-driver/utils/validateDriverModel.db.ts diff --git a/features/@app-core/models/Settings.model.ts b/features/@app-core/models/Settings.model.ts index 6818f6c..c007751 100644 --- a/features/@app-core/models/Settings.model.ts +++ b/features/@app-core/models/Settings.model.ts @@ -1,5 +1,5 @@ import { z, schema } from '@green-stack/schemas' -import { createSchemaModel } from '@db/driver' +import { createSchemaModel, validateDriverModel } from '@db/driver' /* --- Schema ---------------------------------------------------------------------------------- */ @@ -18,4 +18,4 @@ export const SettingsModel = createSchemaModel(Setting) /* --- Drivers --------------------------------------------------------------------------------- */ -export const driverModel = SettingsModel.driver +export const driverModel = validateDriverModel(SettingsModel.driver) diff --git a/packages/@db-driver/index.ts b/packages/@db-driver/index.ts index ccb52bc..9c433e4 100644 --- a/packages/@db-driver/index.ts +++ b/packages/@db-driver/index.ts @@ -12,3 +12,4 @@ export const createSchemaModel = dbDriver['createSchemaModel'] /* --- Export Driver Helpers ------------------------------------------------------------------- */ export { validateDriver } from './utils/validateDriver.db' +export { validateDriverModel } from './utils/validateDriverModel.db' diff --git a/packages/@db-driver/scripts/collect-models.ts b/packages/@db-driver/scripts/collect-models.ts index 92f534d..a81b794 100644 --- a/packages/@db-driver/scripts/collect-models.ts +++ b/packages/@db-driver/scripts/collect-models.ts @@ -51,7 +51,7 @@ const collectModels = () => { // Skip if not a valid model const modelFileContents = fs.readFileSync(modelFilePath, 'utf-8') - const isValidModel = modelFileContents.includes('export const driverModel = ') + const isValidModel = modelFileContents.includes('export const driverModel = validateDriverModel(') if (!isValidModel) return acc // Figure out model workspace from filename diff --git a/packages/@db-driver/utils/createSchemaModel.mock.test.ts b/packages/@db-driver/utils/createSchemaModel.mock.test.ts index 7038414..c4b64d4 100644 --- a/packages/@db-driver/utils/createSchemaModel.mock.test.ts +++ b/packages/@db-driver/utils/createSchemaModel.mock.test.ts @@ -62,7 +62,7 @@ test('createSchemaModel() creates a new schema model with DB driver methods atta }) test('Model.driver.insertOne() inserts a new record in memory', async () => { - const UserModel = createSchemaModel(UserSchema, 'User1') + const UserModel = createSchemaModel(UserSchema, 'UserInsertOne1') const newUser = await UserModel.driver.insertOne({ name: 'Thorr', email: 'thorr@codinsonn.dev', @@ -74,7 +74,7 @@ test('Model.driver.insertOne() inserts a new record in memory', async () => { }) test('Model.driver.insertOne() throws if inserted record does not match schema', async () => { - const UserModel = createSchemaModel(UserSchema, 'User2') + const UserModel = createSchemaModel(UserSchema, 'UserInsertOne2') // Check that we throw an error when inserting a record with invalid data await expect(UserModel.driver.insertOne({})).rejects.toThrow() // Missing required fields await expect(UserModel.driver.insertOne({ name: 'Thorr' })).rejects.toThrow() // Missing required field email @@ -83,7 +83,7 @@ test('Model.driver.insertOne() throws if inserted record does not match schema', }) test('Model.driver.insertMany() inserts multiple records in memory', async () => { - const UserModel = createSchemaModel(UserSchema, 'User3') + const UserModel = createSchemaModel(UserSchema, 'UserInsertMany1') const newUsers = await UserModel.driver.insertMany([ { name: 'Thorr', @@ -107,7 +107,7 @@ test('Model.driver.insertMany() inserts multiple records in memory', async () => }) test('Model.driver.insertMany() throws if inserted records do not match schema', async () => { - const UserModel = createSchemaModel(UserSchema, 'User4') + const UserModel = createSchemaModel(UserSchema, 'UserInsertMany2') // Check that we throw an error when inserting records with invalid data await expect(UserModel.driver.insertMany([{}])).rejects.toThrow() // Missing required fields await expect(UserModel.driver.insertMany([{ name: 'Thorr' }])).rejects.toThrow() // Missing required field email @@ -116,7 +116,7 @@ test('Model.driver.insertMany() throws if inserted records do not match schema', }) test('Model.driver.findOne() finds a record stored in memory', async () => { - const UserModel = createSchemaModel(UserSchema, 'User5') + const UserModel = createSchemaModel(UserSchema, 'UserFindOne1') const newUser = await UserModel.driver.insertOne({ name: 'Thorr', email: 'thorr@codinsonn.dev', @@ -145,7 +145,7 @@ test('Model.driver.findOne() finds a record stored in memory', async () => { }) test('Model.driver.findMany() finds multiple records stored in memory', async () => { - const UserModel = createSchemaModel(UserSchema, 'User6') + const UserModel = createSchemaModel(UserSchema, 'UserFindMany1') const newUsers = await UserModel.driver.insertMany([ { name: 'Thorr', @@ -168,7 +168,7 @@ test('Model.driver.findMany() finds multiple records stored in memory', async () }) test('Model.driver.updateOne() updates a record stored in memory', async () => { - const UserModel = createSchemaModel(UserSchema, 'User7') + const UserModel = createSchemaModel(UserSchema, 'UserUpdateOne1') const newUser = await UserModel.driver.insertOne({ name: 'Thorr', email: 'thorr@codinsonn.dev', @@ -183,7 +183,7 @@ test('Model.driver.updateOne() updates a record stored in memory', async () => { }) test('Model.driver.updateOne() with errorOnUnmatched: true throws if updated record does not match schema', async () => { - const UserModel = createSchemaModel(UserSchema, 'User8') + const UserModel = createSchemaModel(UserSchema, 'UserUpdateOne2') const newUser = await UserModel.driver.insertOne({ name: 'Thorr', email: 'thorr@codinsonn.dev', @@ -202,7 +202,7 @@ test('Model.driver.updateOne() with errorOnUnmatched: true throws if updated rec }) test('Model.driver.updateMany() updates multiple records stored in memory', async () => { - const UserModel = createSchemaModel(UserSchema, 'User9') + const UserModel = createSchemaModel(UserSchema, 'UserUpdateMany1') const newUsers = await UserModel.driver.insertMany([ { name: 'Thorr', @@ -223,7 +223,7 @@ test('Model.driver.updateMany() updates multiple records stored in memory', asyn }) test('Model.driver.updateMany() with errorOnUnmatched: true throws if updated records do not match schema', async () => { - const UserModel = createSchemaModel(UserSchema, 'User10') + const UserModel = createSchemaModel(UserSchema, 'UserUpdateMany2') const newUsers = await UserModel.driver.insertMany([ { name: 'Thorr', @@ -246,8 +246,59 @@ test('Model.driver.updateMany() with errorOnUnmatched: true throws if updated re await expect(() => UserModel.driver.updateMany({ email: '' }, { name: 'Thorr' })).not.toThrow() }) +test('Model.driver.upsertOne() inserts a new record if it does not exist', async () => { + const UserModel = createSchemaModel(UserSchema, 'UserUpsertOne1') + // Check that we can insert a new record + const newUser = await UserModel.driver.upsertOne({ + name: 'Thorr', + }, { + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }) + // Check that the record was inserted + expect(newUser).toBeDefined() + expect(newUser.id).toBeDefined() + expect(newUser.name).toBe('Thorr') + expect(newUser.email).toBe('thorr@codinsonn.dev') + // Check that we can find the record by id + const foundById = await UserModel.driver.findOne({ id: newUser.id }) + expect(foundById).toBeDefined() + expect(foundById.id).toBe(newUser.id) + expect(foundById.name).toBe('Thorr') + expect(foundById.email).toBe('thorr@codinsonn.dev') +}) + +test('Model.driver.upsertOne() updates an existing record if it exists', async () => { + const UserModel = createSchemaModel(UserSchema, 'UserUpsertOne2') + const onlyUser = await UserModel.driver.insertOne({ + name: 'Thorr', + email: 'thorr@codinsonn.dev', + }) + // Check that we can update an existing record + const updatedUser = await UserModel.driver.upsertOne({ + name: 'Thorr', + }, { + name: 'Thorr', + email: 'thorr@fullproduct.dev', + }) + // Check that the record was updated + expect(updatedUser).toBeDefined() + expect(updatedUser.id).toBe(onlyUser.id) + expect(updatedUser.name).toBe('Thorr') + expect(updatedUser.email).toBe('thorr@fullproduct.dev') + // Check that we can find the record by id + const foundById = await UserModel.driver.findOne({ id: onlyUser.id }) + expect(foundById).toBeDefined() + expect(foundById.id).toBe(onlyUser.id) + expect(foundById.name).toBe('Thorr') + expect(foundById.email).toBe('thorr@fullproduct.dev') + // Check that we can no longer find the record by the old email + const notFoundByEmail = await UserModel.driver.findOne({ email: 'thorr@codinsonn.dev' }) + expect(notFoundByEmail).toBeUndefined() +}) + test('Model.driver.deleteOne() deletes a record stored in memory', async () => { - const UserModel = createSchemaModel(UserSchema, 'User11') + const UserModel = createSchemaModel(UserSchema, 'UserDeleteOne1') const newUsers = await UserModel.driver.insertMany([ { name: 'Thorr', @@ -275,7 +326,7 @@ test('Model.driver.deleteOne() deletes a record stored in memory', async () => { }) test('Model.driver.deleteMany() deletes multiple records stored in memory', async () => { - const UserModel = createSchemaModel(UserSchema, 'User12') + const UserModel = createSchemaModel(UserSchema, 'UserDeleteMany1') const newUsers = await UserModel.driver.insertMany([ { name: 'Thorr', @@ -301,7 +352,7 @@ test('Model.driver.deleteMany() deletes multiple records stored in memory', asyn }) test('Model.driver.deleteMany() returns an empty array by default if no records are found', async () => { - const UserModel = createSchemaModel(UserSchema, 'User13') + const UserModel = createSchemaModel(UserSchema, 'UserDeleteMany2') const newUsers = await UserModel.driver.insertMany([ { name: 'Thorr', @@ -319,7 +370,7 @@ test('Model.driver.deleteMany() returns an empty array by default if no records }) test('Model query filters support logical $and, $or, $nor & $not operators', async () => { - const UserModel = createSchemaModel(UserSchema, 'User14') + const UserModel = createSchemaModel(UserSchema, 'UserQueryFilters1') const newUsers = await UserModel.driver.insertMany([ { name: 'Thorr', @@ -364,7 +415,7 @@ test('Model query filters support logical $and, $or, $nor & $not operators', asy }) test('Model query filters support conditional field operators $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin', async () => { - const UserModel = createSchemaModel(UserSchema, 'User15') + const UserModel = createSchemaModel(UserSchema, 'UserQueryFilters2') const newUsers = await UserModel.driver.insertMany([ { name: 'Thorr', @@ -446,7 +497,7 @@ test('Model query filters support conditional field operators $eq, $ne, $gt, $gt }) test("Model query filters support nested fields", async () => { - const UserModel = createSchemaModel(UserSchema, 'User16') + const UserModel = createSchemaModel(UserSchema, 'UserQueryFilters3') const newUsers = await UserModel.driver.insertMany([ { name: 'Thorr', diff --git a/packages/@db-driver/utils/createSchemaModel.mock.ts b/packages/@db-driver/utils/createSchemaModel.mock.ts index afb9650..6f444e6 100644 --- a/packages/@db-driver/utils/createSchemaModel.mock.ts +++ b/packages/@db-driver/utils/createSchemaModel.mock.ts @@ -284,6 +284,25 @@ export const createSchemaModel = < } } + /** --- upsertOne() ------------------------------------------------------------------------ */ + /** -i- Updates or inserts a single record in the collection */ + const upsertOne = async (query: QueryFilter, record: Partial) => { + memoryDB[modelKey] = memoryDB[modelKey] || {} + try { + // Find the record to update + const recordToUpdate = await findOne(query) as DataType + if (recordToUpdate) { + // Update the record + return updateOne(query, record as Prettify>>, true) + } else { + // Insert the record + return insertOne(record) + } + } catch (error: any$FixMe) { + throw new Error(`Failed to upsert record in "${modelKey}" collection: ${error.message}`) + } + } + /** --- deleteOne() ------------------------------------------------------------------------ */ /** -i- Removes a single record from the collection */ const deleteOne = async (query: QueryFilter, errorOnUnmatched = false) => { @@ -340,6 +359,8 @@ export const createSchemaModel = < update: updateOne, updateOne, updateMany, + upsertOne, + upsert: upsertOne, delete: deleteOne, deleteOne, deleteMany, diff --git a/packages/@db-driver/utils/validateDriverModel.db.ts b/packages/@db-driver/utils/validateDriverModel.db.ts new file mode 100644 index 0000000..d759274 --- /dev/null +++ b/packages/@db-driver/utils/validateDriverModel.db.ts @@ -0,0 +1,26 @@ +import { z } from '@green-stack/schemas' + +/* --- Schema ---------------------------------------------------------------------------------- */ + +export const DbDriverModelSchema = z.object({ + insertOne: z.function().args(z.any()).returns(z.promise(z.any())), + insertMany: z.function().args(z.array(z.any())).returns(z.promise(z.array(z.any()))), + findOne: z.function().args(z.any()).returns(z.promise(z.any())), + findMany: z.function().args(z.any()).returns(z.promise(z.array(z.any()))), + updateOne: z.function().args(z.any(), z.any(), z.boolean().optional()).returns(z.promise(z.any())), + updateMany: z.function().args(z.any(), z.any(), z.boolean().optional()).returns(z.promise(z.array(z.any()))), + upsertOne: z.function().args(z.any(), z.any()).returns(z.promise(z.any())), + deleteOne: z.function().args(z.any(), z.boolean().optional()).returns(z.promise(z.any())), + deleteMany: z.function().args(z.any(), z.boolean().optional()).returns(z.promise(z.array(z.any()))), +}) + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type DbModelShape = z.infer + +/** --- validateDriverModel() ----------------------------------------------------------------------- */ +/** -i- Validates whether a DB model matches the expected methods */ +export const validateDriverModel = (model: DB_MODEL) => { + DbDriverModelSchema.parse(model) + return model +} diff --git a/packages/@green-stack-core/schemas/index.ts b/packages/@green-stack-core/schemas/index.ts index db90be9..50d552d 100644 --- a/packages/@green-stack-core/schemas/index.ts +++ b/packages/@green-stack-core/schemas/index.ts @@ -122,19 +122,38 @@ declare module 'zod' { Input = z.objectInputType > { nameSchema(name: string): this + extendSchema(name: string, shape: S): ZodObject + pickSchema>( schemaName: string, mask: Mask ): z.ZodObject>, UnknownKeys, Catchall> + omitSchema>( schemaName: string, mask: Mask ): z.ZodObject, UnknownKeys, Catchall> + applyDefaults = Record>( data: D, logErrors?: boolean ): D & Output + + // -- Deprecations -- + + /** @deprecated Use `.extendSchema('NewName', { ...shape })` instead */ + extend(shape: S): ZodObject + + /** @deprecated Use `.pickSchema('NewName', { ...mask })` instead */ + pick>( + mask: Mask + ): z.ZodObject>, UnknownKeys, Catchall> + + /** @deprecated Use `.omitSchema('NewName', { ...mask })` instead */ + omit>( + mask: Mask + ): z.ZodObject, UnknownKeys, Catchall> } } diff --git a/packages/@green-stack-core/schemas/tests/schemas.test.ts b/packages/@green-stack-core/schemas/tests/schemas.test.ts index 87adf7a..b65c263 100644 --- a/packages/@green-stack-core/schemas/tests/schemas.test.ts +++ b/packages/@green-stack-core/schemas/tests/schemas.test.ts @@ -9,6 +9,8 @@ const User = schema('User', { age: z.number(), }) +type User = z.infer + test("Schemas can be introspected", () => { expect(User.introspect).toBeInstanceOf(Function) expect(User.introspect()).toEqual({ @@ -36,6 +38,8 @@ const Primitives = schema('Primitives', { date: z.date().default(new Date('2024-01-01')).example(new Date('2020-01-01')).describe('Date'), }) +type Primitives = z.infer + test("Optionality, defaults & example values persist in schema introspection", () => { const metadata = Primitives.introspect() as Meta$Schema // Optionality @@ -200,6 +204,8 @@ const AdvancedTypes = schema('AdvancedTypes', { array: z.array(z.string()).min(0).max(5).length(1).default([]).example(['world']), }) +type AdvancedTypes = z.infer + test("Advanced types z.enum(), z.tuple(), z.union() & z.array() work as expected", () => { const metadata = AdvancedTypes.introspect() as Meta$Schema // Base Types @@ -276,6 +282,7 @@ test("Deriving schemas with .extendSchema(), .omitSchema(), .pickSchema() work a const Extended = Primitives.extendSchema('Extended', { newField: z.string().default('Hello'), }) + type Extended = z.infer expect(Extended.introspect().name).toBe('Extended') expect(Extended.introspect().schema).toHaveProperty('newField') expect(Extended.parse({ newField: 'World' })).toEqual({ @@ -287,6 +294,7 @@ test("Deriving schemas with .extendSchema(), .omitSchema(), .pickSchema() work a }) // Omit const Omitted = Primitives.omitSchema('Omitted', { str: true }) + type Omitted = z.infer expect(Omitted.introspect().name).toBe('Omitted') expect(Omitted.introspect().schema).not.toHaveProperty('str') expect(Omitted.parse({ num: 42 })).toEqual({ @@ -296,6 +304,7 @@ test("Deriving schemas with .extendSchema(), .omitSchema(), .pickSchema() work a }) // Pick const Picked = Primitives.pickSchema('Picked', { str: true }) + type Picked = z.infer expect(Picked.introspect().name).toBe('Picked') expect(Picked.introspect().schema).toHaveProperty('str') expect(Picked.introspect().schema).not.toHaveProperty('num') From 3fb34de3d2b309472414b9102b75d57e65c8276d Mon Sep 17 00:00:00 2001 From: codinsonn Date: Fri, 23 Aug 2024 18:36:42 +0200 Subject: [PATCH 039/126] feat: Add useFormState() hook to @green-stack/core --- apps/next/next.config.js | 9 +- features/@app-core/components/BackButton.tsx | 51 ++- features/@app-core/components/styled.tsx | 7 +- package-lock.json | 332 +++++++++++++++- package.json | 8 +- .../forms/tests/useFormState.test.ts | 373 ++++++++++++++++++ .../@green-stack-core/forms/useFormState.ts | 156 ++++++++ .../generators/add-dependencies.ts | 6 +- .../generators/add-workspace.ts | 32 +- packages/@green-stack-core/package.json | 3 + packages/@green-stack-core/preload.test.ts | 16 +- .../schemas/tests/schemas.test.ts | 1 + packages/@green-stack-core/tsconfig.json | 4 +- .../@green-stack-core/utils/stringUtils.ts | 4 +- .../@green-stack-core/utils/tailwindUtils.ts | 6 + turbo.json | 2 +- turbo/generators/config.ts | 4 +- 17 files changed, 964 insertions(+), 50 deletions(-) create mode 100644 packages/@green-stack-core/forms/tests/useFormState.test.ts create mode 100644 packages/@green-stack-core/forms/useFormState.ts create mode 100644 packages/@green-stack-core/utils/tailwindUtils.ts diff --git a/apps/next/next.config.js b/apps/next/next.config.js index af744a6..48de0b4 100644 --- a/apps/next/next.config.js +++ b/apps/next/next.config.js @@ -1,7 +1,7 @@ const { withExpo } = require("@expo/next-adapter"); /** @type {import('next').NextConfig} */ -const nextConfig = withExpo({ +const mainNextConfig = { reactStrictMode: true, swcMinify: true, transpilePackages: [ @@ -25,6 +25,11 @@ const nextConfig = withExpo({ } ] } -}); +} + +/** @type {import('next').NextConfig} */ +const nextConfig = withExpo(mainNextConfig); module.exports = nextConfig; + +module.exports.mainNextConfig = mainNextConfig; diff --git a/features/@app-core/components/BackButton.tsx b/features/@app-core/components/BackButton.tsx index f6bae09..91e1b5d 100644 --- a/features/@app-core/components/BackButton.tsx +++ b/features/@app-core/components/BackButton.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { View, Text, Link } from '../components/styled' +import { View, Text, Link, Pressable } from '../components/styled' import { useRouter } from '@green-stack/navigation/useRouter' import { ArrowLeftFilled } from '../icons/ArrowLeftFilled' import { schema, z } from '@green-stack/schemas' @@ -7,6 +7,7 @@ import { schema, z } from '@green-stack/schemas' /* --- Props ----------------------------------------------------------------------------------- */ const BackButtonProps = schema('BackButtonProps', { + color: z.string().default('#FFFFFF'), backLink: z.string().default('/'), }) @@ -16,7 +17,7 @@ type BackButtonProps = z.input const BackButton = (props: BackButtonProps) => { // Props - const { backLink } = BackButtonProps.applyDefaults(props) + const { color, backLink } = BackButtonProps.applyDefaults(props) // Routing const { canGoBack, back } = useRouter() @@ -24,28 +25,40 @@ const BackButton = (props: BackButtonProps) => { // Vars const showBackButton = canGoBack() - // -- Render -- + // -- Prerender -- - return ( - - + const innerBackButton = ( + + - {showBackButton ? ( - - {`Back`} - - ) : ( - - {`Back`} - - )} + + {`Back`} + ) + + // -- Render -- + + return showBackButton ? ( + + {innerBackButton} + + ) : ( + + {innerBackButton} + + ) } /* --- Exports --------------------------------------------------------------------------------- */ -export default BackButton +export default BackButton \ No newline at end of file diff --git a/features/@app-core/components/styled.tsx b/features/@app-core/components/styled.tsx index c92d3e6..5a65657 100644 --- a/features/@app-core/components/styled.tsx +++ b/features/@app-core/components/styled.tsx @@ -1,6 +1,10 @@ import type { KnownRoutes } from '@app/registries/routeManifest.generated' import { styled } from 'nativewind' -import { Text as RNText, View as RNView, ScrollView as RNScrollView } from 'react-native' +import { + Text as RNText, + View as RNView, + Pressable as RNPressable, +} from 'react-native' import { Link as UniversalLink } from '@green-stack/navigation/Link' import { UniversalLinkProps } from '@green-stack/navigation/Link.types' import { Image as UniversalImage } from '@green-stack/components/Image' @@ -10,6 +14,7 @@ import { Image as UniversalImage } from '@green-stack/components/Image' export const View = styled(RNView, '') export const Text = styled(RNText, '') export const Image = styled(UniversalImage, '') +export const Pressable = styled(RNPressable, '') /* --- Typography ------------------------------------------------------------------------------ */ diff --git a/package-lock.json b/package-lock.json index 512ce82..17da486 100644 --- a/package-lock.json +++ b/package-lock.json @@ -157,6 +157,11 @@ "typescript": "^5.0.0" } }, + "node_modules/@adobe/css-tools": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==" + }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", @@ -4709,6 +4714,17 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@happy-dom/global-registrator": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@happy-dom/global-registrator/-/global-registrator-15.0.0.tgz", + "integrity": "sha512-gTAQty3Wlo+VBC58FGQbnecJ+kSLP+gX9mN22zI2JkGCQxvBj0694dP57ANdfaN+uYcyJ2f1jhY8KU5OUlfO0w==", + "dependencies": { + "happy-dom": "^15.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@inquirer/figures": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", @@ -7426,6 +7442,239 @@ "react": "^18.0.0" } }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/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==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": 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/@testing-library/dom/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==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/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==", + "peer": true + }, + "node_modules/@testing-library/dom/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==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@testing-library/dom/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==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "peer": true + }, + "node_modules/@testing-library/dom/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==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.4.8", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.8.tgz", + "integrity": "sha512-JD0G+Zc38f5MBHA4NgxQMR5XtO5Jx9g86jqturNTt2WUfRmLDIY7iKkWHDCCTiDuFMre6nxAD5wHw9W5kI4rGw==", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "@babel/runtime": "^7.9.2", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/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==" + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==" + }, + "node_modules/@testing-library/jest-dom/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.0.0.tgz", + "integrity": "sha512-guuxUKRWQ+FgNX0h0NS0FIq3Q3uLtWVpBzcLOggmfMoUpgBnzBzvLLd4fbm6yS8ydJd94cIfY4yP9qUQjM2KwQ==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", @@ -7961,6 +8210,12 @@ "node": ">=8" } }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "peer": true + }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -8778,7 +9033,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "peer": true, "dependencies": { "dequal": "^2.0.3" } @@ -10234,6 +10488,11 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -10653,7 +10912,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "peer": true, "engines": { "node": ">=6" } @@ -10708,6 +10966,12 @@ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "peer": true + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -12493,6 +12757,27 @@ "node": ">=0.10.0" } }, + "node_modules/happy-dom": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-15.0.0.tgz", + "integrity": "sha512-DsvANUcxxY20iCo3Yllm7dqwzPVPduGfVFxa7mONwMBLczFeQgkN0LpDir1kIY322JMh+hrcPV3aGLyHCESDlA==", + "dependencies": { + "entities": "^4.5.0", + "webidl-conversions": "^7.0.0", + "whatwg-mimetype": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/happy-dom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -14997,6 +15282,15 @@ "node": ">=12" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { "version": "0.30.10", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", @@ -15594,6 +15888,14 @@ "node": ">=6" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -17989,6 +18291,18 @@ "node": ">=0.10.0" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -19037,6 +19351,17 @@ "node": ">=6" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -21479,6 +21804,9 @@ "version": "0.0.1", "dependencies": { "@app/registries": "*", + "@happy-dom/global-registrator": "^15.0.0", + "@testing-library/jest-dom": "^6.4.8", + "@testing-library/react": "^16.0.0", "crypto-js": "^4.2.0", "dot-prop": "^9.0.0", "zod": "^3.23.7" diff --git a/package.json b/package.json index fd7904b..5b79048 100644 --- a/package.json +++ b/package.json @@ -12,10 +12,14 @@ }, "overrides": { "graphql": "16.8.1", - "next": "~14.0.4" + "next": "~14.0.4", + "react": "18.2.0", + "react-dom": "18.2.0", + "@types/react": "18.2.48" }, "scripts": { - "dev": "npx turbo run dev", + "dev": "npm run dev:apps", + "dev:apps": "npx turbo run @app/next#dev @app/expo#dev", "dev:web": "npx turbo run @app/next#dev", "dev:mobile": "npx turbo run @app/expo#dev", "android": "npx turbo run android", diff --git a/packages/@green-stack-core/forms/tests/useFormState.test.ts b/packages/@green-stack-core/forms/tests/useFormState.test.ts new file mode 100644 index 0000000..cde614f --- /dev/null +++ b/packages/@green-stack-core/forms/tests/useFormState.test.ts @@ -0,0 +1,373 @@ +// @ts-ignore +import { expect, test } from 'bun:test' +import { renderHook, act } from '@testing-library/react' +import { useFormState } from '../useFormState' +import { z, schema } from '../../schemas' + +/* --- Test Data ------------------------------------------------------------------------------- */ + +const User = schema('User', { + name: z.string().default('Thorr'), + age: z.number().default(31), +}) + +type User = z.infer + +/* --- Form State Essentials ------------------------------------------------------------------- */ + +test('passing `initialValues` to useFormState() should apply the correct initial values', () => { + // Hook + const { result } = renderHook(() => useFormState({ + schema: User, + initialValues: { name: 'Loki', age: 29 }, + })) + + // Expect + expect(result.current.values).toEqual({ name: 'Loki', age: 29 }) +}) + +test('formState.values should apply the correct defaults from the zod schema if no initialValues were provided', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Expect + expect(result.current.values).toEqual({ name: 'Thorr', age: 31 }) +}) + +test('formState.setValues() should update the entire form state', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + act(() => { + result.current.setValues({ name: 'Loki', age: 29 }) + }) + + // Expect + expect(result.current.values).toEqual({ name: 'Loki', age: 29 }) +}) + +test('formState.getValue() should return the correct value for the given form field', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + act(() => { + result.current.setValues({ name: 'Loki', age: 29 }) + }) + + // Expect + const name = result.current.getValue('name') + expect(name).toEqual('Loki') + const age = result.current.getValue('age') + expect(age).toEqual(29) +}) + +test('formState.handleChange() should update the correct value for the given form field', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + act(() => { + result.current.handleChange('name', 'Loki') + }) + + // Expect + expect(result.current.values).toEqual({ name: 'Loki', age: 31 }) +}) + +test('formState.getChangeHandler() should return the correct handler for the given form field', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + const changeName = result.current.getChangeHandler('name') + act(() => { + changeName('Loki') + }) + + // Expect + expect(result.current.values).toEqual({ name: 'Loki', age: 31 }) +}) + +test('formState.validate() should return the correct validation result', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + const changeName = result.current.getChangeHandler('name') + act(() => { + // @ts-expect-error + changeName(2) + }) + + // Validate + const isValid = result.current.validate() + + // Expect + expect(isValid).toBe(false) + expect(result.current.errors.age).toBeUndefined() + expect(result.current.errors.name).toBeDefined() + expect(result.current.errors.name).toHaveLength(1) +}) + +test('formState.validate() should populate errors with our custom error messages if provided', () => { + // Custom error messages + const errNoName = 'Please fill in a name' + const errNoAge = 'Please provide your age' + + // Schema with custom error messages + const User2 = schema('User', { + name: z.string({ message: errNoName }).default('Thorr'), + age: z.number({ message: errNoAge }).default(31), + }) + + // Hook + const { result } = renderHook(() => useFormState({ schema: User2 })) + + // Act + const changeName = result.current.getChangeHandler('name') + const changeAge = result.current.getChangeHandler('age') + act(() => { + // @ts-expect-error + changeName(0) + // @ts-expect-error + changeAge('') + }) + + // Validate + result.current.validate() + + // Expect + expect(result.current.errors).toEqual({ + name: [errNoName], + age: [errNoAge], + }) +}) + +test('passing `validateOnChange: true` to useFormState() should update validation errors on every change', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User, validateOnChange: true })) + + // Act + const changeName = result.current.getChangeHandler('name') + + act(() => { + // @ts-expect-error + changeName(2) + }) + + // Expect + expect(result.current.errors.name).toBeDefined() + expect(result.current.errors.name).toHaveLength(1) +}) + +test('formState.hasError() should return the correct error status for the given form field', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + const changeName = result.current.getChangeHandler('name') + act(() => { + // @ts-expect-error + changeName(2) + }) + + // Validate + result.current.validate() + + // Expect + expect(result.current.hasError('name')).toBe(true) + expect(result.current.hasError('age')).toBe(false) +}) + +test('formState.updateErrors() should update the errors for the entire form state', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + act(() => { + result.current.updateErrors({ name: ['Please fill in a name'] }) + }) + + // Expect + expect(result.current.errors).toEqual({ name: ['Please fill in a name'] }) +}) + +test('formState.getErrors() should return the correct errors for the given form field', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + act(() => { + result.current.updateErrors({ name: ['Please fill in a name'] }) + }) + + // Expect + expect(result.current.getErrors('name')).toEqual(['Please fill in a name']) + expect(result.current.getErrors('age')).toEqual([]) +}) + +test('formState.isValid should return the correct form validation status without needing to validate first', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // -- Unhappy path -- + + const changeName = result.current.getChangeHandler('name') + + act(() => { + // @ts-expect-error + changeName(2) + }) + + expect(result.current.isValid).toBe(false) + + // -- Happy path -- + + act(() => { + changeName('Loki') + }) + + expect(result.current.isValid).toBe(true) +}) + +test('formState.isUnsaved should return the correct form unsaved status', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // -- Start -- + + expect(result.current.isUnsaved).toBe(false) + + // -- Edits made -- + + act(() => { + result.current.handleChange('name', 'Loki') + }) + + expect(result.current.isUnsaved).toBe(true) + + // -- Reverted -- + + act(() => { + result.current.setValues({ name: 'Thorr', age: 31 }) + }) + + expect(result.current.isUnsaved).toBe(false) +}) + +test('formState.clearErrors() should clear all errors until validated again', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + act(() => { + result.current.updateErrors({ name: ['Please fill in a name'] }) + }) + + // Expect + expect(result.current.errors.name).toBeDefined() + + // Act + act(() => { + result.current.clearErrors() + }) + + // Expect + expect(result.current.errors.name).toBeUndefined() +}) + +test('formState.clearForm() should clear the form values, applying only the schema defaults', () => { + // Hook + const { result } = renderHook(() => useFormState({ + schema: User, // Has age: 31 as default + initialValues: { age: 29 }, // Should be ignored when using clearForm() + })) + + // Act + act(() => { + result.current.setValues((prev) => ({ ...prev, name: 'Loki' })) + }) + + // Expect + expect(result.current.values).toEqual({ name: 'Loki', age: 29 }) + + // Act + act(() => { + result.current.clearForm() + }) + + // Expect + expect(result.current.values).toEqual({ name: 'Thorr', age: 31 }) +}) + +test('formState.resetForm() should reset the form to its original state using initialValues & schema defaults', () => { + // Hook + const { result } = renderHook(() => useFormState({ + schema: User, + initialValues: { name: 'Loki', age: 29 }, + })) + + // Act + act(() => { + result.current.setValues({ name: 'Hulk', age: 34 }) + }) + + // Expect + expect(result.current.values).toEqual({ name: 'Hulk', age: 34 }) + + // Act + act(() => { + result.current.resetForm() + }) + + // Expect + expect(result.current.values).toEqual({ name: 'Loki', age: 29 }) +}) + +test('formState.getInputProps() should return value, error state and handlers for the given form field', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + const nameInputProps = result.current.getInputProps('name') + + // Act + act(() => { + nameInputProps.onChange('Loki') + }) + + // Expect + expect(result.current.values.name).toEqual('Loki') + expect(result.current.getInputProps('name')).toEqual({ + value: 'Loki', + onChange: expect.any(Function), + onBlur: expect.any(Function), + onFocus: expect.any(Function), + hasError: false, + }) +}) + +test('formState.getTextInputProps() should return text value, error state and handlers for the given text input field', () => { + // Hook + const { result } = renderHook(() => useFormState({ schema: User })) + + // Act + const nameInputProps = result.current.getTextInputProps('name') + + // Act + act(() => { + nameInputProps.onChangeText('Loki') + }) + + // Expect + expect(result.current.values.name).toEqual('Loki') + expect(result.current.getTextInputProps('name')).toEqual({ + value: 'Loki', + onChangeText: expect.any(Function), + onBlur: expect.any(Function), + onFocus: expect.any(Function), + hasError: false, + }) +}) diff --git a/packages/@green-stack-core/forms/useFormState.ts b/packages/@green-stack-core/forms/useFormState.ts new file mode 100644 index 0000000..4886ec7 --- /dev/null +++ b/packages/@green-stack-core/forms/useFormState.ts @@ -0,0 +1,156 @@ +import { useState, useMemo, useEffect } from 'react' +import { z } from '@green-stack/schemas' +import { isEmpty } from '../utils/commonUtils' + +/** --- useFormState() ------------------------------------------------------------------------- */ +/** -i- Returns a set of form management tools to handle form state, including validation, errors and even the required props to add to inputs */ +export const useFormState = < + S extends z.ZodRawShape, + T extends z.infer> = z.infer>, + K extends keyof z.infer> = keyof z.infer>, + E extends Partial> = Partial> +>(options: { + schema: z.ZodObject, + initialValues?: Partial, + validateOnBlur?: boolean, + validateOnChange?: boolean, +}) => { + // Props + const { schema, validateOnBlur, validateOnChange } = options + const initialValues = (options.initialValues || {}) as T + + // Initial + const initialState = useMemo(() => { + return schema.applyDefaults(initialValues) as T + }, [schema, options.initialValues]) + + // State + const [values, setValues] = useState(initialState) + const [errors, updateErrors] = useState({} as E) + + // -- Memos -- + + const isDefaultState = useMemo(() => { + return JSON.stringify(values) === JSON.stringify(initialState) + }, [values, initialState]) + + // -- Validation -- + + const validate = (showErrors = true) => { + const validationResult = schema.safeParse(values) + const validationError = validationResult.error + if (showErrors && validationError) { + const zodIssues = validationError.issues.flat() + const fieldErrors = zodIssues.reduce((acc, issue) => { + const key = issue.path.join('.') as K + const message = issue.message + return { ...acc, [key]: [...(acc[key] || []), message] } + }, {} as E) + updateErrors(fieldErrors) + } + return validationResult.success + } + + // -- Handlers -- + + const handleChange = (key: KEY, value: T[KEY]) => { + setValues((prev) => ({ ...prev, [key]: value })) + } + + const resetForm = () => { + setValues(initialState) + updateErrors({} as E) + } + + const clearForm = () => { + setValues(schema.applyDefaults({}) as T) + updateErrors({} as E) + } + + const clearErrors = () => updateErrors({} as E) + + // -- Methods -- + + const hasError = (key: KEY) => !isEmpty(errors[key]) + + const getValue = (key: KEY) => values[key] + + const getErrors = (key: KEY) => errors[key] || ([] as string[]) + + const getChangeHandler = (key: KEY) => { + return (value: VAL) => handleChange(key, value) + } + + // -- Connectors -- + + const getInputProps = (key: KEY, ) => ({ + value: values[key], + onChange: getChangeHandler(key), + onBlur: () => validateOnBlur && validate(), + onFocus: () => validateOnBlur && validate(), + hasError: hasError(key), + }) + + const getTextInputProps = (key: KEY) => { + const { onChange, ...inputProps } = getInputProps(key) + return { + ...inputProps, + onChangeText: onChange, + } + } + + // -- Flags -- + + const isValid = validate(false) + const isUnsaved = !isDefaultState + + // -- Effects -- + + useEffect(() => { + if (validateOnChange) validate() + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [JSON.stringify(values)]) + + // -- Return -- + + return { + /** -i- The current values of the form */ + values, + /** -i- Sets the entire form state to the provided values */ + setValues, + /** -i- Gets the form value for the provided field key */ + getValue, + /** -i- Sets the form value for the provided field key */ + setValue: handleChange, + /** -i- Sets the form value for the provided field key */ + handleChange, + /** -i- Gets the change handler for the provided field key */ + getChangeHandler, + /** -i- Validates the form state, sets errors if not, and returns whether it is valid or not */ + validate, + /** -i- Whether the form is valid */ + isValid, + /** -i- Whether the form is unsaved */ + isUnsaved, + /** -i- Whether the form is in its default state */ + isDefaultState, + /** -i- The current errors of the form */ + errors, + /** -i- Sets the errors for the form */ + updateErrors, + /** -i- Gets the errors for the provided field key */ + getErrors, + /** -i- Whether the provided field key has an error */ + hasError, + /** -i- Clears all errors until validated again */ + clearErrors, + /** -i- Clears the form values, applying only the schema defaults */ + clearForm, + /** -i- Resets the form to its original state using initialValues & schema defaults */ + resetForm, + /** -i- The props to add to an input to manage its state */ + getInputProps, + /** -i- The props to add to a text input to manage its state, uses `onTextChange` instead */ + getTextInputProps, + } +} diff --git a/packages/@green-stack-core/generators/add-dependencies.ts b/packages/@green-stack-core/generators/add-dependencies.ts index b6152d7..989bb0e 100644 --- a/packages/@green-stack-core/generators/add-dependencies.ts +++ b/packages/@green-stack-core/generators/add-dependencies.ts @@ -53,15 +53,15 @@ export const registerDependencyGenerator = (plop: PlopTypes.NodePlopAPI) => { // Extract the new dependencies from the package json const newExpoPackageJson = JSON.parse(fs.readFileSync(`apps/expo/package.json`, 'utf-8')) // prettier-ignore - const newDeps = Object.entries(newExpoPackageJson.dependencies).filter(([key]) => !originalDeps[key]) // prettier-ignore + const newDeps = Object.entries(newExpoPackageJson.dependencies).filter(([pkg]) => !originalDeps[pkg]) // prettier-ignore // Restore the old package json fs.writeFileSync(`apps/expo/package.json`, originalExpoPackageJsonFile) // Add the new dependencies to the chosen workspace - const installStatements = newDeps.map(([key, value]) => `${key}@${value}`).join(' ') + const installStatements = newDeps.map(([pkg, v]) => `${pkg}@${v}`).join(' ') console.log(`> Moving ${installStatements} to '${workspaceTarget}' workspace`) - execSync(`npm -w ${workspaceTarget} install ${installStatements}`) + execSync(`npm -w ${workspaceTarget} install ${installStatements} --force`) console.log(`> Install successfull`, '\n') // Log out the dependency list diff --git a/packages/@green-stack-core/generators/add-workspace.ts b/packages/@green-stack-core/generators/add-workspace.ts index d631179..7c0b04c 100644 --- a/packages/@green-stack-core/generators/add-workspace.ts +++ b/packages/@green-stack-core/generators/add-workspace.ts @@ -10,10 +10,25 @@ import { validateNonEmptyNoSpaces } from '../scripts/helpers/scriptUtils' /* --- Constants ------------------------------------------------------------------------------- */ const WORKSPACE_FOLDER_MAPPER = { - feature: 'features', - package: 'packages', + feature: 'features', + package: 'packages', } as const +/* --- Templates ------------------------------------------------------------------------------- */ + +const tsConfigTemplate = `{ + "extends": "@app/core/tsconfig", + "include": [ + "**/*.ts", + "**/*.tsx", + "../../features/**/*.ts", + "../../features/**/*.tsx", + "../../features/app-core/graphql-env.d.ts", + "../../packages/@green-stack-core/global.d.ts" + ], + "exclude": ["node_modules"] +}` + /** --- Workspace Generator -------------------------------------------------------------------- */ /** -i- Simple generator to add a new feature or package workspace */ export const registerWorkspaceGenerator = (plop: PlopTypes.NodePlopAPI) => { @@ -80,18 +95,7 @@ export const registerWorkspaceGenerator = (plop: PlopTypes.NodePlopAPI) => { { type: 'add', path: `${workspacePath}/tsconfig.json`, - template: `{ - "extends": "@app/core/tsconfig", - "include": [ - "**/*.ts", - "**/*.tsx", - "../../features/**/*.ts", - "../../features/**/*.tsx", - "../../features/app-core/graphql-env.d.ts", - "../../packages/@green-stack-core/global.d.ts" - ], - "exclude": ["node_modules"] - }`, + template: tsConfigTemplate, } ] as PlopTypes.ActionType[] diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index b6e17e8..a0b43e1 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -4,6 +4,9 @@ "private": true, "dependencies": { "@app/registries": "*", + "@happy-dom/global-registrator": "^15.0.0", + "@testing-library/jest-dom": "^6.4.8", + "@testing-library/react": "^16.0.0", "crypto-js": "^4.2.0", "dot-prop": "^9.0.0", "zod": "^3.23.7" diff --git a/packages/@green-stack-core/preload.test.ts b/packages/@green-stack-core/preload.test.ts index 6cca9a1..1eb9772 100644 --- a/packages/@green-stack-core/preload.test.ts +++ b/packages/@green-stack-core/preload.test.ts @@ -1,5 +1,9 @@ -import glob from 'glob' // @ts-ignore -import { mock } from 'bun:test' +// @ts-ignore +export * from '@testing-library/jest-dom/jest-globals' +import glob from 'glob' +import { GlobalRegistrator } from '@happy-dom/global-registrator' +import { cleanup } from '@testing-library/react' // @ts-ignore +import { mock, afterEach } from 'bun:test' /* --- Mock tsConfig paths --------------------------------------------------------------------- */ @@ -41,3 +45,11 @@ mock.module('expo-constants', () => import('./__mocks__/expo-constants.mock')) mock.module(require.resolve('expo-constants'), () => import('./__mocks__/expo-constants.mock')) // @ts-ignore mock.module('react-native', () => import('react-native-web')) // @ts-ignore mock.module(require.resolve('react-native'), () => import('react-native-web')) + +/* --- React Testing Library ------------------------------------------------------------------- */ + +afterEach(() => { + cleanup() +}) + +GlobalRegistrator.register() diff --git a/packages/@green-stack-core/schemas/tests/schemas.test.ts b/packages/@green-stack-core/schemas/tests/schemas.test.ts index b65c263..bb93742 100644 --- a/packages/@green-stack-core/schemas/tests/schemas.test.ts +++ b/packages/@green-stack-core/schemas/tests/schemas.test.ts @@ -1,3 +1,4 @@ +// @ts-ignore import { expect, test } from 'bun:test' import { z, schema, Meta$Schema } from '../index' import { ZodError } from 'zod' diff --git a/packages/@green-stack-core/tsconfig.json b/packages/@green-stack-core/tsconfig.json index 122618e..9fdbb3c 100644 --- a/packages/@green-stack-core/tsconfig.json +++ b/packages/@green-stack-core/tsconfig.json @@ -5,8 +5,10 @@ "**/*.tsx", "../../features/**/*.ts", "../../features/**/*.tsx", + "../../packages/**/*.ts", + "../../packages/**/*.tsx", "../../features/@app-core/graphql-env.d.ts", "../../packages/@green-stack-core/global.d.ts" ], - "exclude": ["node_modules", "**/*.test.ts", "**/*.test.tsx"] + "exclude": ["node_modules"] } diff --git a/packages/@green-stack-core/utils/stringUtils.ts b/packages/@green-stack-core/utils/stringUtils.ts index e8c75d3..6810097 100644 --- a/packages/@green-stack-core/utils/stringUtils.ts +++ b/packages/@green-stack-core/utils/stringUtils.ts @@ -47,9 +47,9 @@ export const findTargetString = (source: string, search = '($target$)') => { /** -i- Replaces every string you pass as the targets (2nd arg) with the string in the 3rd argument * @example ``` * replaceMany('useUpdateDataForm()', ['Update', 'Add'], '') - * // => 'useDataForm()' + * // => 'useDataForm()' -- Removed 'Update' * replaceMany('useAddUserForm()', ['Update', 'Add'], '') - * // => 'useUserForm()' + * // => 'useUserForm()' -- Removed 'Add' * ``` */ export const replaceMany = (source: string, targets: string[], replacement: string) => { const allTargets = targets.flatMap((target) => [uppercaseFirstChar(target), lowercaseFirstChar(target)]) // prettier-ignore diff --git a/packages/@green-stack-core/utils/tailwindUtils.ts b/packages/@green-stack-core/utils/tailwindUtils.ts new file mode 100644 index 0000000..0958ced --- /dev/null +++ b/packages/@green-stack-core/utils/tailwindUtils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' + +/** --- cn() ----------------------------------------------------------------------------------- */ +/** -i- Combines an array of classNames but filters out falsy array elements */ +export const cn = (...classNames: ClassValue[]) => twMerge(clsx(...classNames)) diff --git a/turbo.json b/turbo.json index c98bd17..6192e69 100644 --- a/turbo.json +++ b/turbo.json @@ -1,5 +1,5 @@ { - "$schema": "https://turbo.build/schema.json", + "$schema": "https://turbo.build/schema.v1.json", "pipeline": { "build": { "dependsOn": ["@green-stack/core#build:schema"], diff --git a/turbo/generators/config.ts b/turbo/generators/config.ts index faf8fd0..7207abe 100644 --- a/turbo/generators/config.ts +++ b/turbo/generators/config.ts @@ -60,9 +60,11 @@ export default function (plop: PlopTypes.NodePlopAPI) { console.log('Opening files in VSCode...') const targetPath = plop.getPlopfilePath().replace('/turbo/generators', '') const absolutePaths = config.paths.map((p) => path.join(targetPath, p)) + const numFiles = absolutePaths.length + const fileOrFiles = numFiles === 1 ? 'file' : 'files' // Open files in VSCode execSync(`code ${absolutePaths.join(' ')}`) - resolve(`Opened ${absolutePaths.length} files in VSCode`) + resolve(`Opened ${numFiles} ${fileOrFiles} in VSCode`) } catch (error) { console.error('Failed to open files in VSCode:', error) reject(error) From 6f1d955d51f1517df4e3facd71a4709e33bd6b4b Mon Sep 17 00:00:00 2001 From: codinsonn Date: Mon, 26 Aug 2024 14:08:24 +0200 Subject: [PATCH 040/126] chore: Bump expo SDK 51 dependencies --- apps/expo/package.json | 14 +- apps/next/next.config.base.js | 30 + apps/next/next.config.js | 30 +- apps/next/tsconfig.json | 5 + features/@app-core/components/styled.tsx | 5 + features/@app-core/graphql-env.d.ts | 26 +- features/@app-core/screens/HomeScreen.tsx | 30 +- package-lock.json | 3504 +++++------------ package.json | 5 +- .../components/Image.expo.tsx | 4 +- .../components/Image.next.tsx | 7 +- .../forms/tests/useFormState.test.ts | 55 +- .../navigation/Link.expo.tsx | 4 +- .../navigation/Link.next.tsx | 7 +- packages/@green-stack-core/package.json | 2 + .../styles/parseNativeWindStyles.ts | 4 +- ...react-native+assets-registry+0.74.87.patch | 42 + 17 files changed, 1154 insertions(+), 2620 deletions(-) create mode 100644 apps/next/next.config.base.js create mode 100644 patches/@react-native+assets-registry+0.74.87.patch diff --git a/apps/expo/package.json b/apps/expo/package.json index ed38c73..1e2b8a9 100644 --- a/apps/expo/package.json +++ b/apps/expo/package.json @@ -4,24 +4,24 @@ "private": true, "main": "index.js", "dependencies": { - "@expo/metro-runtime": "^3.2.1", - "expo": "^51.0.8", + "@expo/metro-runtime": "^3.2.3", + "expo": "^51.0.31", "expo-constants": "~16.0.1", "expo-linking": "~6.3.1", - "expo-router": "~3.5.14", + "expo-router": "~3.5.23", "expo-status-bar": "~1.12.1", "react": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.74.1", - "react-native-safe-area-context": "4.10.1", + "react-native": "0.74.5", + "react-native-safe-area-context": "4.10.5", "react-native-screens": "~3.31.1", "react-native-web": "~0.19.11", - "expo-image": "~1.12.9" + "expo-image": "~1.12.15" }, "devDependencies": { "@babel/core": "^7.19.3", "@expo/next-adapter": "^6.0.0", - "@types/react": "18.2.48", + "@types/react": "18.2.79", "typescript": "5.3.3" }, "scripts": { diff --git a/apps/next/next.config.base.js b/apps/next/next.config.base.js new file mode 100644 index 0000000..b2472ab --- /dev/null +++ b/apps/next/next.config.base.js @@ -0,0 +1,30 @@ +/** @type {import('next').NextConfig} */ +const mainNextConfig = { + reactStrictMode: true, + swcMinify: true, + transpilePackages: [ + "react-native", + "react-native-web", + "expo", + "nativewind", + // Add more React Native / Expo packages here... + ], + typescript: { + ignoreBuildErrors: true, + }, + experimental: { + forceSwcTransforms: true, + }, + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "codinsonn.dev", + } + ] + } +} + +// Re-exported separately so it can be reused +// in other configs like in `with/automatic-docs` +module.exports = mainNextConfig; diff --git a/apps/next/next.config.js b/apps/next/next.config.js index 48de0b4..da3c66b 100644 --- a/apps/next/next.config.js +++ b/apps/next/next.config.js @@ -1,35 +1,7 @@ const { withExpo } = require("@expo/next-adapter"); - -/** @type {import('next').NextConfig} */ -const mainNextConfig = { - reactStrictMode: true, - swcMinify: true, - transpilePackages: [ - "react-native", - "react-native-web", - "expo", - "nativewind", - // Add more React Native / Expo packages here... - ], - typescript: { - ignoreBuildErrors: true, - }, - experimental: { - forceSwcTransforms: true, - }, - images: { - remotePatterns: [ - { - protocol: "https", - hostname: "codinsonn.dev", - } - ] - } -} +const mainNextConfig = require("./next.config.base"); /** @type {import('next').NextConfig} */ const nextConfig = withExpo(mainNextConfig); module.exports = nextConfig; - -module.exports.mainNextConfig = mainNextConfig; diff --git a/apps/next/tsconfig.json b/apps/next/tsconfig.json index 0a734e2..1356456 100644 --- a/apps/next/tsconfig.json +++ b/apps/next/tsconfig.json @@ -10,6 +10,11 @@ "../../packages/**/*.tsx", "../../packages/**/*.ts" ], + "compilerOptions": { + "plugins": [{ + "name": "next" + }] + }, "exclude": [ "node_modules" ], diff --git a/features/@app-core/components/styled.tsx b/features/@app-core/components/styled.tsx index 5a65657..928408d 100644 --- a/features/@app-core/components/styled.tsx +++ b/features/@app-core/components/styled.tsx @@ -8,6 +8,11 @@ import { import { Link as UniversalLink } from '@green-stack/navigation/Link' import { UniversalLinkProps } from '@green-stack/navigation/Link.types' import { Image as UniversalImage } from '@green-stack/components/Image' +import { cn } from '@green-stack/utils/tailwindUtils' + +/* --- Reexports ------------------------------------------------------------------------------- */ + +export { styled, cn } /* --- Primitives ------------------------------------------------------------------------------ */ diff --git a/features/@app-core/graphql-env.d.ts b/features/@app-core/graphql-env.d.ts index f35958e..2aa745a 100644 --- a/features/@app-core/graphql-env.d.ts +++ b/features/@app-core/graphql-env.d.ts @@ -1,6 +1,19 @@ /* eslint-disable */ /* prettier-ignore */ +export type introspection_types = { + 'Boolean': unknown; + 'Date': unknown; + 'Float': unknown; + 'HealthCheckInput': { kind: 'INPUT_OBJECT'; name: 'HealthCheckInput'; isOneOf: false; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'verbose'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }]; }; + 'HealthCheckOutput': { kind: 'OBJECT'; name: 'HealthCheckOutput'; fields: { 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'backendURL': { name: 'backendURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'context': { name: 'context'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'graphURL': { name: 'graphURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; + 'Int': unknown; + 'JSON': unknown; + 'JSONObject': unknown; + 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'healthCheck': { name: 'healthCheck'; type: { kind: 'OBJECT'; name: 'HealthCheckOutput'; ofType: null; } }; }; }; + 'String': unknown; +}; + /** An IntrospectionQuery representation of your schema. * * @remarks @@ -14,18 +27,7 @@ export type introspection = { query: 'Query'; mutation: never; subscription: never; - types: { - 'Boolean': unknown; - 'Date': unknown; - 'Float': unknown; - 'HealthCheckInput': { kind: 'INPUT_OBJECT'; name: 'HealthCheckInput'; isOneOf: false; inputFields: [{ name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'verbose'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }]; }; - 'HealthCheckOutput': { kind: 'OBJECT'; name: 'HealthCheckOutput'; fields: { 'alive': { name: 'alive'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'aliveSince': { name: 'aliveSince'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; } }; 'aliveTime': { name: 'aliveTime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'apiURL': { name: 'apiURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'backendURL': { name: 'backendURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'baseURL': { name: 'baseURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'context': { name: 'context'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'debugPort': { name: 'debugPort'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'echo': { name: 'echo'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'graphURL': { name: 'graphURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'kicking': { name: 'kicking'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'nodeVersion': { name: 'nodeVersion'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'now': { name: 'now'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'port': { name: 'port'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'requestHost': { name: 'requestHost'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestProtocol': { name: 'requestProtocol'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'requestURL': { name: 'requestURL'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'serverTimezone': { name: 'serverTimezone'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'status': { name: 'status'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'systemArch': { name: 'systemArch'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemFreeMemory': { name: 'systemFreeMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'systemLoadAverage': { name: 'systemLoadAverage'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'systemPlatform': { name: 'systemPlatform'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemRelease': { name: 'systemRelease'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'systemTotalMemory': { name: 'systemTotalMemory'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'v8Version': { name: 'v8Version'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; - 'Int': unknown; - 'JSON': unknown; - 'JSONObject': unknown; - 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'healthCheck': { name: 'healthCheck'; type: { kind: 'OBJECT'; name: 'HealthCheckOutput'; ofType: null; } }; }; }; - 'String': unknown; - }; + types: introspection_types; }; import * as gqlTada from 'gql.tada'; diff --git a/features/@app-core/screens/HomeScreen.tsx b/features/@app-core/screens/HomeScreen.tsx index 4b6b318..6847109 100644 --- a/features/@app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/HomeScreen.tsx @@ -1,7 +1,7 @@ import React from 'react' import { ScrollView } from 'react-native' import { HydratedRouteProps, createQueryBridge } from '@green-stack/navigation' -import { View, Link, Image, P, H1, H3, Text, H2 } from '../components/styled' +import { View, Link, Image, P, H1, H3, Text, H2, cn } from '../components/styled' import { healthCheckFetcher } from '../resolvers/healthCheck.query' import { ArrowRightFilled } from '../icons/ArrowRightFilled' import { isLargeTablet } from '../appConfig' @@ -40,10 +40,10 @@ const HomeScreen = (props: HomeScreenProps) => { style={{ backgroundColor: '#1e293b' }} > @@ -53,11 +53,11 @@ const HomeScreen = (props: HomeScreenProps) => { {/* Side Icons */} { {/* Logo & Tagline */} @@ -115,10 +115,10 @@ const HomeScreen = (props: HomeScreenProps) => { { { const GettingStarted = () => (

=18" }, @@ -450,28 +451,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", - "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", - "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.9", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-module-transforms": "^7.24.9", - "@babel/helpers": "^7.24.8", - "@babel/parser": "^7.24.8", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.9", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -487,11 +488,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", - "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "version": "7.25.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz", + "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==", "dependencies": { - "@babel/types": "^7.24.9", + "@babel/types": "^7.25.4", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -525,11 +526,11 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", - "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dependencies": { - "@babel/compat-data": "^7.24.8", + "@babel/compat-data": "^7.25.2", "@babel/helper-validator-option": "^7.24.8", "browserslist": "^4.23.1", "lru-cache": "^5.1.1", @@ -553,18 +554,16 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.8.tgz", - "integrity": "sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", "@babel/helper-member-expression-to-functions": "^7.24.8", "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/traverse": "^7.25.4", "semver": "^6.3.1" }, "engines": { @@ -575,9 +574,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", - "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", @@ -616,29 +615,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", @@ -664,15 +640,14 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", - "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -701,13 +676,13 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", - "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-wrap-function": "^7.24.7" + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -717,13 +692,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", - "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", - "@babel/helper-optimise-call-expression": "^7.24.7" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -756,17 +731,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", @@ -792,26 +756,25 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", - "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", "dependencies": { - "@babel/helper-function-name": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", - "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.8" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -832,9 +795,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", - "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz", + "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==", + "dependencies": { + "@babel/types": "^7.25.4" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -843,13 +809,28 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", - "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", "peer": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -859,12 +840,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", - "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -891,13 +872,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", - "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", "peer": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1349,11 +1330,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1393,15 +1374,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", - "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", + "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", "peer": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.4" }, "engines": { "node": ">=6.9.0" @@ -1442,11 +1423,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", - "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1456,13 +1437,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1489,17 +1470,15 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.8.tgz", - "integrity": "sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.4", "globals": "^11.1.0" }, "engines": { @@ -1569,6 +1548,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", @@ -1617,11 +1612,11 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.7.tgz", - "integrity": "sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz", + "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/plugin-syntax-flow": "^7.24.7" }, "engines": { @@ -1648,13 +1643,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", - "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" }, "engines": { "node": ">=6.9.0" @@ -1680,11 +1675,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", - "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1757,15 +1752,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", - "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", "peer": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1933,12 +1928,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1994,15 +1989,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", - "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", + "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -2100,14 +2095,14 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", - "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz", + "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==", "dependencies": { "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, @@ -2192,13 +2187,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.8.tgz", - "integrity": "sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", + "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.8", + "@babel/helper-create-class-features-plugin": "^7.25.0", "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-typescript": "^7.24.7" }, "engines": { @@ -2255,13 +2251,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", "peer": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -2271,19 +2267,20 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.8.tgz", - "integrity": "sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", + "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", "peer": true, "dependencies": { - "@babel/compat-data": "^7.24.8", - "@babel/helper-compilation-targets": "^7.24.8", + "@babel/compat-data": "^7.25.4", + "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -2304,29 +2301,30 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.24.7", - "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.8", + "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", "@babel/plugin-transform-dynamic-import": "^7.24.7", "@babel/plugin-transform-exponentiation-operator": "^7.24.7", "@babel/plugin-transform-export-namespace-from": "^7.24.7", "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-member-expression-literals": "^7.24.7", "@babel/plugin-transform-modules-amd": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", "@babel/plugin-transform-modules-umd": "^7.24.7", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-new-target": "^7.24.7", @@ -2337,7 +2335,7 @@ "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.25.4", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-property-literals": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", @@ -2350,10 +2348,10 @@ "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.37.1", "semver": "^6.3.1" @@ -2456,9 +2454,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", - "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz", + "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2467,9 +2465,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.8.tgz", - "integrity": "sha512-DXG/BhegtMHhnN7YPIvxWd303/9aXvYFD1TjNL3CD6tUrhI2LVsg3Lck0aql5TRH29n4sj3emcROypkZVUfSuA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.0.tgz", + "integrity": "sha512-BOehWE7MgQ8W8Qn0CQnMtg2tHPHPulcS/5AVpFvs2KCK1ET+0WqZqPvnpRpFN81gYoFopdIEJX9Sgjw3ZBccPg==", "dev": true, "dependencies": { "core-js-pure": "^3.30.2", @@ -2480,31 +2478,28 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", - "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz", + "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.8", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.8", - "@babel/types": "^7.24.8", + "@babel/generator": "^7.25.4", + "@babel/parser": "^7.25.4", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.4", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2513,9 +2508,9 @@ } }, "node_modules/@babel/types": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", - "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz", + "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==", "dependencies": { "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", @@ -2552,9 +2547,9 @@ "link": true }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", "cpu": [ "ppc64" ], @@ -2563,15 +2558,14 @@ "os": [ "aix" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "cpu": [ "arm" ], @@ -2580,15 +2574,14 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "cpu": [ "arm64" ], @@ -2597,15 +2590,14 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "cpu": [ "x64" ], @@ -2614,15 +2606,14 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "cpu": [ "arm64" ], @@ -2631,15 +2622,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "cpu": [ "x64" ], @@ -2648,15 +2638,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "cpu": [ "arm64" ], @@ -2665,15 +2654,14 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "cpu": [ "x64" ], @@ -2682,15 +2670,14 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "cpu": [ "arm" ], @@ -2699,15 +2686,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "cpu": [ "arm64" ], @@ -2716,15 +2702,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "cpu": [ "ia32" ], @@ -2733,15 +2718,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "cpu": [ "loong64" ], @@ -2750,15 +2734,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "cpu": [ "mips64el" ], @@ -2767,15 +2750,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "cpu": [ "ppc64" ], @@ -2784,15 +2766,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "cpu": [ "riscv64" ], @@ -2801,15 +2782,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "cpu": [ "s390x" ], @@ -2818,15 +2798,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "cpu": [ "x64" ], @@ -2835,15 +2814,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", "cpu": [ "x64" ], @@ -2852,15 +2830,14 @@ "os": [ "netbsd" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", "cpu": [ "arm64" ], @@ -2869,15 +2846,14 @@ "os": [ "openbsd" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "cpu": [ "x64" ], @@ -2886,15 +2862,14 @@ "os": [ "openbsd" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "cpu": [ "x64" ], @@ -2903,15 +2878,14 @@ "os": [ "sunos" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "cpu": [ "arm64" ], @@ -2920,15 +2894,14 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "cpu": [ "ia32" ], @@ -2937,15 +2910,14 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "cpu": [ "x64" ], @@ -2954,24 +2926,19 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=18" } }, "node_modules/@expo/bunyan": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", - "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", - "engines": [ - "node >=0.10.0" - ], + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.1.tgz", + "integrity": "sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==", "dependencies": { "uuid": "^8.0.0" }, - "optionalDependencies": { - "mv": "~2", - "safe-json-stringify": "~1" + "engines": { + "node": ">=0.10.0" } }, "node_modules/@expo/bunyan/node_modules/uuid": { @@ -2983,9 +2950,9 @@ } }, "node_modules/@expo/cli": { - "version": "0.18.25", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.25.tgz", - "integrity": "sha512-Kh0uZGCxwu58Pu7Jto9T/ABlBR7nkx8QC0Wv8pI3YtISyQZIKtbtNNeTPWYbVK1ddswKwtBUj+MNhKoDL49TLg==", + "version": "0.18.29", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.29.tgz", + "integrity": "sha512-X810C48Ss+67RdZU39YEO1khNYo1RmjouRV+vVe0QhMoTe8R6OA3t+XYEdwaNbJ5p/DJN7szfHfNmX2glpC7xg==", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/code-signing-certificates": "0.0.5", @@ -2995,7 +2962,7 @@ "@expo/env": "~0.3.0", "@expo/image-utils": "^0.5.0", "@expo/json-file": "^8.3.0", - "@expo/metro-config": "~0.18.6", + "@expo/metro-config": "0.18.11", "@expo/osascript": "^2.0.31", "@expo/package-manager": "^1.5.0", "@expo/plist": "^0.1.0", @@ -3660,20 +3627,19 @@ } }, "node_modules/@expo/devcert": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.2.tgz", - "integrity": "sha512-FyWghLu7rUaZEZSTLt/XNRukm0c9GFfwP0iFaswoDWpV6alvVg+zRAfCLdIVQEz1SVcQ3zo1hMZFDrnKGvkCuQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.4.tgz", + "integrity": "sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==", "dependencies": { "application-config-path": "^0.1.0", "command-exists": "^1.2.4", "debug": "^3.1.0", "eol": "^0.9.1", "get-port": "^3.2.0", - "glob": "^7.1.2", + "glob": "^10.4.2", "lodash": "^4.17.21", "mkdirp": "^0.5.1", "password-prompt": "^1.0.4", - "rimraf": "^2.6.2", "sudo-prompt": "^8.2.0", "tmp": "^0.0.33", "tslib": "^2.4.0" @@ -3687,16 +3653,23 @@ "ms": "^2.1.1" } }, - "node_modules/@expo/devcert/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/@expo/devcert/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dependencies": { - "glob": "^7.1.3" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { - "rimraf": "bin.js" + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@expo/env": { @@ -3956,9 +3929,9 @@ } }, "node_modules/@expo/metro-config": { - "version": "0.18.9", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.9.tgz", - "integrity": "sha512-kcqT/wuO43zxuFeR5AR/pMuq/O9qtIyuTI1wYvBY97blHAYU/wfPJKW3xFL14fDkPqQOc87hEEhjlJiXoebvcw==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.11.tgz", + "integrity": "sha512-/uOq55VbSf9yMbUO1BudkUM2SsGW1c5hr9BnhIqYqcsFv0Jp5D3DtJ4rljDKaUeNLbwr6m7pqIrkSMq5NrYf4Q==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", @@ -4059,9 +4032,9 @@ } }, "node_modules/@expo/metro-runtime": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.2.1.tgz", - "integrity": "sha512-L7xNo5SmK+rcuXDm/+VBBImpA7FZsVB+m/rNr3fNl5or+1+yrZe99ViF7LZ8DOoVqAqcb4aCAXvGrP2JNYo1/Q==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.2.3.tgz", + "integrity": "sha512-v5ji+fAGi7B9YavrxvekuF8gXEV/5fz0+PhaED5AaFDnbGB4IJIbpaiqK9nqZV1axjGZNQSw6Q8TsnFetCR3bQ==", "peerDependencies": { "react-native": "*" } @@ -4605,27 +4578,34 @@ } }, "node_modules/@gql.tada/cli-utils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@gql.tada/cli-utils/-/cli-utils-1.5.1.tgz", - "integrity": "sha512-JVLpoXLa4msrE7MHnmW/7fYnIl8dncLom8T/Ghsxu+Kz5iMGnzK2joJN5cZt4ewCAqfCV3HZZ0VH189OalGd9g==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@gql.tada/cli-utils/-/cli-utils-1.6.1.tgz", + "integrity": "sha512-ZfYa5+rbK51c6ociTUL66qW1lyB9dXoAKNZMEAp2pWgPp16qZVBwopUaYxSKq4BML9eSiv0ocoJ7H6VW51ud7w==", "dependencies": { - "@0no-co/graphqlsp": "^1.12.9", - "@gql.tada/internal": "1.0.4", - "@vue/compiler-dom": "^3.4.23", - "@vue/language-core": "^2.0.17", - "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", - "svelte2tsx": "^0.7.6" + "@0no-co/graphqlsp": "^1.12.13", + "@gql.tada/internal": "1.0.7", + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0" }, "peerDependencies": { - "@0no-co/graphqlsp": "^1.12.9", + "@0no-co/graphqlsp": "^1.12.13", + "@gql.tada/svelte-support": "1.0.1", + "@gql.tada/vue-support": "1.0.1", "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "@gql.tada/svelte-support": { + "optional": true + }, + "@gql.tada/vue-support": { + "optional": true + } } }, "node_modules/@gql.tada/internal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-1.0.4.tgz", - "integrity": "sha512-tq0rgoqjhdVqKWEsbrkiX7Qpp5gA4/Br9r9TVBeh3WpJIcuGh5U48UjB4IOxtXBePZdX8E0oc07GjOid/P60Wg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-1.0.7.tgz", + "integrity": "sha512-mI/7l7If7YR4rBlgnkXihh1qxD7eO41o8nf5ZYjwYl4s6FGFQFZY1E1reV3AgRy8tDXbiuMz1bIVLpnxPXxKIQ==", "dependencies": { "@0no-co/graphql.web": "^1.0.5" }, @@ -4843,229 +4823,48 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/create-cache-key-function/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==", + "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==", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/create-cache-key-function/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==", + "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==", "dependencies": { - "@types/istanbul-lib-report": "*" + "@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/create-cache-key-function/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/create-cache-key-function/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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/create-cache-key-function/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/create-cache-key-function/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/create-cache-key-function/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==" - }, - "node_modules/@jest/create-cache-key-function/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/create-cache-key-function/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "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/environment/node_modules/@jest/types": { + "node_modules/@jest/schemas": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "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/@jest/environment/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==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/environment/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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/environment/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/environment/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/environment/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==" - }, - "node_modules/@jest/environment/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "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" + "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "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==", @@ -5081,23 +4880,7 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/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==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -5111,7 +4894,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/fake-timers/node_modules/chalk": { + "node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -5126,7 +4909,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/fake-timers/node_modules/color-convert": { + "node_modules/@jest/types/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -5137,12 +4920,12 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/color-name": { + "node_modules/@jest/types/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@jest/fake-timers/node_modules/has-flag": { + "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -5150,7 +4933,7 @@ "node": ">=8" } }, - "node_modules/@jest/fake-timers/node_modules/supports-color": { + "node_modules/@jest/types/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -5161,30 +4944,6 @@ "node": ">=8" } }, - "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==", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -5518,18 +5277,18 @@ } }, "node_modules/@react-native-community/cli": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.6.tgz", - "integrity": "sha512-IqclB7VQ84ye8Fcs89HOpOscY4284VZg2pojHNl8H0Lzd4DadXJWQoxC7zWm8v2f8eyeX2kdhxp2ETD5tceIgA==", - "dependencies": { - "@react-native-community/cli-clean": "13.6.6", - "@react-native-community/cli-config": "13.6.6", - "@react-native-community/cli-debugger-ui": "13.6.6", - "@react-native-community/cli-doctor": "13.6.6", - "@react-native-community/cli-hermes": "13.6.6", - "@react-native-community/cli-server-api": "13.6.6", - "@react-native-community/cli-tools": "13.6.6", - "@react-native-community/cli-types": "13.6.6", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.9.tgz", + "integrity": "sha512-hFJL4cgLPxncJJd/epQ4dHnMg5Jy/7Q56jFvA3MHViuKpzzfTCJCB+pGY54maZbtym53UJON9WTGpM3S81UfjQ==", + "dependencies": { + "@react-native-community/cli-clean": "13.6.9", + "@react-native-community/cli-config": "13.6.9", + "@react-native-community/cli-debugger-ui": "13.6.9", + "@react-native-community/cli-doctor": "13.6.9", + "@react-native-community/cli-hermes": "13.6.9", + "@react-native-community/cli-server-api": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", + "@react-native-community/cli-types": "13.6.9", "chalk": "^4.1.2", "commander": "^9.4.1", "deepmerge": "^4.3.0", @@ -5541,18 +5300,18 @@ "semver": "^7.5.2" }, "bin": { - "react-native": "build/bin.js" + "rnc-cli": "build/bin.js" }, "engines": { "node": ">=18" } }, "node_modules/@react-native-community/cli-clean": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.6.tgz", - "integrity": "sha512-cBwJTwl0NyeA4nyMxbhkWZhxtILYkbU3TW3k8AXLg+iGphe0zikYMGB3T+haTvTc6alTyEFwPbimk9bGIqkjAQ==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.9.tgz", + "integrity": "sha512-7Dj5+4p9JggxuVNOjPbduZBAP1SUgNhLKVw5noBUzT/3ZpUZkDM+RCSwyoyg8xKWoE4OrdUAXwAFlMcFDPKykA==", "dependencies": { - "@react-native-community/cli-tools": "13.6.6", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", "execa": "^5.0.0", "fast-glob": "^3.3.2" @@ -5623,11 +5382,11 @@ } }, "node_modules/@react-native-community/cli-config": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.6.tgz", - "integrity": "sha512-mbG425zCKr8JZhv/j11382arezwS/70juWMsn8j2lmrGTrP1cUdW0MF15CCIFtJsqyK3Qs+FTmqttRpq81QfSg==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.9.tgz", + "integrity": "sha512-rFfVBcNojcMm+KKHE/xqpqXg8HoKl4EC7bFHUrahMJ+y/tZll55+oX/PGG37rzB8QzP2UbMQ19DYQKC1G7kXeg==", "dependencies": { - "@react-native-community/cli-tools": "13.6.6", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", "cosmiconfig": "^5.1.0", "deepmerge": "^4.3.0", @@ -5700,23 +5459,23 @@ } }, "node_modules/@react-native-community/cli-debugger-ui": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.6.tgz", - "integrity": "sha512-Vv9u6eS4vKSDAvdhA0OiQHoA7y39fiPIgJ6biT32tN4avHDtxlc6TWZGiqv7g98SBvDWvoVAmdPLcRf3kU+c8g==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.9.tgz", + "integrity": "sha512-TkN7IdFmGPPvTpAo3nCAH9uwGCPxWBEAwpqEZDrq0NWllI7Tdie8vDpGdrcuCcKalmhq6OYnkXzeBah7O1Ztpw==", "dependencies": { "serve-static": "^1.13.1" } }, "node_modules/@react-native-community/cli-doctor": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.6.tgz", - "integrity": "sha512-TWZb5g6EmQe2Ua2TEWNmyaEayvlWH4GmdD9ZC+p8EpKFpB1NpDGMK6sXbpb42TDvwZg5s4TDRplK0PBEA/SVDg==", - "dependencies": { - "@react-native-community/cli-config": "13.6.6", - "@react-native-community/cli-platform-android": "13.6.6", - "@react-native-community/cli-platform-apple": "13.6.6", - "@react-native-community/cli-platform-ios": "13.6.6", - "@react-native-community/cli-tools": "13.6.6", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.9.tgz", + "integrity": "sha512-5quFaLdWFQB+677GXh5dGU9I5eg2z6Vg4jOX9vKnc9IffwyIFAyJfCZHrxLSRPDGNXD7biDQUdoezXYGwb6P/A==", + "dependencies": { + "@react-native-community/cli-config": "13.6.9", + "@react-native-community/cli-platform-android": "13.6.9", + "@react-native-community/cli-platform-apple": "13.6.9", + "@react-native-community/cli-platform-ios": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", "command-exists": "^1.2.8", "deepmerge": "^4.3.0", @@ -5885,12 +5644,12 @@ } }, "node_modules/@react-native-community/cli-hermes": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.6.tgz", - "integrity": "sha512-La5Ie+NGaRl3klei6WxKoOxmCUSGGxpOk6vU5pEGf0/O7ky+Ay0io+zXYUZqlNMi/cGpO7ZUijakBYOB/uyuFg==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.9.tgz", + "integrity": "sha512-GvwiwgvFw4Ws+krg2+gYj8sR3g05evmNjAHkKIKMkDTJjZ8EdyxbkifRUs1ZCq3TMZy2oeblZBXCJVOH4W7ZbA==", "dependencies": { - "@react-native-community/cli-platform-android": "13.6.6", - "@react-native-community/cli-tools": "13.6.6", + "@react-native-community/cli-platform-android": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6" } @@ -5960,11 +5719,11 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.6.tgz", - "integrity": "sha512-/tMwkBeNxh84syiSwNlYtmUz/Ppc+HfKtdopL/5RB+fd3SV1/5/NPNjMlyLNgFKnpxvKCInQ7dnl6jGHJjeHjg==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.9.tgz", + "integrity": "sha512-9KsYGdr08QhdvT3Ht7e8phQB3gDX9Fs427NJe0xnoBh+PDPTI2BD5ks5ttsH8CzEw8/P6H8tJCHq6hf2nxd9cw==", "dependencies": { - "@react-native-community/cli-tools": "13.6.6", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", "execa": "^5.0.0", "fast-glob": "^3.3.2", @@ -6037,11 +5796,11 @@ } }, "node_modules/@react-native-community/cli-platform-apple": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.6.tgz", - "integrity": "sha512-bOmSSwoqNNT3AmCRZXEMYKz1Jf1l2F86Nhs7qBcXdY/sGiJ+Flng564LOqvdAlVLTbkgz47KjNKCS2pP4Jg0Mg==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.9.tgz", + "integrity": "sha512-KoeIHfhxMhKXZPXmhQdl6EE+jGKWwoO9jUVWgBvibpVmsNjo7woaG/tfJMEWfWF3najX1EkQAoJWpCDBMYWtlA==", "dependencies": { - "@react-native-community/cli-tools": "13.6.6", + "@react-native-community/cli-tools": "13.6.9", "chalk": "^4.1.2", "execa": "^5.0.0", "fast-glob": "^3.3.2", @@ -6162,20 +5921,20 @@ } }, "node_modules/@react-native-community/cli-platform-ios": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.6.tgz", - "integrity": "sha512-vjDnRwhlSN5ryqKTas6/DPkxuouuyFBAqAROH4FR1cspTbn6v78JTZKDmtQy9JMMo7N5vZj1kASU5vbFep9IOQ==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.9.tgz", + "integrity": "sha512-CiUcHlGs8vE0CAB4oi1f+dzniqfGuhWPNrDvae2nm8dewlahTBwIcK5CawyGezjcJoeQhjBflh9vloska+nlnw==", "dependencies": { - "@react-native-community/cli-platform-apple": "13.6.6" + "@react-native-community/cli-platform-apple": "13.6.9" } }, "node_modules/@react-native-community/cli-server-api": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.6.tgz", - "integrity": "sha512-ZtCXxoFlM7oDv3iZ3wsrT3SamhtUJuIkX2WePLPlN5bcbq7zimbPm2lHyicNJtpcGQ5ymsgpUWPCNZsWQhXBqQ==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.9.tgz", + "integrity": "sha512-W8FSlCPWymO+tlQfM3E0JmM8Oei5HZsIk5S0COOl0MRi8h0NmHI4WSTF2GCfbFZkcr2VI/fRsocoN8Au4EZAug==", "dependencies": { - "@react-native-community/cli-debugger-ui": "13.6.6", - "@react-native-community/cli-tools": "13.6.6", + "@react-native-community/cli-debugger-ui": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.1", @@ -6200,14 +5959,6 @@ "node": ">= 10.14.2" } }, - "node_modules/@react-native-community/cli-server-api/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==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { "version": "15.0.19", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", @@ -6308,9 +6059,9 @@ } }, "node_modules/@react-native-community/cli-tools": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.6.tgz", - "integrity": "sha512-ptOnn4AJczY5njvbdK91k4hcYazDnGtEPrqIwEI+k/CTBHNdb27Rsm2OZ7ye6f7otLBqF8gj/hK6QzJs8CEMgw==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.9.tgz", + "integrity": "sha512-OXaSjoN0mZVw3nrAwcY1PC0uMfyTd9fz7Cy06dh+EJc+h0wikABsVRzV8cIOPrVV+PPEEXE0DBrH20T2puZzgQ==", "dependencies": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", @@ -6473,9 +6224,9 @@ } }, "node_modules/@react-native-community/cli-types": { - "version": "13.6.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.6.tgz", - "integrity": "sha512-733iaYzlmvNK7XYbnWlMjdE+2k0hlTBJW071af/xb6Bs+hbJqBP9c03FZuYH2hFFwDDntwj05bkri/P7VgSxug==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.9.tgz", + "integrity": "sha512-RLxDppvRxXfs3hxceW/mShi+6o5yS+kFPnPqZTaMKKR5aSg7LwDpLQW4K2D22irEG8e6RKDkZUeH9aL3vO2O0w==", "dependencies": { "joi": "^17.2.1" } @@ -6641,28 +6392,28 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.83.tgz", - "integrity": "sha512-2vkLMVnp+YTZYTNSDIBZojSsjz8sl5PscP3j4GcV6idD8V978SZfwFlk8K0ti0BzRs11mzL0Pj17km597S/eTQ==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.87.tgz", + "integrity": "sha512-1XmRhqQchN+pXPKEKYdpJlwESxVomJOxtEnIkbo7GAlaN2sym84fHEGDXAjLilih5GVPpcpSmFzTy8jx3LtaFg==", "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.85.tgz", - "integrity": "sha512-48TSDclRB5OMXiImiJkLxyCfRyLsqkCgI8buugCZzvXcYslfV7gCvcyFyQldtcOmerV+CK4RAj7QS4hmB5Mr8Q==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.87.tgz", + "integrity": "sha512-+vJYpMnENFrwtgvDfUj+CtVJRJuUnzAUYT0/Pb68Sq9RfcZ5xdcCuUgyf7JO+akW2VTBoJY427wkcxU30qrWWw==", "dependencies": { - "@react-native/codegen": "0.74.85" + "@react-native/codegen": "0.74.87" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.85.tgz", - "integrity": "sha512-yMHUlN8INbK5BBwiBuQMftdWkpm1IgCsoJTKcGD2OpSgZhwwm8RUSvGhdRMzB2w7bsqqBmaEMleGtW6aCR7B9w==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.87.tgz", + "integrity": "sha512-hyKpfqzN2nxZmYYJ0tQIHG99FQO0OWXp/gVggAfEUgiT+yNKas1C60LuofUsK7cd+2o9jrpqgqW4WzEDZoBlTg==", "dependencies": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", @@ -6704,7 +6455,7 @@ "@babel/plugin-transform-typescript": "^7.5.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.74.85", + "@react-native/babel-plugin-codegen": "0.74.87", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, @@ -6716,9 +6467,9 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.85.tgz", - "integrity": "sha512-N7QwoS4Hq/uQmoH83Ewedy6D0M7xbQsOU3OMcQf0eY3ltQ7S2hd9/R4UTalQWRn1OUJfXR6OG12QJ4FStKgV6Q==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.87.tgz", + "integrity": "sha512-GMSYDiD+86zLKgMMgz9z0k6FxmRn+z6cimYZKkucW4soGbxWsbjUAZoZ56sJwt2FJ3XVRgXCrnOCgXoH/Bkhcg==", "dependencies": { "@babel/parser": "^7.20.0", "glob": "^7.1.1", @@ -6736,14 +6487,14 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.83.tgz", - "integrity": "sha512-7GAFjFOg1mFSj8bnFNQS4u8u7+QtrEeflUIDVZGEfBZQ3wMNI5ycBzbBGycsZYiq00Xvoc6eKFC7kvIaqeJpUQ==", - "dependencies": { - "@react-native-community/cli-server-api": "13.6.6", - "@react-native-community/cli-tools": "13.6.6", - "@react-native/dev-middleware": "0.74.83", - "@react-native/metro-babel-transformer": "0.74.83", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.87.tgz", + "integrity": "sha512-EgJG9lSr8x3X67dHQKQvU6EkO+3ksVlJHYIVv6U/AmW9dN80BEFxgYbSJ7icXS4wri7m4kHdgeq2PQ7/3vvrTQ==", + "dependencies": { + "@react-native-community/cli-server-api": "13.6.9", + "@react-native-community/cli-tools": "13.6.9", + "@react-native/dev-middleware": "0.74.87", + "@react-native/metro-babel-transformer": "0.74.87", "chalk": "^4.0.0", "execa": "^5.1.1", "metro": "^0.80.3", @@ -6758,20 +6509,20 @@ } }, "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.83.tgz", - "integrity": "sha512-RGQlVUegBRxAUF9c1ss1ssaHZh6CO+7awgtI9sDeU0PzDZY/40ImoPD5m0o0SI6nXoVzbPtcMGzU+VO590pRfA==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.87.tgz", + "integrity": "sha512-MN95DJLYTv4EqJc+9JajA3AJZSBYJz2QEJ3uWlHrOky2vKrbbRVaW1ityTmaZa2OXIvNc6CZwSRSE7xCoHbXhQ==", "engines": { "node": ">=18" } }, "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.83.tgz", - "integrity": "sha512-UH8iriqnf7N4Hpi20D7M2FdvSANwTVStwFCSD7VMU9agJX88Yk0D1T6Meh2RMhUu4kY2bv8sTkNRm7LmxvZqgA==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.87.tgz", + "integrity": "sha512-7TmZ3hTHwooYgIHqc/z87BMe1ryrIqAUi+AF7vsD+EHCGxHFdMjSpf1BZ2SUPXuLnF2cTiTfV2RwhbPzx0tYIA==", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.74.83", + "@react-native/debugger-frontend": "0.74.87", "@rnx-kit/chromium-edge-launcher": "^1.0.0", "chrome-launcher": "^0.15.2", "connect": "^3.6.5", @@ -6956,28 +6707,28 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.83.tgz", - "integrity": "sha512-Pw2BWVyOHoBuJVKxGVYF6/GSZRf6+v1Ygc+ULGz5t20N8qzRWPa2fRZWqoxsN7TkNLPsECYY8gooOl7okOcPAQ==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.87.tgz", + "integrity": "sha512-T+VX0N1qP+U9V4oAtn7FTX7pfsoVkd1ocyw9swYXgJqU2fK7hC9famW7b3s3ZiufPGPr1VPJe2TVGtSopBjL6A==", "engines": { "node": ">=18" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.83.tgz", - "integrity": "sha512-/t74n8r6wFhw4JEoOj3bN71N1NDLqaawB75uKAsSjeCwIR9AfCxlzZG0etsXtOexkY9KMeZIQ7YwRPqUdNXuqw==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.87.tgz", + "integrity": "sha512-M5Evdn76CuVEF0GsaXiGi95CBZ4IWubHqwXxV9vG9CC9kq0PSkoM2Pn7Lx7dgyp4vT7ccJ8a3IwHbe+5KJRnpw==", "engines": { "node": ">=18" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.83.tgz", - "integrity": "sha512-hGdx5N8diu8y+GW/ED39vTZa9Jx1di2ZZ0aapbhH4egN1agIAusj5jXTccfNBwwWF93aJ5oVbRzfteZgjbutKg==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.87.tgz", + "integrity": "sha512-UsJCO24sNax2NSPBmV1zLEVVNkS88kcgAiYrZHtYSwSjpl4WZ656tIeedBfiySdJ94Hr3kQmBYLipV5zk0NI1A==", "dependencies": { "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.74.83", + "@react-native/babel-preset": "0.74.87", "hermes-parser": "0.19.1", "nullthrows": "^1.1.1" }, @@ -6988,124 +6739,37 @@ "@babel/core": "*" } }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.83.tgz", - "integrity": "sha512-+S0st3t4Ro00bi9gjT1jnK8qTFOU+CwmziA7U9odKyWrCoRJrgmrvogq/Dr1YXlpFxexiGIupGut1VHxr+fxJA==", + "node_modules/@react-native/normalize-colors": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz", + "integrity": "sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw==" + }, + "node_modules/@react-native/virtualized-lists": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.87.tgz", + "integrity": "sha512-lsGxoFMb0lyK/MiplNKJpD+A1EoEUumkLrCjH4Ht+ZlG8S0BfCxmskLZ6qXn3BiDSkLjfjI/qyZ3pnxNBvkXpQ==", "dependencies": { - "@react-native/codegen": "0.74.83" + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.83.tgz", - "integrity": "sha512-KJuu3XyVh3qgyUer+rEqh9a/JoUxsDOzkJNfRpDyXiAyjDRoVch60X/Xa/NcEQ93iCVHAWs0yQ+XGNGIBCYE6g==", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.74.83", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/codegen": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.83.tgz", - "integrity": "sha512-GgvgHS3Aa2J8/mp1uC/zU8HuTh8ZT5jz7a4mVMWPw7+rGyv70Ba8uOVBq6UH2Q08o617IATYc+0HfyzAfm4n0w==", - "dependencies": { - "@babel/parser": "^7.20.0", - "glob": "^7.1.1", - "hermes-parser": "0.19.1", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/@react-native/normalize-colors": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz", - "integrity": "sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw==" - }, - "node_modules/@react-native/virtualized-lists": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.83.tgz", - "integrity": "sha512-rmaLeE34rj7py4FxTod7iMTC7BAsm+HrGA8WxYmEJeyTV7WSaxAkosKoYBz8038mOiwnG9VwA/7FrB6bEQvn1A==", - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^18.2.6", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@react-navigation/bottom-tabs": { - "version": "6.5.20", - "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz", - "integrity": "sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA==", + "node_modules/@react-navigation/bottom-tabs": { + "version": "6.5.20", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz", + "integrity": "sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA==", "dependencies": { "@react-navigation/elements": "^1.3.30", "color": "^4.2.3", @@ -7208,11 +6872,11 @@ } }, "node_modules/@remix-run/node": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.10.3.tgz", - "integrity": "sha512-LBqsgADJKW7tYdJZZi2wu20gfMm6UcOXbvb5U70P2jCNxjJvuIw1gXVvNXRJKAdxPKLonjm8cSpfoI6HeQKEDg==", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.11.2.tgz", + "integrity": "sha512-gRNFM61EOYWNmYgf+pvBt6MrirWlkDz1G6RQsJNowtRqbYoy05AdDe5HiHGF5w8ZMAZVeXnZiwbL0Nt7ykYBCA==", "dependencies": { - "@remix-run/server-runtime": "2.10.3", + "@remix-run/server-runtime": "2.11.2", "@remix-run/web-fetch": "^4.4.2", "@web3-storage/multipart-parser": "^1.0.0", "cookie-signature": "^1.1.0", @@ -7233,25 +6897,25 @@ } }, "node_modules/@remix-run/router": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.18.0.tgz", - "integrity": "sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", "engines": { "node": ">=14.0.0" } }, "node_modules/@remix-run/server-runtime": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.10.3.tgz", - "integrity": "sha512-vUl5jONUI6Lj0ICg9FSRFhoPzQdZ/7dpT1m7ID13DF5BEeF3t/9uCJS61XXWgQ/JEu7YRiwvZiwSRTrgM7zeWw==", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.11.2.tgz", + "integrity": "sha512-abG6ENj0X3eHqDxqO2thWM2NSEiPnqyt58z1BbiQCv+t8g0Zuqd5QHbB4wzdNvfS0vKhg+jJiigcJneAc4sZzw==", "dependencies": { - "@remix-run/router": "1.18.0", + "@remix-run/router": "1.19.1", "@types/cookie": "^0.6.0", "@web3-storage/multipart-parser": "^1.0.0", "cookie": "^0.6.0", "set-cookie-parser": "^2.4.8", "source-map": "^0.7.3", - "turbo-stream": "2.2.0" + "turbo-stream": "2.3.0" }, "engines": { "node": ">=18.0.0" @@ -7333,9 +6997,9 @@ } }, "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.45.tgz", + "integrity": "sha512-VZxPKNNhjKmaC1SUYowuXSRSMGyQGmQjvvA1xE4QZ0xce2kLtEhPDS+kqpCPBZYgqblCLQ2DAjSzmgCM5auvhA==", "dependencies": { "undici-types": "~5.26.4" } @@ -7362,6 +7026,11 @@ "node": ">=10" } }, + "node_modules/@rnx-kit/chromium-edge-launcher/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/@segment/loosely-validate-event": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", @@ -7419,27 +7088,27 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.51.9", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.51.9.tgz", - "integrity": "sha512-HsAwaY5J19MD18ykZDS3aVVh+bAt0i7m6uQlFC2b77DLV9djo+xEN7MWQAQQTR8IM+7r/zbozTQ7P0xr0bHuew==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.52.0.tgz", + "integrity": "sha512-U1DOEgltjUwalN6uWYTewSnA14b+tE7lSylOiASKCAO61ENJeCq9VVD/TXHA6O5u9+6v5+UgGYBSccTKDoyMqw==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "5.51.11", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.51.11.tgz", - "integrity": "sha512-4Kq2x0XpDlpvSnaLG+8pHNH60zEc3mBvb3B2tOMDjcPCi/o+Du3p/9qpPLwJOTliVxxPJAP27fuIhLrsRdCr7A==", + "version": "5.52.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.52.1.tgz", + "integrity": "sha512-soyn4dNIUZ8US8NaPVXv06gkZFHaZnPfKWPDjRJjFRW3Y7WZ0jx72eT6zhw3VQlkMPysmXye8l35ewPHspKgbQ==", "dependencies": { - "@tanstack/query-core": "5.51.9" + "@tanstack/query-core": "5.52.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "react": "^18.0.0" + "react": "^18 || ^19" } }, "node_modules/@testing-library/dom": { @@ -7519,38 +7188,6 @@ "node": ">=8" } }, - "node_modules/@testing-library/dom/node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@testing-library/dom/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==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "peer": true - }, "node_modules/@testing-library/dom/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7564,12 +7201,11 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.8.tgz", - "integrity": "sha512-JD0G+Zc38f5MBHA4NgxQMR5XtO5Jx9g86jqturNTt2WUfRmLDIY7iKkWHDCCTiDuFMre6nxAD5wHw9W5kI4rGw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", + "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", "dependencies": { "@adobe/css-tools": "^4.4.0", - "@babel/runtime": "^7.9.2", "aria-query": "^5.0.0", "chalk": "^3.0.0", "css.escape": "^1.5.1", @@ -8226,12 +7862,12 @@ } }, "node_modules/@types/bun": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.1.6.tgz", - "integrity": "sha512-uJgKjTdX0GkWEHZzQzFsJkWp5+43ZS7HC8sZPFnOwnSo1AsNl2q9o2bFeS23disNDqbggEgyFkKCHl/w8iZsMA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.1.8.tgz", + "integrity": "sha512-PIwVFQKPviksiibobyvcWtMvMFMTj91T8dQEh9l1P3Ypr3ZuVn9w7HSr+5mTNrPqD1xpdDLEErzZPU8gqHBu6g==", "dev": true, "dependencies": { - "bun-types": "1.1.17" + "bun-types": "1.1.26" } }, "node_modules/@types/connect": { @@ -8247,32 +7883,11 @@ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" }, - "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, "peer": true }, "node_modules/@types/express": { @@ -8354,11 +7969,10 @@ } }, "node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "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==", "dependencies": { - "@types/istanbul-lib-coverage": "*", "@types/istanbul-lib-report": "*" } }, @@ -8384,11 +7998,11 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.14.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", - "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", + "version": "22.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz", + "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/node-fetch": { @@ -8425,22 +8039,15 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/react": { - "version": "18.2.48", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", - "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "version": "18.2.79", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.79.tgz", + "integrity": "sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==", "devOptional": true, "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, - "node_modules/@types/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==", - "devOptional": true - }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", @@ -8481,18 +8088,18 @@ "dev": true }, "node_modules/@types/ws": { - "version": "8.5.11", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.11.tgz", - "integrity": "sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w==", + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "13.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", - "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dependencies": { "@types/yargs-parser": "*" } @@ -8526,68 +8133,6 @@ "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" } }, - "node_modules/@volar/language-core": { - "version": "2.4.0-alpha.18", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.18.tgz", - "integrity": "sha512-JAYeJvYQQROmVRtSBIczaPjP3DX4QW1fOqW1Ebs0d3Y3EwSNRglz03dSv0Dm61dzd0Yx3WgTW3hndDnTQqgmyg==", - "dependencies": { - "@volar/source-map": "2.4.0-alpha.18" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.0-alpha.18", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.18.tgz", - "integrity": "sha512-MTeCV9MUwwsH0sNFiZwKtFrrVZUK6p8ioZs3xFzHc2cvDXHWlYN3bChdQtwKX+FY2HG6H3CfAu1pKijolzIQ8g==" - }, - "node_modules/@vue/compiler-core": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.33.tgz", - "integrity": "sha512-MoIREbkdPQlnGfSKDMgzTqzqx5nmEjIc0ydLVYlTACGBsfvOJ4tHSbZXKVF536n6fB+0eZaGEOqsGThPpdvF5A==", - "dependencies": { - "@babel/parser": "^7.24.7", - "@vue/shared": "3.4.33", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.33.tgz", - "integrity": "sha512-GzB8fxEHKw0gGet5BKlpfXEqoBnzSVWwMnT+dc25wE7pFEfrU/QsvjZMP9rD4iVXHBBoemTct8mN0GJEI6ZX5A==", - "dependencies": { - "@vue/compiler-core": "3.4.33", - "@vue/shared": "3.4.33" - } - }, - "node_modules/@vue/language-core": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.28.tgz", - "integrity": "sha512-0z4tyCCaqqPbdyz0T4yTFQeLpCo4TOM/ZHAC3geGLHeCiFAjVbROB9PiEtrXR1AoLObqUPFHSmKZeWtEMssSqw==", - "dependencies": { - "@volar/language-core": "~2.4.0-alpha.18", - "@vue/compiler-dom": "^3.4.0", - "@vue/shared": "^3.4.0", - "computeds": "^0.0.1", - "minimatch": "^9.0.3", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1", - "vue-template-compiler": "^2.7.14" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/shared": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.33.tgz", - "integrity": "sha512-aoRY0jQk3A/cuvdkodTrM4NMfxco8n55eG4H7ML/CRy7OryHfiqvug4xrCBBMbbN+dvXAetDDwZW9DXWWjBntA==" - }, "node_modules/@web3-storage/multipart-parser": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", @@ -9138,9 +8683,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "dev": true, "funding": [ { @@ -9157,11 +8702,11 @@ } ], "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -9188,15 +8733,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -9219,12 +8755,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -9242,102 +8778,9 @@ } }, "node_modules/babel-plugin-react-compiler": { - "version": "0.0.0-experimental-696af53-20240625", - "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-0.0.0-experimental-696af53-20240625.tgz", - "integrity": "sha512-OUDKms8qmcm5bX0D+sJWC1YcKcd7AZ2aJ7eY6gkR+Xr7PDfkXLbqAld4Qs9B0ntjVbUMEtW/PjlQrxDtY4raHg==", - "dependencies": { - "@babel/generator": "7.2.0", - "@babel/types": "^7.19.0", - "chalk": "4", - "invariant": "^2.2.4", - "pretty-format": "^24", - "zod": "^3.22.4", - "zod-validation-error": "^2.1.0" - } - }, - "node_modules/babel-plugin-react-compiler/node_modules/@babel/generator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.0.tgz", - "integrity": "sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==", - "dependencies": { - "@babel/types": "^7.2.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "node_modules/babel-plugin-react-compiler/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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-plugin-react-compiler/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-plugin-react-compiler/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-plugin-react-compiler/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==" - }, - "node_modules/babel-plugin-react-compiler/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-react-compiler/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-plugin-react-compiler/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-0.0.0.tgz", + "integrity": "sha512-Kigl0V36a/6hLVH7+CCe1CCtU3mFBqBd829V//VtuG7I/pyq+B2QZJqOefd63snQmdfCryNhO9XW1FbGPBvYDA==" }, "node_modules/babel-plugin-react-native-web": { "version": "0.19.12", @@ -9353,9 +8796,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "11.0.12", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.12.tgz", - "integrity": "sha512-hUuKdzSo8+H1oXQvKvlHRMHTxl+nN6YhFGlKiIxPa0E+gYfMEp8FnnStc/2Hwmip5rgJzQs6KF63KKRUc75xAg==", + "version": "11.0.14", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.14.tgz", + "integrity": "sha512-4BVYR0Sc2sSNxYTiE/OLSnPiOp+weFNy8eV+hX3aD6YAIbBnw+VubKRWqJV/sOJauzOLz0SgYAYyFciYMqizRA==", "dependencies": { "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-transform-export-namespace-from": "^7.22.11", @@ -9363,7 +8806,7 @@ "@babel/plugin-transform-parameters": "^7.22.15", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", - "@react-native/babel-preset": "0.74.85", + "@react-native/babel-preset": "0.74.87", "babel-plugin-react-compiler": "^0.0.0-experimental-592953e-20240517", "babel-plugin-react-native-web": "~0.19.10", "react-refresh": "^0.14.2" @@ -9535,9 +8978,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "funding": [ { "type": "opencollective", @@ -9553,9 +8996,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, "bin": { @@ -9626,9 +9069,9 @@ "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" }, "node_modules/bun-types": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.1.17.tgz", - "integrity": "sha512-Z4+OplcSd/YZq7ZsrfD00DKJeCwuNY96a1IDJyR73+cTBaFIS7SC6LhpY/W3AMEXO9iYq5NJ58WAwnwL1p5vKg==", + "version": "1.1.26", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.1.26.tgz", + "integrity": "sha512-n7jDe62LsB2+WE8Q8/mT3azkPaatKlj/2MyP6hi3mKvPz9oPpB6JW/Ll6JHtNLudasFFuvfgklYSE+rreGvBjw==", "dev": true, "dependencies": { "@types/node": "~20.12.8", @@ -9644,6 +9087,12 @@ "undici-types": "~5.26.4" } }, + "node_modules/bun-types/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==", + "dev": true + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -9795,9 +9244,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001643", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", - "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", + "version": "1.0.30001653", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz", + "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==", "funding": [ { "type": "opencollective", @@ -10028,26 +9477,12 @@ "node": ">=6" } }, - "node_modules/code-red": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "@types/estree": "^1.0.1", - "acorn": "^8.10.0", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" - } - }, - "node_modules/code-red/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "peer": true, - "dependencies": { - "@types/estree": "^1.0.0" + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" } }, "node_modules/color": { @@ -10197,11 +9632,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/computeds": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", - "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -10285,11 +9715,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dependencies": { - "browserslist": "^4.23.0" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -10297,9 +9727,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", - "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", + "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", "dev": true, "hasInstallScript": true, "funding": { @@ -10572,19 +10002,14 @@ } }, "node_modules/dayjs": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", - "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==" - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -10613,11 +10038,6 @@ "node": ">=0.10" } }, - "node_modules/dedent-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", - "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" - }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -11082,9 +10502,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", - "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==" + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -11310,12 +10730,11 @@ } }, "node_modules/esbuild": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "dev": true, "hasInstallScript": true, - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -11323,36 +10742,36 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.0", - "@esbuild/android-arm": "0.23.0", - "@esbuild/android-arm64": "0.23.0", - "@esbuild/android-x64": "0.23.0", - "@esbuild/darwin-arm64": "0.23.0", - "@esbuild/darwin-x64": "0.23.0", - "@esbuild/freebsd-arm64": "0.23.0", - "@esbuild/freebsd-x64": "0.23.0", - "@esbuild/linux-arm": "0.23.0", - "@esbuild/linux-arm64": "0.23.0", - "@esbuild/linux-ia32": "0.23.0", - "@esbuild/linux-loong64": "0.23.0", - "@esbuild/linux-mips64el": "0.23.0", - "@esbuild/linux-ppc64": "0.23.0", - "@esbuild/linux-riscv64": "0.23.0", - "@esbuild/linux-s390x": "0.23.0", - "@esbuild/linux-x64": "0.23.0", - "@esbuild/netbsd-x64": "0.23.0", - "@esbuild/openbsd-arm64": "0.23.0", - "@esbuild/openbsd-x64": "0.23.0", - "@esbuild/sunos-x64": "0.23.0", - "@esbuild/win32-arm64": "0.23.0", - "@esbuild/win32-ia32": "0.23.0", - "@esbuild/win32-x64": "0.23.0" + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, "node_modules/esbuild-register": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", - "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -11471,11 +10890,6 @@ "node": ">=4.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -11538,23 +10952,23 @@ } }, "node_modules/expo": { - "version": "51.0.22", - "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.22.tgz", - "integrity": "sha512-AtdqmtKNRC+cRBTsYGfwQFMLWAWWC531V2V+bAO3S9wVSTP2eLh34V06/IsBIjCCAJQPaaeR05XcST8U3apXFw==", + "version": "51.0.31", + "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.31.tgz", + "integrity": "sha512-YiUNcxzSkQ0jlKW+e8F81KnZfAhCugEZI9VYmuIsFONHivtiYIADHdcFvUWnexUEdgPQDkgWw85XBnIbzIZ39Q==", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.18.25", + "@expo/cli": "0.18.29", "@expo/config": "9.0.3", "@expo/config-plugins": "8.0.8", - "@expo/metro-config": "0.18.9", + "@expo/metro-config": "0.18.11", "@expo/vector-icons": "^14.0.0", - "babel-preset-expo": "~11.0.12", + "babel-preset-expo": "~11.0.14", "expo-asset": "~10.0.10", "expo-file-system": "~17.0.1", "expo-font": "~12.0.9", "expo-keep-awake": "~13.0.2", - "expo-modules-autolinking": "1.11.1", - "expo-modules-core": "1.12.19", + "expo-modules-autolinking": "1.11.2", + "expo-modules-core": "1.12.23", "fbemitter": "^3.0.0", "whatwg-url-without-unicode": "8.0.0-3" }, @@ -11607,9 +11021,9 @@ } }, "node_modules/expo-image": { - "version": "1.12.13", - "resolved": "https://registry.npmjs.org/expo-image/-/expo-image-1.12.13.tgz", - "integrity": "sha512-Dmuc5qmkIsl1nFj8C3Ux3wL2bN4QYW4dM9fkGA8kYiP5Fxf1lT36ldkHk2O2lPFRSFJDvLxT8Tz+7GTko5fzwQ==", + "version": "1.12.15", + "resolved": "https://registry.npmjs.org/expo-image/-/expo-image-1.12.15.tgz", + "integrity": "sha512-rjvnNSaFnrmlugDESTaYJhgdqRLn+M5vu0lD5NGNd2LkxGG5HrRV3gSzeyQQ68XRhrDN8eJvkcKujPKJUTMraw==", "peerDependencies": { "expo": "*" } @@ -11632,15 +11046,17 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz", - "integrity": "sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw==", + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.2.tgz", + "integrity": "sha512-fdcaNO8ucHA3yLNY52ZUENBcAG7KEx8QyMmnVNavO1JVBGRMZG8JyVcbrhYQDtVtpxkbai5YzwvLutINvbDZDQ==", "dependencies": { "chalk": "^4.1.0", "commander": "^7.2.0", "fast-glob": "^3.2.5", "find-up": "^5.0.0", - "fs-extra": "^9.1.0" + "fs-extra": "^9.1.0", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0" }, "bin": { "expo-modules-autolinking": "bin/expo-modules-autolinking.js" @@ -11733,19 +11149,19 @@ } }, "node_modules/expo-modules-core": { - "version": "1.12.19", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.19.tgz", - "integrity": "sha512-fFsErN4oMsOdStUVYvyLpl6MX/wbD9yJSqy/Lu7ZRLIPzeKDfGS2jNl8RzryPznRpWmy49X8l40R4osRJLizhg==", + "version": "1.12.23", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.23.tgz", + "integrity": "sha512-NYp/rWhKW6zlqNdC8/r+FckzlAGWX0IJEjOxwYHuYeRUn/vnKksb43G4E3jcaQEZgmWlKxK4LpxL3gr7m0RJFA==", "dependencies": { "invariant": "^2.2.4" } }, "node_modules/expo-router": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.5.18.tgz", - "integrity": "sha512-Pd76q9c5wcHU/dbsX2xhBaiJP0LRpB044RLLX3t3DR0MB3gjk+N9Fi7aC+ffyTiJ5uDDgpXdPe8ALL14/GgxbA==", + "version": "3.5.23", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.5.23.tgz", + "integrity": "sha512-Re2kYcxov67hWrcjuu0+3ovsLxYn79PuX6hgtYN20MgigY5ttX79KOIBEVGTO3F3y9dxSrGHyy5Z14BcO+usGQ==", "dependencies": { - "@expo/metro-runtime": "3.2.1", + "@expo/metro-runtime": "3.2.3", "@expo/server": "^0.4.0", "@radix-ui/react-slot": "1.0.1", "@react-navigation/bottom-tabs": "~6.5.7", @@ -11844,6 +11260,11 @@ "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.12.1.tgz", "integrity": "sha512-/t3xdbS8KB0prj5KG5w7z+wZPFlPtkgs95BsmrP/E7Q0xHXTcDcQ6Cu2FkFuRM+PKTb17cJDnLkawyS5vDLxMA==" }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, "node_modules/express": { "version": "4.19.2", "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", @@ -11977,9 +11398,9 @@ "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" }, "node_modules/fast-xml-parser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz", - "integrity": "sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ { "type": "github", @@ -12183,9 +11604,9 @@ "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" }, "node_modules/flow-parser": { - "version": "0.241.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.241.0.tgz", - "integrity": "sha512-82yKXpz7iWknWFsognZUf5a6mBQLnVrYoYSU9Nbu7FTOpKlu3v9ehpiI9mYXuaIO3J0ojX1b83M/InXvld9HUw==", + "version": "0.244.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.244.0.tgz", + "integrity": "sha512-Dkc88m5k8bx1VvHTO9HEJ7tvMcSb3Zvcv1PY4OHK7pHdtdY2aUjhmPy6vpjVJ2uUUOIybRlb91sXE8g4doChtA==", "engines": { "node": ">=0.4.0" } @@ -12204,9 +11625,9 @@ } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -12592,14 +12013,14 @@ } }, "node_modules/gql.tada": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.8.2.tgz", - "integrity": "sha512-LLt+2RcLY6i+Rq+LQQwx3uiEAPfA+pmEaAo/bJjUdaV1CVJBy3Wowds6GHeerW5kvekRM/XdbPTJw5OvnLq/DQ==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.8.6.tgz", + "integrity": "sha512-XyN/BkZVEJ5kxgK8oDjHluLwXBLdlUO6P4+u/AmYfknFDj5M5AnaZMm3pntMDO9tpaaEczy9pfXDEJ6tYuTlyA==", "dependencies": { "@0no-co/graphql.web": "^1.0.5", - "@0no-co/graphqlsp": "^1.12.9", - "@gql.tada/cli-utils": "1.5.1", - "@gql.tada/internal": "1.0.4" + "@0no-co/graphqlsp": "^1.12.13", + "@gql.tada/cli-utils": "1.6.1", + "@gql.tada/internal": "1.0.7" }, "bin": { "gql-tada": "bin/cli.js", @@ -12770,14 +12191,6 @@ "node": ">=18.0.0" } }, - "node_modules/happy-dom/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -12852,14 +12265,6 @@ "node": ">= 0.4" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, "node_modules/header-case": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", @@ -13012,9 +12417,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { "node": ">= 4" } @@ -13458,9 +12863,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { "hasown": "^2.0.2" }, @@ -13669,15 +13074,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "peer": true, - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -13874,102 +13270,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-node/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==", - "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/jest-environment-node/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==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-environment-node/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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-environment-node/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-environment-node/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-environment-node/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==" - }, - "node_modules/jest-environment-node/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-node/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", @@ -13997,38 +13297,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util/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==", - "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/jest-message-util/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==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14135,39 +13403,23 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-mock/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==", + "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==", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "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-mock/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==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-mock/node_modules/ansi-styles": { + "node_modules/jest-util/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -14181,7 +13433,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-mock/node_modules/chalk": { + "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -14196,7 +13448,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-mock/node_modules/color-convert": { + "node_modules/jest-util/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -14207,12 +13459,12 @@ "node": ">=7.0.0" } }, - "node_modules/jest-mock/node_modules/color-name": { + "node_modules/jest-util/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/jest-mock/node_modules/has-flag": { + "node_modules/jest-util/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -14220,7 +13472,18 @@ "node": ">=8" } }, - "node_modules/jest-mock/node_modules/supports-color": { + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -14231,55 +13494,23 @@ "node": ">=8" } }, - "node_modules/jest-util": { + "node_modules/jest-validate": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dependencies": { "@jest/types": "^29.6.3", - "@types/node": "*", + "camelcase": "^6.2.0", "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-util/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==", - "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" + "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-util/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==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-util/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { + "node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -14293,7 +13524,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-util/node_modules/chalk": { + "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -14308,7 +13539,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-util/node_modules/color-convert": { + "node_modules/jest-validate/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -14319,12 +13550,12 @@ "node": ">=7.0.0" } }, - "node_modules/jest-util/node_modules/color-name": { + "node_modules/jest-validate/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/jest-util/node_modules/has-flag": { + "node_modules/jest-validate/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -14332,140 +13563,17 @@ "node": ">=8" } }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" + "node_modules/jest-validate/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==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "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/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "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/jest-validate/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==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/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==", - "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" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { @@ -15013,12 +14121,6 @@ "node": ">=6.11.5" } }, - "node_modules/locate-character": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "peer": true - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -15291,15 +14393,6 @@ "lz-string": "bin/bin.js" } }, - "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -15418,9 +14511,9 @@ } }, "node_modules/metro": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.9.tgz", - "integrity": "sha512-Bc57Xf3GO2Xe4UWQsBj/oW6YfLPABEu8jfDVDiNmJvoQW4CO34oDPuYKe4KlXzXhcuNsqOtSxpbjCRRVjhhREg==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.10.tgz", + "integrity": "sha512-FDPi0X7wpafmDREXe1lgg3WzETxtXh6Kpq8+IwsG35R2tMyp2kFIqDdshdohuvDt1J/qDARcEPq7V/jElTb1kA==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -15436,34 +14529,34 @@ "debug": "^2.2.0", "denodeify": "^1.2.1", "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.20.1", + "hermes-parser": "0.23.0", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.6.3", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.9", - "metro-cache": "0.80.9", - "metro-cache-key": "0.80.9", - "metro-config": "0.80.9", - "metro-core": "0.80.9", - "metro-file-map": "0.80.9", - "metro-resolver": "0.80.9", - "metro-runtime": "0.80.9", - "metro-source-map": "0.80.9", - "metro-symbolicate": "0.80.9", - "metro-transform-plugins": "0.80.9", - "metro-transform-worker": "0.80.9", + "metro-babel-transformer": "0.80.10", + "metro-cache": "0.80.10", + "metro-cache-key": "0.80.10", + "metro-config": "0.80.10", + "metro-core": "0.80.10", + "metro-file-map": "0.80.10", + "metro-resolver": "0.80.10", + "metro-runtime": "0.80.10", + "metro-source-map": "0.80.10", + "metro-symbolicate": "0.80.10", + "metro-transform-plugins": "0.80.10", + "metro-transform-worker": "0.80.10", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", - "rimraf": "^3.0.2", "serialize-error": "^2.1.0", "source-map": "^0.5.6", "strip-ansi": "^6.0.0", "throat": "^5.0.0", - "ws": "^7.5.1", + "ws": "^7.5.10", "yargs": "^17.6.2" }, "bin": { @@ -15474,12 +14567,13 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.9.tgz", - "integrity": "sha512-d76BSm64KZam1nifRZlNJmtwIgAeZhZG3fi3K+EmPOlrR8rDtBxQHDSN3fSGeNB9CirdTyabTMQCkCup6BXFSQ==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.10.tgz", + "integrity": "sha512-GXHueUzgzcazfzORDxDzWS9jVVRV6u+cR6TGvHOfGdfLzJCj7/D0PretLfyq+MwN20twHxLW+BUXkoaB8sCQBg==", "dependencies": { "@babel/core": "^7.20.0", - "hermes-parser": "0.20.1", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.23.0", "nullthrows": "^1.1.1" }, "engines": { @@ -15487,75 +14581,82 @@ } }, "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", - "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.0.tgz", + "integrity": "sha512-Rkp0PNLGpORw4ktsttkVbpYJbrYKS3hAnkxu8D9nvQi6LvSbuPa+tYw/t2u3Gjc35lYd/k95YkjqyTcN4zspag==" }, "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", - "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.0.tgz", + "integrity": "sha512-xLwM4ylfHGwrm+2qXfO1JT/fnqEDGSnpS/9hQ4VLtqTexSviu2ZpBgz07U8jVtndq67qdb/ps0qvaWDZ3fkTyg==", "dependencies": { - "hermes-estree": "0.20.1" + "hermes-estree": "0.23.0" } }, "node_modules/metro-cache": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.9.tgz", - "integrity": "sha512-ujEdSI43QwI+Dj2xuNax8LMo8UgKuXJEdxJkzGPU6iIx42nYa1byQ+aADv/iPh5sh5a//h5FopraW5voXSgm2w==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.10.tgz", + "integrity": "sha512-8CBtDJwMguIE5RvV3PU1QtxUG8oSSX54mIuAbRZmcQ0MYiOl9JdrMd4JCBvIyhiZLoSStph425SMyCSnjtJsdA==", "dependencies": { - "metro-core": "0.80.9", - "rimraf": "^3.0.2" + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "metro-core": "0.80.10" }, "engines": { "node": ">=18" } }, "node_modules/metro-cache-key": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.9.tgz", - "integrity": "sha512-hRcYGhEiWIdM87hU0fBlcGr+tHDEAT+7LYNCW89p5JhErFt/QaAkVx4fb5bW3YtXGv5BTV7AspWPERoIb99CXg==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.10.tgz", + "integrity": "sha512-57qBhO3zQfoU/hP4ZlLW5hVej2jVfBX6B4NcSfMj4LgDPL3YknWg80IJBxzQfjQY/m+fmMLmPy8aUMHzUp/guA==", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, "engines": { "node": ">=18" } }, "node_modules/metro-config": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.9.tgz", - "integrity": "sha512-28wW7CqS3eJrunRGnsibWldqgwRP9ywBEf7kg+uzUHkSFJNKPM1K3UNSngHmH0EZjomizqQA2Zi6/y6VdZMolg==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.10.tgz", + "integrity": "sha512-0GYAw0LkmGbmA81FepKQepL1KU/85Cyv7sAiWm6QWeV6AcVCpsKg6jGLqGHJ0LLPL60rWzA4TV1DQAlzdJAEtA==", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", + "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.6.3", - "metro": "0.80.9", - "metro-cache": "0.80.9", - "metro-core": "0.80.9", - "metro-runtime": "0.80.9" + "metro": "0.80.10", + "metro-cache": "0.80.10", + "metro-core": "0.80.10", + "metro-runtime": "0.80.10" }, "engines": { "node": ">=18" } }, "node_modules/metro-core": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.9.tgz", - "integrity": "sha512-tbltWQn+XTdULkGdzHIxlxk4SdnKxttvQQV3wpqqFbHDteR4gwCyTR2RyYJvxgU7HELfHtrVbqgqAdlPByUSbg==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.10.tgz", + "integrity": "sha512-nwBB6HbpGlNsZMuzxVqxqGIOsn5F3JKpsp8PziS7Z4mV8a/jA1d44mVOgYmDa2q5WlH5iJfRIIhdz24XRNDlLA==", "dependencies": { + "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.9" + "metro-resolver": "0.80.10" }, "engines": { "node": ">=18" } }, "node_modules/metro-file-map": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.9.tgz", - "integrity": "sha512-sBUjVtQMHagItJH/wGU9sn3k2u0nrCl0CdR4SFMO1tksXLKbkigyQx4cbpcyPVOAmGTVuy3jyvBlELaGCAhplQ==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.10.tgz", + "integrity": "sha512-ytsUq8coneaN7ZCVk1IogojcGhLIbzWyiI2dNmw2nnBgV/0A+M5WaTTgZ6dJEz3dzjObPryDnkqWPvIGLCPtiw==", "dependencies": { "anymatch": "^3.0.3", "debug": "^2.2.0", "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", "invariant": "^2.2.4", "jest-worker": "^29.6.3", @@ -15585,10 +14686,11 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/metro-minify-terser": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.9.tgz", - "integrity": "sha512-FEeCeFbkvvPuhjixZ1FYrXtO0araTpV6UbcnGgDUpH7s7eR5FG/PiJz3TsuuPP/HwCK19cZtQydcA2QrCw446A==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.10.tgz", + "integrity": "sha512-Xyv9pEYpOsAerrld7cSLIcnCCpv8ItwysOmTA+AKf1q4KyE9cxrH2O2SA0FzMCkPzwxzBWmXwHUr+A89BpEM6g==", "dependencies": { + "flow-enums-runtime": "^0.0.6", "terser": "^5.15.0" }, "engines": { @@ -15596,35 +14698,40 @@ } }, "node_modules/metro-resolver": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.9.tgz", - "integrity": "sha512-wAPIjkN59BQN6gocVsAvvpZ1+LQkkqUaswlT++cJafE/e54GoVkMNCmrR4BsgQHr9DknZ5Um/nKueeN7kaEz9w==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.10.tgz", + "integrity": "sha512-EYC5CL7f+bSzrqdk1bylKqFNGabfiI5PDctxoPx70jFt89Jz+ThcOscENog8Jb4LEQFG6GkOYlwmPpsi7kx3QA==", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, "engines": { "node": ">=18" } }, "node_modules/metro-runtime": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.9.tgz", - "integrity": "sha512-8PTVIgrVcyU+X/rVCy/9yxNlvXsBCk5JwwkbAm/Dm+Abo6NBGtNjWF0M1Xo/NWCb4phamNWcD7cHdR91HhbJvg==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.10.tgz", + "integrity": "sha512-Xh0N589ZmSIgJYAM+oYwlzTXEHfASZac9TYPCNbvjNTn0EHKqpoJ/+Im5G3MZT4oZzYv4YnvzRtjqS5k0tK94A==", "dependencies": { - "@babel/runtime": "^7.0.0" + "@babel/runtime": "^7.0.0", + "flow-enums-runtime": "^0.0.6" }, "engines": { "node": ">=18" } }, "node_modules/metro-source-map": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.9.tgz", - "integrity": "sha512-RMn+XS4VTJIwMPOUSj61xlxgBvPeY4G6s5uIn6kt6HB6A/k9ekhr65UkkDD7WzHYs3a9o869qU8tvOZvqeQzgw==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.10.tgz", + "integrity": "sha512-EyZswqJW8Uukv/HcQr6K19vkMXW1nzHAZPWJSEyJFKIbgp708QfRZ6vnZGmrtFxeJEaFdNup4bGnu8/mIOYlyA==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", + "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.80.9", + "metro-symbolicate": "0.80.10", "nullthrows": "^1.1.1", - "ob1": "0.80.9", + "ob1": "0.80.10", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -15641,12 +14748,13 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.9.tgz", - "integrity": "sha512-Ykae12rdqSs98hg41RKEToojuIW85wNdmSe/eHUgMkzbvCFNVgcC0w3dKZEhSsqQOXapXRlLtHkaHLil0UD/EA==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.10.tgz", + "integrity": "sha512-qAoVUoSxpfZ2DwZV7IdnQGXCSsf2cAUExUcZyuCqGlY5kaWBb0mx2BL/xbMFDJ4wBp3sVvSBPtK/rt4J7a0xBA==", "dependencies": { + "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.80.9", + "metro-source-map": "0.80.10", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -15668,14 +14776,15 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.9.tgz", - "integrity": "sha512-UlDk/uc8UdfLNJhPbF3tvwajyuuygBcyp+yBuS/q0z3QSuN/EbLllY3rK8OTD9n4h00qZ/qgxGv/lMFJkwP4vg==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.10.tgz", + "integrity": "sha512-leAx9gtA+2MHLsCeWK6XTLBbv2fBnNFu/QiYhWzMq8HsOAP4u1xQAU0tSgPs8+1vYO34Plyn79xTLUtQCRSSUQ==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/template": "^7.0.0", "@babel/traverse": "^7.20.0", + "flow-enums-runtime": "^0.0.6", "nullthrows": "^1.1.1" }, "engines": { @@ -15683,21 +14792,22 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.9.tgz", - "integrity": "sha512-c/IrzMUVnI0hSVVit4TXzt3A1GiUltGVlzCmLJWxNrBGHGrJhvgePj38+GXl1Xf4Fd4vx6qLUkKMQ3ux73bFLQ==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.10.tgz", + "integrity": "sha512-zNfNLD8Rz99U+JdOTqtF2o7iTjcDMMYdVS90z6+81Tzd2D0lDWVpls7R1hadS6xwM+ymgXFQTjM6V6wFoZaC0g==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "metro": "0.80.9", - "metro-babel-transformer": "0.80.9", - "metro-cache": "0.80.9", - "metro-cache-key": "0.80.9", - "metro-minify-terser": "0.80.9", - "metro-source-map": "0.80.9", - "metro-transform-plugins": "0.80.9", + "flow-enums-runtime": "^0.0.6", + "metro": "0.80.10", + "metro-babel-transformer": "0.80.10", + "metro-cache": "0.80.10", + "metro-cache-key": "0.80.10", + "metro-minify-terser": "0.80.10", + "metro-source-map": "0.80.10", + "metro-transform-plugins": "0.80.10", "nullthrows": "^1.1.1" }, "engines": { @@ -15771,16 +14881,16 @@ } }, "node_modules/metro/node_modules/hermes-estree": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", - "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.0.tgz", + "integrity": "sha512-Rkp0PNLGpORw4ktsttkVbpYJbrYKS3hAnkxu8D9nvQi6LvSbuPa+tYw/t2u3Gjc35lYd/k95YkjqyTcN4zspag==" }, "node_modules/metro/node_modules/hermes-parser": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", - "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.0.tgz", + "integrity": "sha512-xLwM4ylfHGwrm+2qXfO1JT/fnqEDGSnpS/9hQ4VLtqTexSviu2ZpBgz07U8jVtndq67qdb/ps0qvaWDZ3fkTyg==", "dependencies": { - "hermes-estree": "0.20.1" + "hermes-estree": "0.23.0" } }, "node_modules/metro/node_modules/ms": { @@ -15828,9 +14938,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -16034,11 +15144,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==" - }, "node_modules/mute-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", @@ -16049,72 +15154,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/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==", - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "optional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -16197,15 +15236,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -16687,9 +15717,12 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, "node_modules/ob1": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.9.tgz", - "integrity": "sha512-v9yOxowkZbxWhKOaaTyLjIm1aLy4ebMNcSn4NYJKOAI/Qv+SkfEfszpLr2GIxsccmb2Y2HA9qtsqiIJ80ucpVA==", + "version": "0.80.10", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.10.tgz", + "integrity": "sha512-dJHyB0S6JkMorUSfSGcYGkkg9kmq3qDUu3ygZUKIfkr47XOPuG35r2Sk6tbwtHXbdKIXmcMvM8DF2CwgdyaHfQ==", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, "engines": { "node": ">=18" } @@ -17103,11 +16136,6 @@ "cross-spawn": "^7.0.3" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, "node_modules/path-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", @@ -17179,26 +16207,6 @@ "node": ">=8" } }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "peer": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/periscopic/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "peer": true, - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", @@ -17344,9 +16352,9 @@ } }, "node_modules/postcss": { - "version": "8.4.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", "funding": [ { "type": "opencollective", @@ -17511,9 +16519,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -17539,27 +16547,37 @@ } }, "node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "peer": true, "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">= 6" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "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==", + "peer": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "peer": true + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -17877,21 +16895,21 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native": { - "version": "0.74.1", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.1.tgz", - "integrity": "sha512-0H2XpmghwOtfPpM2LKqHIN7gxy+7G/r1hwJHKLV6uoyXGC/gCojRtoo5NqyKrWpFC8cqyT6wTYCLuG7CxEKilg==", + "version": "0.74.5", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.5.tgz", + "integrity": "sha512-Bgg2WvxaGODukJMTZFTZBNMKVaROHLwSb8VAGEdrlvKwfb1hHg/3aXTUICYk7dwgAnb+INbGMwnF8yeAgIUmqw==", "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native-community/cli": "13.6.6", - "@react-native-community/cli-platform-android": "13.6.6", - "@react-native-community/cli-platform-ios": "13.6.6", - "@react-native/assets-registry": "0.74.83", - "@react-native/codegen": "0.74.83", - "@react-native/community-cli-plugin": "0.74.83", - "@react-native/gradle-plugin": "0.74.83", - "@react-native/js-polyfills": "0.74.83", - "@react-native/normalize-colors": "0.74.83", - "@react-native/virtualized-lists": "0.74.83", + "@react-native-community/cli": "13.6.9", + "@react-native-community/cli-platform-android": "13.6.9", + "@react-native-community/cli-platform-ios": "13.6.9", + "@react-native/assets-registry": "0.74.87", + "@react-native/codegen": "0.74.87", + "@react-native/community-cli-plugin": "0.74.87", + "@react-native/gradle-plugin": "0.74.87", + "@react-native/js-polyfills": "0.74.87", + "@react-native/normalize-colors": "0.74.87", + "@react-native/virtualized-lists": "0.74.87", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -17949,9 +16967,9 @@ } }, "node_modules/react-native-safe-area-context": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.10.1.tgz", - "integrity": "sha512-w8tCuowDorUkPoWPXmhqosovBr33YsukkwYCDERZFHAxIkx6qBadYxfeoaJ91nCQKjkNzGrK5qhoNOeSIcYSpA==", + "version": "4.10.5", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.10.5.tgz", + "integrity": "sha512-Wyb0Nqw2XJ6oZxW/cK8k5q7/UAhg/wbEG6UVf89rQqecDZTDA5ic//P9J6VvJRVZerzGmxWQpVuM7f+PRYUM4g==", "peerDependencies": { "react": "*", "react-native": "*" @@ -17971,9 +16989,9 @@ } }, "node_modules/react-native-svg": { - "version": "15.4.0", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.4.0.tgz", - "integrity": "sha512-zkBEbme/Dba4yqreg/oI2P6/6LrLywWY7HhaSwpU7Pb5COpTd2fV6/ShsgZz8GRFFdidUPwWmx01FITUsjhkmw==", + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.6.0.tgz", + "integrity": "sha512-TUtR+h+yi1ODsd8FHdom1TpjfWOmnaK5pri5rnSBXnMqpzq8o2zZfonHTjPX+nS3wb/Pu2XsoARgYaHNjVWXhQ==", "dependencies": { "css-select": "^5.1.0", "css-tree": "^1.1.3", @@ -18023,43 +17041,15 @@ "node": ">= 10.14.2" } }, - "node_modules/react-native/node_modules/@react-native/codegen": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.83.tgz", - "integrity": "sha512-GgvgHS3Aa2J8/mp1uC/zU8HuTh8ZT5jz7a4mVMWPw7+rGyv70Ba8uOVBq6UH2Q08o617IATYc+0HfyzAfm4n0w==", - "dependencies": { - "@babel/parser": "^7.20.0", - "glob": "^7.1.1", - "hermes-parser": "0.19.1", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/react-native/node_modules/@react-native/normalize-colors": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.83.tgz", - "integrity": "sha512-jhCY95gRDE44qYawWVvhTjTplW1g+JtKTKM3f8xYT1dJtJ8QWv+gqEtKcfmOHfDkSDaMKG0AGBaDTSK8GXLH8Q==" - }, - "node_modules/react-native/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==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/react-native/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "node_modules/react-native/node_modules/@react-native/normalize-colors": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.87.tgz", + "integrity": "sha512-Xh7Nyk/MPefkb0Itl5Z+3oOobeG9lfLb7ZOY2DKpFnoCE1TzBmib9vMNdFaLdSxLIP+Ec6icgKtdzYg8QUPYzA==" + }, + "node_modules/react-native/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dependencies": { "@types/yargs-parser": "*" } @@ -18627,12 +17617,6 @@ } ] }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, "node_modules/safe-regex-test": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", @@ -18805,9 +17789,9 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz", + "integrity": "sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==" }, "node_modules/set-function-length": { "version": "1.2.2", @@ -19534,98 +18518,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svelte": { - "version": "4.2.18", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.18.tgz", - "integrity": "sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==", - "peer": true, - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/estree": "^1.0.1", - "acorn": "^8.9.0", - "aria-query": "^5.3.0", - "axobject-query": "^4.0.0", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", - "locate-character": "^3.0.0", - "magic-string": "^0.30.4", - "periscopic": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/svelte/node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "peer": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/svelte/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "peer": true, - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/svelte/node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "peer": true - }, - "node_modules/svelte2tsx": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.13.tgz", - "integrity": "sha512-aObZ93/kGAiLXA/I/kP+x9FriZM+GboB/ReOIGmLNbVGEd2xC+aTCppm3mk1cc9I/z60VQf7b2QDxC3jOXu3yw==", - "dependencies": { - "dedent-js": "^1.0.1", - "pascal-case": "^3.1.1" - }, - "peerDependencies": { - "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", - "typescript": "^4.9.4 || ^5.0.0" - } - }, - "node_modules/svelte2tsx/node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/svelte2tsx/node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/svelte2tsx/node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/swap-case": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", @@ -19636,6 +18528,15 @@ "upper-case": "^1.1.1" } }, + "node_modules/tailwind-merge": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.2.tgz", + "integrity": "sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, "node_modules/tailwindcss": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", @@ -19872,9 +18773,9 @@ } }, "node_modules/terser": { - "version": "5.31.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", - "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -20155,14 +19056,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==", - "engines": { - "node": ">=0.10.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", @@ -20218,17 +19111,17 @@ "devOptional": true }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/tsx": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.16.2.tgz", - "integrity": "sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.18.0.tgz", + "integrity": "sha512-a1jaKBSVQkd6yEc1/NI7G6yHFfefIcuf3QJST7ZEyn4oQnxLYrZR5uZAM8UrwUa3Ge8suiZHcNS1gNrEvmobqg==", "dev": true, "dependencies": { - "esbuild": "~0.21.5", + "esbuild": "~0.23.0", "get-tsconfig": "^4.7.5" }, "bin": { @@ -20241,412 +19134,6 @@ "fsevents": "~2.3.3" } }, - "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, "node_modules/turbo": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.13.4.tgz", @@ -20717,9 +19204,9 @@ ] }, "node_modules/turbo-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.2.0.tgz", - "integrity": "sha512-FKFg7A0To1VU4CH9YmSMON5QphK0BXjSoiC7D9yMh+mEEbXLUP9qJ4hEt1qcjKtzncs1OpcnjZO8NgrlVbZH+g==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.3.0.tgz", + "integrity": "sha512-PhEr9mdexoVv+rJkQ3c8TjrN3DUghX37GNJkSMksoPR4KrXIPnM2MnqRt07sViIqX9IdlhrgtTSyjoVOASq6cg==" }, "node_modules/turbo-windows-64": { "version": "1.13.4", @@ -20756,9 +19243,9 @@ } }, "node_modules/type-fest": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", - "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz", + "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==", "engines": { "node": ">=16" }, @@ -20902,9 +19389,9 @@ } }, "node_modules/uglify-js": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.0.tgz", - "integrity": "sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==", + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.2.tgz", + "integrity": "sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==", "dev": true, "optional": true, "bin": { @@ -20929,17 +19416,17 @@ } }, "node_modules/undici": { - "version": "6.19.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.4.tgz", - "integrity": "sha512-i3uaEUwNdkRq2qtTRRJb13moW5HWqviu7Vl7oYRYz++uPtGHJj+x7TGjcEuwS5Mt2P4nA0U9dhIX3DdB6JGY0g==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", + "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==", "engines": { "node": ">=18.17" } }, "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==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -21213,15 +19700,6 @@ "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" }, - "node_modules/vue-template-compiler": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", - "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -21275,18 +19753,20 @@ } }, "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==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } }, "node_modules/webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "peer": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -21295,7 +19775,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -21391,9 +19871,9 @@ } }, "node_modules/webpack/node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "peer": true, "dependencies": { @@ -21447,6 +19927,11 @@ "node": ">=8" } }, + "node_modules/whatwg-url/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/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -21784,17 +20269,6 @@ "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/zod-validation-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-2.1.0.tgz", - "integrity": "sha512-VJh93e2wb4c3tWtGgTa0OF/dTt/zoPCPzXq4V11ZjxmEAFaPi/Zss1xIZdEB5RD8GD00U0/iVXgqkF77RV7pdQ==", - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "zod": "^3.18.0" - } - }, "packages/@db-driver": { "name": "@db/driver", "version": "0.0.1" @@ -21807,8 +20281,10 @@ "@happy-dom/global-registrator": "^15.0.0", "@testing-library/jest-dom": "^6.4.8", "@testing-library/react": "^16.0.0", + "clsx": "^2.1.1", "crypto-js": "^4.2.0", "dot-prop": "^9.0.0", + "tailwind-merge": "^2.5.2", "zod": "^3.23.7" }, "devDependencies": { diff --git a/package.json b/package.json index 5b79048..0648870 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "next": "~14.0.4", "react": "18.2.0", "react-dom": "18.2.0", - "@types/react": "18.2.48" + "@types/react": "18.2.79" }, "scripts": { "dev": "npm run dev:apps", @@ -40,7 +40,8 @@ "gen": "npx turbo gen", "turbo:login": "npx turbo login", "turbo:link": "npx turbo link", - "turbo:unlink": "npx turbo unlink" + "turbo:unlink": "npx turbo unlink", + "postinstall": "npx patch-package" }, "devDependencies": { "@0no-co/graphqlsp": "^1.9.1", diff --git a/packages/@green-stack-core/components/Image.expo.tsx b/packages/@green-stack-core/components/Image.expo.tsx index 447869c..0539845 100644 --- a/packages/@green-stack-core/components/Image.expo.tsx +++ b/packages/@green-stack-core/components/Image.expo.tsx @@ -1,6 +1,6 @@ import { Image as ExpoImage } from 'expo-image' import { Platform } from 'react-native' -import { parseNativeWindStyles } from '../styles/parseNativeWindStyles' +import { parseNativewindStyles } from '../styles/parseNativewindStyles' import type { UniversalImageProps, UniversalImageMethods } from './Image.types' /* --- -------------------------------------------------------------------------------- */ @@ -42,7 +42,7 @@ const Image = (props: UniversalImageProps): JSX.Element => { // -- Nativewind -- - const { nativeWindStyles, restStyle } = parseNativeWindStyles(style) + const { nativeWindStyles, restStyle } = parseNativewindStyles(style) const finalStyle = { width, height, ...nativeWindStyles, ...restStyle } // -- Overrides -- diff --git a/packages/@green-stack-core/components/Image.next.tsx b/packages/@green-stack-core/components/Image.next.tsx index 7e85214..4a5bf04 100644 --- a/packages/@green-stack-core/components/Image.next.tsx +++ b/packages/@green-stack-core/components/Image.next.tsx @@ -1,5 +1,6 @@ import NextImage from 'next/image' -import { parseNativeWindStyles } from '../styles/parseNativeWindStyles' +import { parseNativewindStyles } from '../styles/parseNativewindStyles' +import { cn } from '../utils/tailwindUtils' import type { UniversalImageProps, UniversalImageMethods } from './Image.types' /* --- -------------------------------------------------------------------------------- */ @@ -35,7 +36,7 @@ const Image = (props: UniversalImageProps): JSX.Element => { // -- Nativewind -- - const { nativeWindStyles, nativeWindClassName, restStyle } = parseNativeWindStyles(style) + const { nativeWindStyles, nativeWindClassName, restStyle } = parseNativewindStyles(style) const finalStyle = { width, height, ...nativeWindStyles, ...restStyle } as React.CSSProperties // -- Overrides -- @@ -46,7 +47,7 @@ const Image = (props: UniversalImageProps): JSX.Element => { if (fill) finalStyle.width = '100%' if (fill) finalStyle.objectFit = contentFit || 'cover' - const finalClassName = [className, nativeWindClassName].filter(Boolean).join(' ') + const finalClassName = cn(className, nativeWindClassName) // -- Render -- diff --git a/packages/@green-stack-core/forms/tests/useFormState.test.ts b/packages/@green-stack-core/forms/tests/useFormState.test.ts index cde614f..9801600 100644 --- a/packages/@green-stack-core/forms/tests/useFormState.test.ts +++ b/packages/@green-stack-core/forms/tests/useFormState.test.ts @@ -92,18 +92,20 @@ test('formState.getChangeHandler() should return the correct handler for the giv test('formState.validate() should return the correct validation result', () => { // Hook - const { result } = renderHook(() => useFormState({ schema: User })) + const { result, rerender } = renderHook(() => useFormState({ schema: User })) - // Act const changeName = result.current.getChangeHandler('name') - act(() => { - // @ts-expect-error - changeName(2) - }) + + // @ts-expect-error + changeName(2) + + rerender() // Validate const isValid = result.current.validate() + rerender() + // Expect expect(isValid).toBe(false) expect(result.current.errors.age).toBeUndefined() @@ -123,20 +125,21 @@ test('formState.validate() should populate errors with our custom error messages }) // Hook - const { result } = renderHook(() => useFormState({ schema: User2 })) + const { result, rerender } = renderHook(() => useFormState({ schema: User2 })) - // Act const changeName = result.current.getChangeHandler('name') const changeAge = result.current.getChangeHandler('age') - act(() => { - // @ts-expect-error - changeName(0) - // @ts-expect-error - changeAge('') - }) + // @ts-expect-error + changeName(0) + + // @ts-expect-error + changeAge('') + // Validate + rerender() result.current.validate() + rerender() // Expect expect(result.current.errors).toEqual({ @@ -147,15 +150,11 @@ test('formState.validate() should populate errors with our custom error messages test('passing `validateOnChange: true` to useFormState() should update validation errors on every change', () => { // Hook - const { result } = renderHook(() => useFormState({ schema: User, validateOnChange: true })) - - // Act - const changeName = result.current.getChangeHandler('name') + const { result, rerender } = renderHook(() => useFormState({ schema: User, validateOnChange: true })) - act(() => { - // @ts-expect-error - changeName(2) - }) + const changeName = result.current.getChangeHandler('name') // @ts-expect-error + changeName(2) + rerender() // Expect expect(result.current.errors.name).toBeDefined() @@ -164,17 +163,15 @@ test('passing `validateOnChange: true` to useFormState() should update validatio test('formState.hasError() should return the correct error status for the given form field', () => { // Hook - const { result } = renderHook(() => useFormState({ schema: User })) + const { result, rerender } = renderHook(() => useFormState({ schema: User })) - // Act - const changeName = result.current.getChangeHandler('name') - act(() => { - // @ts-expect-error - changeName(2) - }) + // @ts-expect-error + result.current.handleChange('name', 2) + rerender() // Validate result.current.validate() + rerender() // Expect expect(result.current.hasError('name')).toBe(true) diff --git a/packages/@green-stack-core/navigation/Link.expo.tsx b/packages/@green-stack-core/navigation/Link.expo.tsx index f89f046..98e7c50 100644 --- a/packages/@green-stack-core/navigation/Link.expo.tsx +++ b/packages/@green-stack-core/navigation/Link.expo.tsx @@ -1,7 +1,7 @@ import type { KnownRoutes } from '@app/registries/routeManifest.generated' import type { UniversalLinkProps } from './Link.types' import { Link as ExpoLink } from 'expo-router' -import { parseNativeWindStyles } from '../styles/parseNativeWindStyles' +import { parseNativewindStyles } from '../styles/parseNativewindStyles' /* --- --------------------------------------------------------------------------------- */ @@ -39,7 +39,7 @@ export const Link = < // -- Nativewind -- - const { nativeWindStyles, restStyle } = parseNativeWindStyles(style) + const { nativeWindStyles, restStyle } = parseNativewindStyles(style) const finalStyle = { ...nativeWindStyles, ...restStyle } // -- Render -- diff --git a/packages/@green-stack-core/navigation/Link.next.tsx b/packages/@green-stack-core/navigation/Link.next.tsx index ea98523..ea6348e 100644 --- a/packages/@green-stack-core/navigation/Link.next.tsx +++ b/packages/@green-stack-core/navigation/Link.next.tsx @@ -2,7 +2,8 @@ import type { ComponentProps } from 'react' import type { KnownRoutes } from '@app/registries/routeManifest.generated' import type { UniversalLinkProps } from './Link.types' import NextLink from 'next/link' -import { parseNativeWindStyles } from '../styles/parseNativeWindStyles' +import { parseNativewindStyles } from '../styles/parseNativewindStyles' +import { cn } from '../utils/tailwindUtils' /* --- --------------------------------------------------------------------------------- */ @@ -39,7 +40,7 @@ export const Link = < // -- Nativewind -- - const { nativeWindStyles, nativeWindClassName, restStyle } = parseNativeWindStyles(style) + const { nativeWindStyles, nativeWindClassName, restStyle } = parseNativewindStyles(style) const finalStyle = { ...nativeWindStyles, ...restStyle } as React.CSSProperties // -- Render -- @@ -47,7 +48,7 @@ export const Link = < return ( ['style']} onClick={onPress} target={target} diff --git a/packages/@green-stack-core/package.json b/packages/@green-stack-core/package.json index a0b43e1..b0df286 100644 --- a/packages/@green-stack-core/package.json +++ b/packages/@green-stack-core/package.json @@ -7,8 +7,10 @@ "@happy-dom/global-registrator": "^15.0.0", "@testing-library/jest-dom": "^6.4.8", "@testing-library/react": "^16.0.0", + "clsx": "^2.1.1", "crypto-js": "^4.2.0", "dot-prop": "^9.0.0", + "tailwind-merge": "^2.5.2", "zod": "^3.23.7" }, "devDependencies": { diff --git a/packages/@green-stack-core/styles/parseNativeWindStyles.ts b/packages/@green-stack-core/styles/parseNativeWindStyles.ts index afa1855..20751a2 100644 --- a/packages/@green-stack-core/styles/parseNativeWindStyles.ts +++ b/packages/@green-stack-core/styles/parseNativeWindStyles.ts @@ -1,7 +1,7 @@ -/** --- parseNativeWindStyles() ---------------------------------------------------------------- */ +/** --- parseNativewindStyles() ---------------------------------------------------------------- */ /** -i- Util to extract Nativewind's style and/or className from a styled() components style prop */ -export const parseNativeWindStyles = (style: any) => { +export const parseNativewindStyles = (style: any) => { return Object.entries(style || {}).reduce( (acc, [key, value]) => { // If the key is unsupported, ignore it diff --git a/patches/@react-native+assets-registry+0.74.87.patch b/patches/@react-native+assets-registry+0.74.87.patch new file mode 100644 index 0000000..dd6f48f --- /dev/null +++ b/patches/@react-native+assets-registry+0.74.87.patch @@ -0,0 +1,42 @@ +diff --git a/node_modules/@react-native/assets-registry/registry.js b/node_modules/@react-native/assets-registry/registry.js +index 02470da..a91800f 100644 +--- a/node_modules/@react-native/assets-registry/registry.js ++++ b/node_modules/@react-native/assets-registry/registry.js +@@ -4,34 +4,20 @@ + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * +- * @flow strict + * @format + */ + + 'use strict'; + +-export type PackagerAsset = { +- +__packager_asset: boolean, +- +fileSystemLocation: string, +- +httpServerLocation: string, +- +width: ?number, +- +height: ?number, +- +scales: Array, +- +hash: string, +- +name: string, +- +type: string, +- ... +-}; ++const assets = []; + +-const assets: Array = []; +- +-function registerAsset(asset: PackagerAsset): number { ++function registerAsset(asset) { + // `push` returns new array length, so the first asset will + // get id 1 (not 0) to make the value truthy + return assets.push(asset); + } + +-function getAssetByID(assetId: number): PackagerAsset { ++function getAssetByID(assetId) { + return assets[assetId - 1]; + } + From 644905aeb95e4436e63b70a57d95d7f567eb9d88 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Mon, 26 Aug 2024 14:51:18 +0200 Subject: [PATCH 041/126] feat: Add FormScreen and demo route --- .../(generated)/{images => demos/forms}/index.tsx | 2 +- apps/expo/app/(generated)/demos/images/index.tsx | 2 ++ apps/next/app/(generated)/demos/forms/page.tsx | 2 ++ apps/next/app/(generated)/demos/images/page.tsx | 2 ++ apps/next/app/(generated)/images/page.tsx | 2 -- apps/next/app/NextClientRootLayout.tsx | 4 ++-- features/@app-core/constants/testableFeatures.ts | 6 +++++- features/@app-core/routes/demos/forms/index.tsx | 11 +++++++++++ .../@app-core/routes/{ => demos}/images/index.tsx | 2 +- features/@app-core/screens/FormsScreen.tsx | 15 +++++++++++++++ package.json | 2 +- .../navigation/UniversalRouteScreen.tsx | 2 +- .../navigation/UniversalRouteScreen.web.tsx | 2 +- ...tiveWindStyles.ts => parseNativewindStyles.ts} | 0 packages/@green-stack-core/utils/tailwindUtils.ts | 2 +- packages/@registries/routeManifest.generated.ts | 3 ++- 16 files changed, 47 insertions(+), 12 deletions(-) rename apps/expo/app/(generated)/{images => demos/forms}/index.tsx (67%) create mode 100644 apps/expo/app/(generated)/demos/images/index.tsx create mode 100644 apps/next/app/(generated)/demos/forms/page.tsx create mode 100644 apps/next/app/(generated)/demos/images/page.tsx delete mode 100644 apps/next/app/(generated)/images/page.tsx create mode 100644 features/@app-core/routes/demos/forms/index.tsx rename features/@app-core/routes/{ => demos}/images/index.tsx (84%) create mode 100644 features/@app-core/screens/FormsScreen.tsx rename packages/@green-stack-core/styles/{parseNativeWindStyles.ts => parseNativewindStyles.ts} (100%) diff --git a/apps/expo/app/(generated)/images/index.tsx b/apps/expo/app/(generated)/demos/forms/index.tsx similarity index 67% rename from apps/expo/app/(generated)/images/index.tsx rename to apps/expo/app/(generated)/demos/forms/index.tsx index 956d075..388c5d6 100644 --- a/apps/expo/app/(generated)/images/index.tsx +++ b/apps/expo/app/(generated)/demos/forms/index.tsx @@ -1,2 +1,2 @@ // -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten -export { default } from '@app/core/routes/images/index' +export { default } from '@app/core/routes/demos/forms/index' diff --git a/apps/expo/app/(generated)/demos/images/index.tsx b/apps/expo/app/(generated)/demos/images/index.tsx new file mode 100644 index 0000000..66c3b1f --- /dev/null +++ b/apps/expo/app/(generated)/demos/images/index.tsx @@ -0,0 +1,2 @@ +// -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten +export { default } from '@app/core/routes/demos/images/index' diff --git a/apps/next/app/(generated)/demos/forms/page.tsx b/apps/next/app/(generated)/demos/forms/page.tsx new file mode 100644 index 0000000..c486013 --- /dev/null +++ b/apps/next/app/(generated)/demos/forms/page.tsx @@ -0,0 +1,2 @@ +'use client' +export { default } from '@app/core/routes/demos/forms/index' diff --git a/apps/next/app/(generated)/demos/images/page.tsx b/apps/next/app/(generated)/demos/images/page.tsx new file mode 100644 index 0000000..a889028 --- /dev/null +++ b/apps/next/app/(generated)/demos/images/page.tsx @@ -0,0 +1,2 @@ +'use client' +export { default } from '@app/core/routes/demos/images/index' diff --git a/apps/next/app/(generated)/images/page.tsx b/apps/next/app/(generated)/images/page.tsx deleted file mode 100644 index 395d6ac..0000000 --- a/apps/next/app/(generated)/images/page.tsx +++ /dev/null @@ -1,2 +0,0 @@ -'use client' -export { default } from '@app/core/routes/images/index' diff --git a/apps/next/app/NextClientRootLayout.tsx b/apps/next/app/NextClientRootLayout.tsx index 9a49fbb..ccb06d5 100644 --- a/apps/next/app/NextClientRootLayout.tsx +++ b/apps/next/app/NextClientRootLayout.tsx @@ -1,8 +1,8 @@ 'use client' import React from 'react' import UniversalAppProviders from '@app/screens/UniversalAppProviders' -import { Image as NextContextImage } from '@green-stack/components/Image.next' -import { Link as NextContextLink } from '@green-stack/navigation/Link.next' +import { Image as NextContextImage } from '@green-stack/core/components/Image.next' +import { Link as NextContextLink } from '@green-stack/core/navigation/Link.next' import { useRouter as useNextContextRouter } from '@green-stack/navigation/useRouter.next' import { useRouteParams as useNextRouteParams } from '@green-stack/navigation/useRouteParams.next' diff --git a/features/@app-core/constants/testableFeatures.ts b/features/@app-core/constants/testableFeatures.ts index 14f614f..eac16c3 100644 --- a/features/@app-core/constants/testableFeatures.ts +++ b/features/@app-core/constants/testableFeatures.ts @@ -2,6 +2,10 @@ export const testableFeatures = [ { title: 'Test Images?', - link: '/images' + link: '/demos/images' + }, + { + title: 'Test Forms?', + link: '/demos/forms' }, ] diff --git a/features/@app-core/routes/demos/forms/index.tsx b/features/@app-core/routes/demos/forms/index.tsx new file mode 100644 index 0000000..09aa9e9 --- /dev/null +++ b/features/@app-core/routes/demos/forms/index.tsx @@ -0,0 +1,11 @@ +import { UniversalRouteScreen } from '@green-stack/core/navigation/UniversalRouteScreen' +import FormsScreen from '../../../screens/FormsScreen' + +/* --- /images --------------------------------------------------------------------------------- */ + +export default (props: any) => ( + +) diff --git a/features/@app-core/routes/images/index.tsx b/features/@app-core/routes/demos/images/index.tsx similarity index 84% rename from features/@app-core/routes/images/index.tsx rename to features/@app-core/routes/demos/images/index.tsx index d12e5ad..1157d76 100644 --- a/features/@app-core/routes/images/index.tsx +++ b/features/@app-core/routes/demos/images/index.tsx @@ -1,5 +1,5 @@ import { UniversalRouteScreen } from '@green-stack/core/navigation/UniversalRouteScreen' -import ImagesScreen from '../../screens/ImagesScreen' +import ImagesScreen from '../../../screens/ImagesScreen' /* --- /images --------------------------------------------------------------------------------- */ diff --git a/features/@app-core/screens/FormsScreen.tsx b/features/@app-core/screens/FormsScreen.tsx new file mode 100644 index 0000000..4ad9f0b --- /dev/null +++ b/features/@app-core/screens/FormsScreen.tsx @@ -0,0 +1,15 @@ +import React from 'react' +import { View, Text, Image } from '../components/styled' +import BackButton from '../components/BackButton' + +/* --- ------------------------------------------------------------------------- */ + +const FormsScreen = () => ( + + + +) + +/* --- Exports --------------------------------------------------------------------------------- */ + +export default FormsScreen diff --git a/package.json b/package.json index 0648870..d7cc895 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "android": "npx turbo run android", "ios": "npx turbo run ios", "expo:web": "npx turbo run @app/expo#web", - "build": "npx turbo run build", + "build": "node -v && npx turbo run build", "build:schema": "npx turbo run @green-stack/core#build:schema", "check:workspaces": "npx turbo run @green-stack/core#check:workspaces", "check:workspaces:fix": "FIX_MODE=true npx turbo run @green-stack/core#check:workspaces", diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx b/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx index d682eee..4df556a 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.tsx @@ -1,6 +1,6 @@ 'use client' import { useQuery } from '@tanstack/react-query' -import { type UniversalRouteProps, type QueryFn, DEFAULT_QUERY_BRIDGE } from './UniversalRouteScreen.helpers' +import { UniversalRouteProps, QueryFn, DEFAULT_QUERY_BRIDGE } from './UniversalRouteScreen.helpers' import { useRouteParams } from './useRouteParams' /** --- -------------------------------------------------------------------- */ diff --git a/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx b/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx index 4ea2000..eafa1c4 100644 --- a/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx +++ b/packages/@green-stack-core/navigation/UniversalRouteScreen.web.tsx @@ -1,7 +1,7 @@ 'use client' import { use, useState, useEffect } from 'react' import { useQueryClient, useQuery, dehydrate, HydrationBoundary } from '@tanstack/react-query' -import { type UniversalRouteProps, type QueryFn, DEFAULT_QUERY_BRIDGE } from './UniversalRouteScreen.helpers' +import { UniversalRouteProps, QueryFn, DEFAULT_QUERY_BRIDGE } from './UniversalRouteScreen.helpers' import { useRouteParams } from './useRouteParams' import { isExpoWebLocal } from '../../../features/@app-core/appConfig' diff --git a/packages/@green-stack-core/styles/parseNativeWindStyles.ts b/packages/@green-stack-core/styles/parseNativewindStyles.ts similarity index 100% rename from packages/@green-stack-core/styles/parseNativeWindStyles.ts rename to packages/@green-stack-core/styles/parseNativewindStyles.ts diff --git a/packages/@green-stack-core/utils/tailwindUtils.ts b/packages/@green-stack-core/utils/tailwindUtils.ts index 0958ced..b00a851 100644 --- a/packages/@green-stack-core/utils/tailwindUtils.ts +++ b/packages/@green-stack-core/utils/tailwindUtils.ts @@ -1,4 +1,4 @@ -import { type ClassValue, clsx } from 'clsx' +import { ClassValue, clsx } from 'clsx' import { twMerge } from 'tailwind-merge' /** --- cn() ----------------------------------------------------------------------------------- */ diff --git a/packages/@registries/routeManifest.generated.ts b/packages/@registries/routeManifest.generated.ts index f614947..f882be5 100644 --- a/packages/@registries/routeManifest.generated.ts +++ b/packages/@registries/routeManifest.generated.ts @@ -1,6 +1,7 @@ // -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten export const routeManifest = { - ['/images']: 'ImagesScreen', + ['/demos/forms']: 'FormsScreen', + ['/demos/images']: 'ImagesScreen', ['/']: 'HomeScreen', ['/subpages/[slug]']: 'SlugScreen', } as const From cc8b05fe910d6a81d58958885c59fa5d44a8b8d1 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Tue, 27 Aug 2024 19:59:58 +0200 Subject: [PATCH 042/126] feat: Update to nativewind V4 --- apps/expo/app/ExpoRootLayout.tsx | 7 - apps/expo/app/_layout.tsx | 1 + apps/expo/babel.config.js | 7 +- apps/expo/metro.config.js | 3 +- apps/expo/tailwind.config.js | 1 + apps/expo/tsconfig.json | 5 +- apps/next/app/Document.tsx | 15 +- apps/next/app/NextServerRootLayout.tsx | 4 +- apps/next/app/ServerStylesProvider.tsx | 21 +- apps/next/app/layout.tsx | 1 + apps/next/babel.config.js | 1 - apps/next/next.config.base.js | 1 + apps/next/tailwind.config.js | 3 +- apps/next/tsconfig.json | 8 +- features/@app-core/components/styled.tsx | 2 +- features/@app-core/forms/TextInput.styled.tsx | 26 + features/@app-core/nativewind-env.d.ts | 1 + features/@app-core/package.json | 2 +- features/@app-core/screens/FormsScreen.tsx | 4 + features/@app-core/screens/HomeScreen.tsx | 37 +- features/@app-core/tailwind.config.js | 3 +- features/@app-core/tsconfig.json | 6 +- package-lock.json | 701 +++++++++++++----- package.json | 1 + packages/@db-driver/tsconfig.json | 6 +- .../components/Image.expo.tsx | 17 +- .../components/Image.next.tsx | 2 +- .../forms/TextInput.base.tsx | 4 + .../navigation/Link.expo.tsx | 2 + .../scripts/build-graphql-schema.ts | 2 - packages/@green-stack-core/styles/index.tsx | 25 + packages/@green-stack-core/tsconfig.json | 6 +- packages/@registries/tsconfig.json | 6 +- 33 files changed, 673 insertions(+), 258 deletions(-) create mode 100644 features/@app-core/forms/TextInput.styled.tsx create mode 100644 features/@app-core/nativewind-env.d.ts create mode 100644 packages/@green-stack-core/forms/TextInput.base.tsx create mode 100644 packages/@green-stack-core/styles/index.tsx diff --git a/apps/expo/app/ExpoRootLayout.tsx b/apps/expo/app/ExpoRootLayout.tsx index f78d3eb..0d1a604 100644 --- a/apps/expo/app/ExpoRootLayout.tsx +++ b/apps/expo/app/ExpoRootLayout.tsx @@ -5,19 +5,12 @@ import { Image as ExpoContextImage } from '@green-stack/components/Image.expo' import { Link as ExpoContextLink } from '@green-stack/navigation/Link.expo' import { useRouter as useExpoContextRouter } from '@green-stack/navigation/useRouter.expo' import { useRouteParams as useExpoRouteParams } from '@green-stack/navigation/useRouteParams.expo' -import { NativeWindStyleSheet } from 'nativewind' // -i- Expo Router's layout setup is much simpler than Next.js's layout setup // -i- Since Expo doesn't require a custom document setup or server component root layout // -i- Use this file to apply your Expo specific layout setup: // -i- like rendering our Universal Layout and App Providers -/* --- Settings -------------------------------------------------------------------------------- */ - -NativeWindStyleSheet.setOutput({ - default: 'native', -}) - /* --- ------------------------------------------------------------------------ */ export default function ExpoRootLayout() { diff --git a/apps/expo/app/_layout.tsx b/apps/expo/app/_layout.tsx index ae07794..b3b0cf5 100644 --- a/apps/expo/app/_layout.tsx +++ b/apps/expo/app/_layout.tsx @@ -1,4 +1,5 @@ import ExpoRootLayout from './ExpoRootLayout' +import '../../next/global.css' // -i- Expo Router's layout setup is much simpler than Next.js's layout setup. // -i- Since Expo doesn't require a custom document setup or server component root layout. diff --git a/apps/expo/babel.config.js b/apps/expo/babel.config.js index 6fb6b9c..39d2035 100644 --- a/apps/expo/babel.config.js +++ b/apps/expo/babel.config.js @@ -1,8 +1,9 @@ -// babel.config.js module.exports = function (api) { api.cache(true) return { - presets: ['babel-preset-expo'], - plugins: ['nativewind/babel'], + presets: [ + ['babel-preset-expo', { jsxImportSource: 'nativewind' }], + 'nativewind/babel', + ], } } diff --git a/apps/expo/metro.config.js b/apps/expo/metro.config.js index 873b97a..55e75ce 100644 --- a/apps/expo/metro.config.js +++ b/apps/expo/metro.config.js @@ -1,5 +1,6 @@ // -i- Copied from https://docs.expo.dev/guides/monorepos/#modify-the-metro-config const { getDefaultConfig } = require('expo/metro-config') +const { withNativeWind } = require('nativewind/metro') const path = require('path') // Find the project and workspace directories @@ -20,4 +21,4 @@ config.resolver.nodeModulesPaths = [ // config.resolver.disableHierarchicalLookup = true // Export the modified config -module.exports = config +module.exports = withNativeWind(config, { input: '../next/global.css' }) diff --git a/apps/expo/tailwind.config.js b/apps/expo/tailwind.config.js index cff6b7f..615e7d4 100644 --- a/apps/expo/tailwind.config.js +++ b/apps/expo/tailwind.config.js @@ -7,6 +7,7 @@ module.exports = { '../../features/**/*.tsx', '../../packages/**/*.tsx', ], + presets: [require('nativewind/preset')], plugins: [], theme: { ...universalTheme, diff --git a/apps/expo/tsconfig.json b/apps/expo/tsconfig.json index 68bd55f..cf69914 100644 --- a/apps/expo/tsconfig.json +++ b/apps/expo/tsconfig.json @@ -3,7 +3,10 @@ "include": [ "**/*.ts", "**/*.tsx", - "../../features/app-core/graphql-env.d.ts", + "../../apps/next/next-env.d.ts", + "../../packages/@green-stack-core/global.d.ts", + "../../features/@app-core/nativewind-env.d.ts", + "../../features/@app-core/appConfig.ts", "../../features/**/*.tsx", "../../features/**/*.ts", "../../packages/**/*.tsx", diff --git a/apps/next/app/Document.tsx b/apps/next/app/Document.tsx index 37f3dbc..82e8f04 100644 --- a/apps/next/app/Document.tsx +++ b/apps/next/app/Document.tsx @@ -1,4 +1,5 @@ -import React from 'react' +/* @jsxImportSource react */ +import type { ReactNode } from 'react' import UniversalRootLayout from '@app/screens/UniversalRootLayout' import ServerStylesProvider from './ServerStylesProvider' import '../global.css' @@ -9,7 +10,7 @@ import '../global.css' /* --- ------------------------------------------------------------------------------ */ -const Document = (props: { children: React.ReactNode }) => { +const Document = (props: { children: ReactNode }) => { // Props const { children } = props @@ -20,15 +21,15 @@ const Document = (props: { children: React.ReactNode }) => { {/* - Title & Keywords - */} Universal App Router - {/* - Styling - */} - {children} {/* - Other - */} - -

{children}
- + + +
{children}
+
+
) diff --git a/apps/next/app/NextServerRootLayout.tsx b/apps/next/app/NextServerRootLayout.tsx index dd50e6d..bb67310 100644 --- a/apps/next/app/NextServerRootLayout.tsx +++ b/apps/next/app/NextServerRootLayout.tsx @@ -1,3 +1,5 @@ +/* @jsxImportSource react */ +import type { ReactNode } from 'react' import Document from './Document' import NextClientRootLayout from './NextClientRootLayout' @@ -9,7 +11,7 @@ import NextClientRootLayout from './NextClientRootLayout' /* --- Types ----------------------------------------------------------------------------------- */ type NextServerRootLayoutProps = { - children: React.ReactNode + children: ReactNode } /* --- ----------------------------------------------------------------- */ diff --git a/apps/next/app/ServerStylesProvider.tsx b/apps/next/app/ServerStylesProvider.tsx index 450fd2f..49a8e82 100644 --- a/apps/next/app/ServerStylesProvider.tsx +++ b/apps/next/app/ServerStylesProvider.tsx @@ -1,9 +1,8 @@ 'use client' /* eslint-disable @next/next/no-head-element */ import React from 'react' -import { AppRegistry } from 'react-native' +import { StyleSheet } from 'react-native' import { useServerInsertedHTML } from 'next/navigation' -import UniversalRootLayout from '@app/screens/UniversalRootLayout' // -i- This is a regular react client component // -i- However, it is rendered on the server during SSR @@ -18,23 +17,19 @@ const ServerStylesProvider = (props: { children: React.ReactNode }) => { // -- Serverside Styles -- useServerInsertedHTML(() => { - // Get react-native-web styles - const Main = () => {children} - AppRegistry.registerComponent('Main', () => Main) // @ts-ignore - const mainApp = AppRegistry.getApplication('Main') - const reactNativeStyleElement = mainApp.getStyleElement() - // Inject styles + // @ts-ignore + const sheet = StyleSheet.getSheet() return ( - <> - {reactNativeStyleElement} - {/* OPTIONAL: Insert other SSR'd styles here? */} - + + ) +} + +/* --- Exports --------------------------------------------------------------------------------- */ + +export default Style From 71382215887c79b712a14e2688f7208f9acbab84 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Tue, 7 Oct 2025 23:30:26 +0200 Subject: [PATCH 117/126] feat: Add 'getCheckableInputProps' to useFormState() --- .../@green-stack-core/forms/useFormState.ts | 12 +++ .../@green-stack-core/hooks/useLayoutInfo.ts | 78 ++++++++++--------- 2 files changed, 52 insertions(+), 38 deletions(-) diff --git a/packages/@green-stack-core/forms/useFormState.ts b/packages/@green-stack-core/forms/useFormState.ts index 6b4fa2c..1c716e7 100644 --- a/packages/@green-stack-core/forms/useFormState.ts +++ b/packages/@green-stack-core/forms/useFormState.ts @@ -19,6 +19,7 @@ export const useFormState = < syncFromPropsKey?: string, } = {}, ) => { + // Props const { validateOnBlur, validateOnChange, syncFromPropsKey = 'none' } = options const initialValues = (options.initialValues || {}) as T @@ -137,6 +138,15 @@ export const useFormState = < } } + const getCheckableInputProps = (key: KEY) => { + const { onChange, value, ...inputProps } = getInputProps(key) + return { + ...inputProps, + checked: !!value, + onCheckedChange: (checked: boolean) => onChange(checked as T[KEY]), + } + } + // -- Flags -- const isValid = validate(false) @@ -198,6 +208,8 @@ export const useFormState = < getNumberTextInputProps, /** -i- The props to add to a select input to manage its state */ getSelectInputProps, + /** -i- The props to add to a toggle / radio / checkbox input to manage its state, uses `onCheckedChange` instead */ + getCheckableInputProps, /** -i- The key of the current form values, good for use in hook dependencies to trigger recalculations */ valuesKey, } diff --git a/packages/@green-stack-core/hooks/useLayoutInfo.ts b/packages/@green-stack-core/hooks/useLayoutInfo.ts index 8c3d98f..e3a3c03 100644 --- a/packages/@green-stack-core/hooks/useLayoutInfo.ts +++ b/packages/@green-stack-core/hooks/useLayoutInfo.ts @@ -4,8 +4,8 @@ import { LayoutChangeEvent, LayoutRectangle, MeasureOnSuccessCallback } from 're /* --- Types ----------------------------------------------------------------------------------- */ type LayoutInfo = LayoutRectangle & { - pageX?: number - pageY?: number + pageX?: number + pageY?: number } /** --- useLayoutInfo() ------------------------------------------------------------------------ */ @@ -20,42 +20,44 @@ type LayoutInfo = LayoutRectangle & { * const viewHeight = layoutInfo.MyCustomView?.height * ``` */ export const useLayoutInfo = () => { - // State - const [layoutInfo, setLayoutInfo] = useState<{ [componentKey: string]: LayoutInfo }>({}) // prettier-ignore - - // -- Handlers -- - - const measureOnLayout = - (componentKey: string, callback?: (measurements: LayoutInfo) => void) => - ({ nativeEvent }: LayoutChangeEvent) => { - const { layout } = nativeEvent - const { x, y, width, height } = layout - const layoutMeasurements = { - ...layoutInfo[componentKey], // preserve 'pageX' & 'pageY' if available - x, - y, - width, - height, - } - setLayoutInfo({ ...layoutInfo, [componentKey]: layoutMeasurements }) - if (callback) callback(layoutMeasurements) - } - - const measureRef = - (componentKey: string, callback?: (measurements: LayoutInfo) => void) => - (...measurements: Parameters) => { - const [x, y, width, height, pageX, pageY] = measurements - const refMeasurements: LayoutInfo = { x, y, width, height, pageX, pageY } - setLayoutInfo({ - ...layoutInfo, - [componentKey]: refMeasurements, - }) - if (callback) callback(refMeasurements) - } - - // -- Return -- - - return { layoutInfo, measureOnLayout, measureRef } + + // State + const [layoutInfo, setLayoutInfo] = useState<{ [componentKey: string]: LayoutInfo }>({}) // prettier-ignore + + // -- Handlers -- + + const measureOnLayout = + (componentKey: string, callback?: (measurements: LayoutInfo) => void) => + ({ nativeEvent }: LayoutChangeEvent) => { + const { layout } = nativeEvent + const { x, y, width, height } = layout + const layoutMeasurements = { + ...layoutInfo[componentKey], // preserve 'pageX' & 'pageY' if available + x, + y, + width, + height, + } + + setLayoutInfo({ ...layoutInfo, [componentKey]: layoutMeasurements }) + if (callback) callback(layoutMeasurements) + } + + const measureRef = + (componentKey: string, callback?: (measurements: LayoutInfo) => void) => + (...measurements: Parameters) => { + const [x, y, width, height, pageX, pageY] = measurements + const refMeasurements: LayoutInfo = { x, y, width, height, pageX, pageY } + setLayoutInfo({ + ...layoutInfo, + [componentKey]: refMeasurements, + }) + if (callback) callback(refMeasurements) + } + + // -- Return -- + + return { layoutInfo, measureOnLayout, measureRef } } /* --- Export ---------------------------------------------------------------------------------- */ From cb47c3310b69da20e7bb7882591a93fbec640197 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Wed, 8 Oct 2025 15:17:12 +0200 Subject: [PATCH 118/126] feat: Support img url icons in Button.tsx --- features/@app-core/components/Button.tsx | 62 ++++++++++++++++-------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/features/@app-core/components/Button.tsx b/features/@app-core/components/Button.tsx index 8936e0c..697e5d3 100644 --- a/features/@app-core/components/Button.tsx +++ b/features/@app-core/components/Button.tsx @@ -2,7 +2,7 @@ import { useState, useEffect, ReactNode } from 'react' import type { KnownRoutes } from '@app/registries/routeManifest.generated' import type { UniversalLinkProps, RequireParamsIfDynamic } from '@green-stack/navigation/Link.types' import type { PressableProps } from 'react-native' -import { cn, Pressable, View, Text, Link } from './styled' +import { cn, Pressable, View, Text, Image, Link } from './styled' import { z, schema } from '@green-stack/schemas' import { Icon, UniversalIconProps } from '@green-stack/components/Icon' import { useRouter } from '@green-stack/navigation' @@ -31,9 +31,12 @@ export const ButtonProps = schema('ButtonProps', { push: z.boolean().optional(), }) -export type ButtonProps = z.input & { +export type ButtonProps = Omit, 'iconLeft' | 'iconRight'> & { children?: ReactNode, style?: PressableProps['style'] | UniversalLinkProps['style'], + // - Icons - + iconLeft?: z.infer['iconLeft'] | `https://${string}`, + iconRight?: z.infer['iconRight'] | `https://${string}`, // - Pressable Props - onPress?: PressableProps['onPress'] | UniversalLinkProps['onPress'], onPressIn?: PressableProps['onPressIn'], @@ -50,7 +53,8 @@ export type ButtonProps = z.input ------------------------------------------------------------------------------- */ export const Button = (rawProps: ButtonProps) => { - // Props + + // @ts-ignore const props = ButtonProps.applyDefaults(rawProps) const { text, children } = props @@ -69,6 +73,8 @@ export const Button = (rawProps: Butto const hasLabel = !!buttonText || !!children const hasLeftIcon = !!props.iconLeft const hasRightIcon = !!props.iconRight + const isLeftIconImg = props.iconLeft?.startsWith('http') + const isRightIconImg = props.iconRight?.startsWith('http') // -- Styles -- @@ -83,7 +89,7 @@ export const Button = (rawProps: Butto props.type === 'danger' && 'bg-danger web:hover:opacity-90 active:opacity-90', props.type === 'info' && 'bg-info web:hover:opacity-90 active:opacity-90', props.type === 'success' && 'bg-success web:hover:opacity-90 active:opacity-90', - props.size === 'sm' && 'p-2', + props.size === 'sm' && 'py-2 px-3', props.size === 'md' && 'p-3', props.size === 'lg' && 'p-4', props.type === 'link' && 'p-0 justify-start', @@ -149,6 +155,8 @@ export const Button = (rawProps: Butto if (props.disabled) return // Call event handler? props.onPress?.(evt) + // If link behaviour is already handled by the Link component, skip it here + if (asLink) return // Open in new tab? const isWebBlankLink = isWeb && props.href && props.target === '_blank' if (isWebBlankLink) return window.open(props.href, '_blank') @@ -168,12 +176,20 @@ export const Button = (rawProps: Butto <> {hasLeftIcon && ( - + {isLeftIconImg ? ( + + ) : ( + + )} )} {hasLabel && ( @@ -189,12 +205,20 @@ export const Button = (rawProps: Butto )} {hasRightIcon && ( - + {isRightIconImg ? ( + + ) : ( + + )} )} @@ -213,9 +237,9 @@ export const Button = (rawProps: Butto target={props.target} replace={props.replace} push={props.push} - onPress={onButtonPress as UniversalLinkProps['onPress']} - disabled={props.disabled} - hitSlop={props.hitSlop} + onPress={props.onPress ? (onButtonPress as UniversalLinkProps['onPress']) : undefined} + // disabled={props.disabled} + // hitSlop={props.hitSlop} asChild > From 2635f4eab7d5b4bf05abaf05a86a76fa2ecdcb70 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Wed, 8 Oct 2025 15:20:12 +0200 Subject: [PATCH 119/126] feat: Allow jsx children as label in 'Checkbox' component --- features/@app-core/forms/Checkbox.styled.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/features/@app-core/forms/Checkbox.styled.tsx b/features/@app-core/forms/Checkbox.styled.tsx index 3e709fd..87ce15e 100644 --- a/features/@app-core/forms/Checkbox.styled.tsx +++ b/features/@app-core/forms/Checkbox.styled.tsx @@ -19,7 +19,9 @@ export const CheckboxProps = schema('CheckboxProps', { hitSlop: z.number().default(6), }) -export type CheckboxProps = PropsOf +export type CheckboxProps = PropsOf & { + children?: React.ReactNode +} /* --- ----------------------------------------------------------------------------- */ @@ -30,7 +32,8 @@ export const Checkbox = forwardRef< // Props const props = CheckboxProps.applyDefaults(rawProps) - const { checked, disabled, label, hasError, onCheckedChange } = props + const { checked, disabled, hasError, onCheckedChange } = props + const label = props.label || props.children // Vars const nativeID = props.id || props.nativeID From a6aaf4ac06e5138ffeef7fb93d4166ea1e44a06b Mon Sep 17 00:00:00 2001 From: codinsonn Date: Wed, 8 Oct 2025 15:25:02 +0200 Subject: [PATCH 120/126] chore: Add selectTriggerRef prop to 'Select' component --- features/@app-core/forms/Select.styled.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/features/@app-core/forms/Select.styled.tsx b/features/@app-core/forms/Select.styled.tsx index 09a14be..7971669 100644 --- a/features/@app-core/forms/Select.styled.tsx +++ b/features/@app-core/forms/Select.styled.tsx @@ -191,7 +191,6 @@ export const SelectContent = forwardRef< )} style={{ maxWidth: Math.min(400, Dimensions.get('window').width - 40), - backgroundColor: getThemeColor('--popover'), }} asChild > @@ -390,7 +389,7 @@ export const SelectProps = schema('SelectProps', { className: z.string().optional(), triggerClassName: z.string().optional(), valueClassName: z.string().optional(), - contentClassName: z.string().default('w-full bg-white'), + contentClassName: z.string().default('w-full'), }) export type SelectProps = Omit< @@ -399,6 +398,7 @@ export type SelectProps = Omit< > & { value: T, children?: ReactNode, + selectTriggerRef?: LegacyRef>, onChange: (value: T) => void, } @@ -461,6 +461,7 @@ export const createSelectComponent = () => Object.ass > Date: Wed, 8 Oct 2025 15:26:13 +0200 Subject: [PATCH 121/126] feat: Revamp demo screens --- README.md | 2 +- apps/next/app/Document.tsx | 73 +++++----- apps/next/app/NextClientRootLayout.tsx | 1 + features/@app-core/components/BackButton.tsx | 11 +- features/@app-core/components/styled.tsx | 10 +- .../@app-core/constants/testableFeatures.ts | 8 +- features/@app-core/icons/CopyIcon.tsx | 42 ++++++ features/@app-core/icons/index.ts | 1 + .../middleware/createRequestContext.ts | 1 + features/@app-core/routes/index.tsx | 4 +- .../{HomeScreen.tsx => DemoScreen.tsx} | 42 +++--- features/@app-core/screens/FormsScreen.tsx | 116 +++++++++++----- features/@app-core/screens/ImagesScreen.tsx | 13 +- features/@app-core/screens/SlugScreen.tsx | 116 +++++++++++++--- features/@app-core/tsconfig.json | 131 +++++++++--------- .../@db-driver/schemas/MockEntity.schema.ts | 7 +- .../schemas/MockEntity.schema.web.ts | 27 ++++ .../@registries/routeManifest.generated.ts | 2 +- 18 files changed, 415 insertions(+), 192 deletions(-) create mode 100644 features/@app-core/icons/CopyIcon.tsx rename features/@app-core/screens/{HomeScreen.tsx => DemoScreen.tsx} (91%) create mode 100644 packages/@db-driver/schemas/MockEntity.schema.web.ts diff --git a/README.md b/README.md index 1464162..2801925 100644 --- a/README.md +++ b/README.md @@ -197,7 +197,7 @@ Now, I'm glad to share my learnings to help others build their own universal app ## 🛠 Getting Started -Use **`git clone`**, or the GitHub UI to ❇️ **[generate a new project](https://github.com/new?template_name=green-stack-starter-demo&template_owner=FullProduct-dev)** from our **[template repo](https://github.com/FullProduct-dev/green-stack-starter-demo)**, then run: +Use **`git clone`**, or the GitHub UI to ❇️ **[generate a new project](https://github.com/new?template_name=green-stack-starter-demo&template_owner=FullProduct-dev&visibility=private&use_v2_form=true&description=🚧%20Make%20sure%20to%20run%20`npx%20@fullproduct/universal-app%20sync`%20to%20attach%20the%20starterkit%27s%20git%20history%20💡%20Run%20`npx%20@fullproduct/universal-app%20install%20plugins`%20afterwards%20to%20expand%20your%20setup)** from our **[template repo](https://github.com/FullProduct-dev/green-stack-starter-demo)**, then run: ```bash npm install diff --git a/apps/next/app/Document.tsx b/apps/next/app/Document.tsx index 6d20cae..33835fb 100644 --- a/apps/next/app/Document.tsx +++ b/apps/next/app/Document.tsx @@ -11,42 +11,43 @@ import '../global.css' /* --- ------------------------------------------------------------------------------ */ const Document = (props: { children: ReactNode }) => { - // Props - const { children } = props - - // -- Render -- - - return ( - - - {/* - Title & Keywords - */} - Universal App Starter - - - - - {/* - Image Previews - */} - - - - - - - - - - {/* - Other - */} - - - - - -
{children}
-
-
- - - ) + + // Props + const { children } = props + + // -- Render -- + + return ( + + + {/* - Title & Keywords - */} + Universal App Starter + + + + + {/* - Image Previews - */} + + + + + + + + + + {/* - Other - */} + + + + + +
{children}
+
+
+ + + ) } /* --- Exports --------------------------------------------------------------------------------- */ diff --git a/apps/next/app/NextClientRootLayout.tsx b/apps/next/app/NextClientRootLayout.tsx index d31ef14..d231d18 100644 --- a/apps/next/app/NextClientRootLayout.tsx +++ b/apps/next/app/NextClientRootLayout.tsx @@ -23,6 +23,7 @@ type NextClientRootLayoutProps = { /* --- ---------------------------------------------------------------- */ const NextClientRootLayout = ({ children, requestContext }: NextClientRootLayoutProps) => { + // Navigation const nextContextRouter = useNextContextRouter() diff --git a/features/@app-core/components/BackButton.tsx b/features/@app-core/components/BackButton.tsx index 4a7c03a..ff9efcc 100644 --- a/features/@app-core/components/BackButton.tsx +++ b/features/@app-core/components/BackButton.tsx @@ -35,15 +35,12 @@ const BackButton = (props: BackButtonProps) => { // -- Prerender -- const innerBackButton = ( - + {!!backText && ( <> - + {`Back`} @@ -55,14 +52,14 @@ const BackButton = (props: BackButtonProps) => { return showBackButton ? ( {innerBackButton} ) : ( {innerBackButton} diff --git a/features/@app-core/components/styled.tsx b/features/@app-core/components/styled.tsx index b2a1eca..17a2672 100644 --- a/features/@app-core/components/styled.tsx +++ b/features/@app-core/components/styled.tsx @@ -53,13 +53,19 @@ export const P = styled(RNText, 'text-primary text-base') /* --- Fix for Next Link ----------------------------------------------------------------------- */ export const Link = (props: UniversalLinkProps) => { - const StyledLink = styled(UniversalLink, 'text-link underline') // @ts-ignore + const StyledLink = styled(UniversalLink, '') // @ts-ignore return } export const LinkText = styled(RNText, 'text-link underline') -export const TextLink = (props: Omit, 'className'> & { className?: string }) => { +/* --- Text Links ------------------------------------------------------------------------------ */ + +export type TextLinkProps = Omit>, 'className'> & { + className?: string +} + +export const TextLink = (props: TextLinkProps) => { const { className, style, children, ...universalLinkProps } = props return ( diff --git a/features/@app-core/constants/testableFeatures.ts b/features/@app-core/constants/testableFeatures.ts index eac16c3..3677983 100644 --- a/features/@app-core/constants/testableFeatures.ts +++ b/features/@app-core/constants/testableFeatures.ts @@ -2,10 +2,14 @@ export const testableFeatures = [ { title: 'Test Images?', - link: '/demos/images' + description: 'Universal Images, platform optimized', + link: '/demos/images', + icon: '📷', }, { title: 'Test Forms?', - link: '/demos/forms' + description: 'Zod based Form Management', + link: '/demos/forms', + icon: '📝', }, ] diff --git a/features/@app-core/icons/CopyIcon.tsx b/features/@app-core/icons/CopyIcon.tsx new file mode 100644 index 0000000..016ede9 --- /dev/null +++ b/features/@app-core/icons/CopyIcon.tsx @@ -0,0 +1,42 @@ +import { Svg, Path, z, iconProps, IconProps, getThemeColor } from '@green-stack/svg' + +/* --- Types ----------------------------------------------------------------------------------- */ + +export const CopyIconProps = iconProps('CopyIcon', { + color: z.string().default(getThemeColor('--primary', 'light')), +}) + +export type CopyIconProps = IconProps + +/* --- -------------------------------------------------------------------------- */ + +export const CopyIcon = (rawProps: CopyIconProps) => { + // Props + const props = CopyIconProps.applyDefaults(rawProps) + const color = CopyIconProps.getIconColor(props, true) + // Render + return ( + + + + + ) +} diff --git a/features/@app-core/icons/index.ts b/features/@app-core/icons/index.ts index c93820a..262fc45 100644 --- a/features/@app-core/icons/index.ts +++ b/features/@app-core/icons/index.ts @@ -6,3 +6,4 @@ export { ChevronDownFilled } from './ChevronDownFilled' export { ChevronUpFilled } from './ChevronUpFilled' export { RemoveFilled } from './RemoveFilled' export { UndoFilled } from './UndoFilled' +export { CopyIcon } from './CopyIcon' diff --git a/features/@app-core/middleware/createRequestContext.ts b/features/@app-core/middleware/createRequestContext.ts index 5ff78af..ffa1f1c 100644 --- a/features/@app-core/middleware/createRequestContext.ts +++ b/features/@app-core/middleware/createRequestContext.ts @@ -18,6 +18,7 @@ export type RequestContext = { info?: unknown, // -i- Anything else you might want to attach as context through middleware, e.g. userId?: string, + orgId?: string, sessionId?: string, authToken?: string, // ... diff --git a/features/@app-core/routes/index.tsx b/features/@app-core/routes/index.tsx index d8a3eaf..4185d16 100644 --- a/features/@app-core/routes/index.tsx +++ b/features/@app-core/routes/index.tsx @@ -1,12 +1,12 @@ import { UniversalRouteScreen } from '@green-stack/core/navigation/UniversalRouteScreen' -import HomeScreen, { queryBridge } from '../screens/HomeScreen' +import DemoScreen, { queryBridge } from '../screens/DemoScreen' /* --- / --------------------------------------------------------------------------------------- */ export default (props: any) => ( ) diff --git a/features/@app-core/screens/HomeScreen.tsx b/features/@app-core/screens/DemoScreen.tsx similarity index 91% rename from features/@app-core/screens/HomeScreen.tsx rename to features/@app-core/screens/DemoScreen.tsx index fe4c2ed..a6ed2d2 100644 --- a/features/@app-core/screens/HomeScreen.tsx +++ b/features/@app-core/screens/DemoScreen.tsx @@ -3,7 +3,7 @@ import { Dimensions } from 'react-native' import { StatusBar } from 'expo-status-bar' import { HydratedRouteProps, createQueryBridge } from '@green-stack/navigation' import { Pressable, ScrollView, View, Link, Image, P, H1, H3, Text, H2, cn } from '../components/styled' -import { healthCheckFetcher } from '../resolvers/healthCheck.query' +import { healthCheckFetcher } from '@app/core/resolvers/healthCheck.query' import { Icon } from '@green-stack/components/Icon' import { useSafeAreaInsets } from 'react-native-safe-area-context' import { isMobile } from '@app/config' @@ -19,22 +19,17 @@ import { isMobile } from '@app/config' export const queryBridge = createQueryBridge({ routeDataFetcher: healthCheckFetcher, routeParamsToQueryKey: (routeParams) => ['healthCheck', routeParams.echo], - routeParamsToQueryInput: (routeParams) => ({ - healthCheckArgs: { - echo: routeParams.echo, - verbose: routeParams.verbose, - }, - }), + routeParamsToQueryInput: (routeParams) => ({ healthCheckArgs: { echo: routeParams.echo, verbose: true } }), fetcherDataToProps: (fetcherData) => ({ serverHealth: fetcherData?.healthCheck }), }) /* --- Types ----------------------------------------------------------------------------------- */ -type HomeScreenProps = HydratedRouteProps +type DemoScreenProps = HydratedRouteProps -/* --- --------------------------------------------------------------------------- */ +/* --- --------------------------------------------------------------------------- */ -const HomeScreen = (props: HomeScreenProps) => { +const DemoScreen = (props: DemoScreenProps) => { // Props const { serverHealth } = props @@ -88,7 +83,7 @@ const HomeScreen = (props: HomeScreenProps) => { FullProduct.dev Starterkit Logo @@ -96,7 +91,7 @@ const HomeScreen = (props: HomeScreenProps) => { FullProduct.dev Starterkit Logo @@ -148,7 +143,7 @@ const HomeScreen = (props: HomeScreenProps) => { @@ -170,7 +165,7 @@ const HomeScreen = (props: HomeScreenProps) => { /> )} summary="Test universal navigation for Web & Mobile, and share up to 90% UI code" - href="/subpages/Universal%20Nav" + href="/subpages/Universal%20Navigation" /> { Start from @app/core {` → `} - HomeScreen.tsx + DemoScreen.tsx

@@ -271,9 +266,10 @@ const GettingStarted = () => { const InfoSection = (props: { title: string, titleIcon?: any, - summary: string, + summary?: string, href: string, isBlank?: boolean, + children?: React.ReactNode }) => ( -

- {props.summary} -

+ {props.summary ? ( +

+ {props.summary} +

+ ) : ( +

+ {props.children || 'No summary provided.'} +

+ )}
) /* --- Exports --------------------------------------------------------------------------------- */ -export default HomeScreen +export default DemoScreen diff --git a/features/@app-core/screens/FormsScreen.tsx b/features/@app-core/screens/FormsScreen.tsx index bdafd7d..44b4550 100644 --- a/features/@app-core/screens/FormsScreen.tsx +++ b/features/@app-core/screens/FormsScreen.tsx @@ -1,7 +1,7 @@ import { useState, useEffect, useRef } from 'react' import { StatusBar } from 'expo-status-bar' import { useColorScheme } from 'nativewind' -import { View, Text, H1, H2, H3, Link, ScrollView, KeyboardAvoidingView, getThemeColor } from '../components/styled' +import { View, Text, H1, H2, H3, Link, ScrollView, KeyboardAvoidingView, cn, getThemeColor } from '../components/styled' import BackButton from '../components/BackButton' import { TextInput } from '../forms/TextInput.styled' import { NumberStepper } from '../forms/NumberStepper.styled' @@ -17,7 +17,7 @@ import { useScrollToFocusedInput } from '@green-stack/hooks/useScrollToFocusedIn import { TextArea } from '../forms/TextArea.styled' import { Button } from '../components/Button' import { removeSetItem } from '@green-stack/utils/arrayUtils' -import { isWeb } from '../appConfig' +import { isWeb, isDocs } from '@app/config' import { calculateEfficiency } from '../utils/calculateEfficiency' import { EfficiencyResults } from '../components/EfficiencyResults' import { FormScreenProps, IDENTITIES, FEATURES, PLUGINS } from './FormsScreen.types' @@ -39,6 +39,7 @@ const CustomRadioGroup = RadioGroup.create() /* --- ------------------------------------------------------------------------- */ export const FormsScreen = (props: FormScreenProps) => { + // Nav const { setParams } = useRouter() const params = useRouteParams(props) @@ -130,36 +131,61 @@ export const FormsScreen = (props: FormScreenProps) => { return ( + + {/* Main Content */} + - + + {/* Start of Form */} + +

scheme.setColorScheme(scheme.colorScheme !== 'dark' ? 'dark' : 'light')}> - {`Universal Forms Demo`} + ROI Calculator

+ + +

+ A handy demo for 'Universal Forms' +

+ + + + + {/* -- TextInput -- */} + + Email + + - - Your email - - {/* -- Stepper -- */} + + Age + + { {...inputScrollUtils.registerInput(ageInputRef)} /> - - Your age - - {/* -- Checkbox -- */} @@ -183,6 +205,8 @@ export const FormsScreen = (props: FormScreenProps) => { onCheckedChange={setValidateOnChange} /> + + {/* -- Radiogroup -- */} @@ -341,7 +365,7 @@ export const FormsScreen = (props: FormScreenProps) => { @@ -350,42 +374,64 @@ export const FormsScreen = (props: FormScreenProps) => { - - {JSON.stringify({ - ...formState, - metadata: { - currentSetupHoursPerProject, - setupHoursPerProject, - learningGapHours, - annualHoursSaved, - annualAvgEfficiencyBoost, - isWeb, - deliveryEfficiency, - finalEfficiencyRate, - results, - } - }, null, 2)} - + + + {JSON.stringify({ + ...formState, + metadata: { + currentSetupHoursPerProject, + setupHoursPerProject, + learningGapHours, + annualHoursSaved, + annualAvgEfficiencyBoost, + isWeb, + deliveryEfficiency, + finalEfficiencyRate, + results, + } + }, null, 2)} + + )} + + {inputScrollUtils.keyboardPaddedView}
- + + {!isDocs && ( + + )} + + {!isDocs && ( + + + + {`📚`} + + + + )} +
) } /* --- Documentation --------------------------------------------------------------------------- */ -export const getDocumentationProps = FormScreenProps.documentationProps('FormScreen') +// export const getDocumentationProps = FormScreenProps.documentationProps('FormScreen') /* --- Exports --------------------------------------------------------------------------------- */ diff --git a/features/@app-core/screens/ImagesScreen.tsx b/features/@app-core/screens/ImagesScreen.tsx index be79af1..c0f4588 100644 --- a/features/@app-core/screens/ImagesScreen.tsx +++ b/features/@app-core/screens/ImagesScreen.tsx @@ -1,6 +1,6 @@ import React from 'react' import { StatusBar } from 'expo-status-bar' -import { View, Text, Image, ScrollView } from '../components/styled' +import { View, Text, Image, Link, ScrollView } from '../components/styled' import BackButton from '../components/BackButton' /* --- Images ---------------------------------------------------------------------------------- */ @@ -63,6 +63,17 @@ const ImagesScreen = () => (
+ + + + {`📚`} + + + ) diff --git a/features/@app-core/screens/SlugScreen.tsx b/features/@app-core/screens/SlugScreen.tsx index 5d8165e..6d89bd2 100644 --- a/features/@app-core/screens/SlugScreen.tsx +++ b/features/@app-core/screens/SlugScreen.tsx @@ -1,15 +1,17 @@ import React, { Fragment } from 'react' import { StatusBar } from 'expo-status-bar' import { useRouteParams } from '@green-stack/navigation/useRouteParams' -import { View, Text, H1, P, Link, ScrollView } from '../components/styled' +import { View, Text, H1, H3, P, Link, ScrollView, H2, cn } from '../components/styled' import { useRouter } from '@green-stack/navigation/useRouter' import type { UniversalRouteScreenProps } from '@green-stack/navigation/useRouteParams.types' import BackButton from '../components/BackButton' import { testableFeatures } from '../constants/testableFeatures' +import { isMobile } from '../appConfig' /* --- --------------------------------------------------------------------------- */ const SlugScreen = (props: UniversalRouteScreenProps) => { + // Routing const { slug, count = 0 } = useRouteParams(props) const { push, navigate, replace, setParams } = useRouter() @@ -23,35 +25,79 @@ const SlugScreen = (props: UniversalRouteScreenProps) => { className="flex flex-1 min-h-screen bg-slate-800" contentContainerClassName="min-h-screen" > - +

- slug - {decodeURIComponent(slug as string)} + Universal Nav 🚀 📁

+ +

+ → /subpages/{decodeURIComponent(slug as string)} +

+ +

+ Universal URL routing in FullProduct.dev is built on the Expo & Next.js app routers. File based routes are shared between Web and Native. Enabling things like automatic deeplinks. +

-

- Universal URL routing built on Expo & Next.js routers, shared between Web and Native. e.g. Tap to change the count {`(${count})`} param: + + + /subpages/ + [slug] + {!!count && ( + <> + ?count= + {count} + + )} + + + + {count} + + + + +

+ Whichever device / platforms you're on, you can even save state in the URL, like this counter above us:

- - setParams({ count: `${+count + 1}` })}> - {`router.setParams()`} + + setParams({ count: `${+count + 1}` })}> + router.setParams() + {` - add to count query param`} {/* Nav & Routing Tests */} - push('/subpages/push')}> - {`router.push()`} + navigate('/subpages/navigate')}> + router.navigate() + {` - Nav to href url`} - navigate('/subpages/navigate')}> - {`router.navigate()`} + push('/subpages/push')}> + router.push() + {` - Push new stack on mobile`} - replace('/subpages/replace')}> - {`router.replace()`} + replace('/subpages/replace')}> + router.replace() + {` - Nav w/o updating history`} + +

+ Notice the count is saved per page when navigating between urls. On mobile, screens are pushed onto a stack instead of just URL history. + {isMobile && ( +

+ {` (Try swiping back)`} +

+ )} +

+ {/* Other Tests */} @@ -60,9 +106,32 @@ const SlugScreen = (props: UniversalRouteScreenProps) => { - {feature.title} + + + {feature.icon} + + + {feature.icon} + + + {/* */} + +

+ {feature.title} +

+ + + {feature.description} + + {index < (testableFeatures.length - 1) && ( @@ -74,12 +143,12 @@ const SlugScreen = (props: UniversalRouteScreenProps) => { -

+

Upgrade your Universal App Setup?

FullProduct.dev @@ -88,6 +157,17 @@ const SlugScreen = (props: UniversalRouteScreenProps) => {
+ + + + {`📚`} + + + ) } diff --git a/features/@app-core/tsconfig.json b/features/@app-core/tsconfig.json index 16c6085..6801fa4 100644 --- a/features/@app-core/tsconfig.json +++ b/features/@app-core/tsconfig.json @@ -1,69 +1,70 @@ { - "compilerOptions": { - "lib": [ - "dom", - "dom.iterable", - "esnext" + "compilerOptions": { + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "incremental": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "allowImportingTsExtensions": true, + "jsx": "preserve", + "plugins": [ + { + "name": "@0no-co/graphqlsp", + "schema": "./graphql/schema.graphql", + "tadaOutputLocation": "./graphql-env.d.ts" + } + ], + "types": ["node", "glob"], + "paths": { + "@app/kit": ["../../packages/@green-stack-core/*"], + "@app/config": ["../../features/@app-core/appConfig.ts"], + "@app/schemas/*": ["../../features/@app-core/schemas/*"], + "@app/utils/*": ["../../features/@app-core/utils/*"], + "@app/hooks/*": ["../../features/@app-core/hooks/*"], + "@app/primitives": ["../../features/@app-core/components/styled.tsx"], + "@app/components/*": ["../../features/@app-core/components/*"], + "@app/forms/*": ["../../features/@app-core/forms/*"], + "@app/screens/*": ["../../features/@app-core/screens/*"], + "@app/assets/*": ["../../features/@app-core/assets/*"], + "@app/resolvers/*": ["../../features/@app-core/resolvers/*"], + "@app/middleware/*": ["../../features/@app-core/middleware/*"], + "@green-stack/schemas": ["../../packages/@green-stack-core/schemas"], + "@green-stack/schemas/*": ["../../packages/@green-stack-core/schemas/*"], + "@green-stack/navigation": ["../../packages/@green-stack-core/navigation/index.ts"], + "@green-stack/navigation/*": ["../../packages/@green-stack-core/navigation/*"], + "@green-stack/utils/*": ["../../packages/@green-stack-core/utils/*"], + "@green-stack/hooks/*": ["../../packages/@green-stack-core/hooks/*"], + "@green-stack/components/*": ["../../packages/@green-stack-core/components/*"], + "@green-stack/styles": ["../../packages/@green-stack-core/styles/index.tsx"], + "@green-stack/styles/*": ["../../packages/@green-stack-core/styles/*"], + "@green-stack/forms/*": ["../../packages/@green-stack-core/forms/*"], + "@green-stack/context/*": ["../../packages/@green-stack-core/context/*"], + "@green-stack/scripts/*": ["../../packages/@green-stack-core/scripts/*"], + "@green-stack/svg": ["../../packages/@green-stack-core/svg/svg.primitives.tsx"], + "@db/models": ["../../packages/@db-driver/models.ts"], + "@db/mock": ["../../packages/@db-driver/drivers/mock.db.ts"] + } + }, + "include": [ + "../../apps/next/next-env.d.ts", + "../../packages/@green-stack-core/global.d.ts", + "../../features/@app-core/nativewind-env.d.ts", + "../../features/@app-core/appConfig.ts", + "**/*.ts", + "**/*.tsx" ], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "incremental": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "allowImportingTsExtensions": true, - "jsx": "preserve", - "plugins": [ - { - "name": "@0no-co/graphqlsp", - "schema": "./graphql/schema.graphql", - "tadaOutputLocation": "./graphql-env.d.ts" - } + "exclude": [ + "node_modules" ], - "types": ["node", "glob"], - "paths": { - "@app/config": ["../../features/@app-core/appConfig.ts"], - "@app/schemas/*": ["../../features/@app-core/schemas/*"], - "@app/utils/*": ["../../features/@app-core/utils/*"], - "@app/hooks/*": ["../../features/@app-core/hooks/*"], - "@app/primitives": ["../../features/@app-core/components/styled.tsx"], - "@app/components/*": ["../../features/@app-core/components/*"], - "@app/forms/*": ["../../features/@app-core/forms/*"], - "@app/screens/*": ["../../features/@app-core/screens/*"], - "@app/assets/*": ["../../features/@app-core/assets/*"], - "@app/resolvers/*": ["../../features/@app-core/resolvers/*"], - "@app/middleware/*": ["../../features/@app-core/middleware/*"], - "@green-stack/schemas": ["../../packages/@green-stack-core/schemas"], - "@green-stack/schemas/*": ["../../packages/@green-stack-core/schemas/*"], - "@green-stack/navigation": ["../../packages/@green-stack-core/navigation/index.ts"], - "@green-stack/navigation/*": ["../../packages/@green-stack-core/navigation/*"], - "@green-stack/utils/*": ["../../packages/@green-stack-core/utils/*"], - "@green-stack/hooks/*": ["../../packages/@green-stack-core/hooks/*"], - "@green-stack/components/*": ["../../packages/@green-stack-core/components/*"], - "@green-stack/styles": ["../../packages/@green-stack-core/styles/index.tsx"], - "@green-stack/styles/*": ["../../packages/@green-stack-core/styles/*"], - "@green-stack/forms/*": ["../../packages/@green-stack-core/forms/*"], - "@green-stack/context/*": ["../../packages/@green-stack-core/context/*"], - "@green-stack/scripts/*": ["../../packages/@green-stack-core/scripts/*"], - "@green-stack/svg": ["../../packages/@green-stack-core/svg/svg.primitives.tsx"], - "@db/models": ["../../packages/@db-driver/models.ts"], - "@db/mock": ["../../packages/@db-driver/drivers/mock.db.ts"] - } - }, - "include": [ - "../../apps/next/next-env.d.ts", - "../../packages/@green-stack-core/global.d.ts", - "../../features/@app-core/nativewind-env.d.ts", - "../../features/@app-core/appConfig.ts", - "**/*.ts", - "**/*.tsx" - ], - "exclude": [ - "node_modules" - ], - "extends": "expo/tsconfig.base" + "extends": "expo/tsconfig.base" } diff --git a/packages/@db-driver/schemas/MockEntity.schema.ts b/packages/@db-driver/schemas/MockEntity.schema.ts index 981b3f9..a51d514 100644 --- a/packages/@db-driver/schemas/MockEntity.schema.ts +++ b/packages/@db-driver/schemas/MockEntity.schema.ts @@ -1,14 +1,17 @@ // @ts-ignore -import { v4 as uuidV4 } from 'uuid' import { z, schema } from '@green-stack/schemas' +/* --- Why? ------------------------------------------------------------------------------------ */ + +// -i- This is an Expo decoy copy until we figure out why `uuid` doesn't work in Expo +// -i- The real one is in `MockEntity.schema.web.ts` in the same folder + /* --- Schema ---------------------------------------------------------------------------------- */ export const MockDBEntity = schema('MockDBEntity', { id: z .string() .uuid() - .default(() => uuidV4()) .describe('Provided or auto-generated UUID (V4)'), createdAt: z .date() diff --git a/packages/@db-driver/schemas/MockEntity.schema.web.ts b/packages/@db-driver/schemas/MockEntity.schema.web.ts new file mode 100644 index 0000000..981b3f9 --- /dev/null +++ b/packages/@db-driver/schemas/MockEntity.schema.web.ts @@ -0,0 +1,27 @@ +// @ts-ignore +import { v4 as uuidV4 } from 'uuid' +import { z, schema } from '@green-stack/schemas' + +/* --- Schema ---------------------------------------------------------------------------------- */ + +export const MockDBEntity = schema('MockDBEntity', { + id: z + .string() + .uuid() + .default(() => uuidV4()) + .describe('Provided or auto-generated UUID (V4)'), + createdAt: z + .date() + .default(() => new Date()) + .describe('Creation date'), + modifiedAt: z + .date() + .default(() => new Date()) + .describe('Last modified date'), +}) + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type MockDBEntity< + Z extends z.ZodObject = typeof MockDBEntity +> = Prettify> diff --git a/packages/@registries/routeManifest.generated.ts b/packages/@registries/routeManifest.generated.ts index 119e1ed..a3feaf8 100644 --- a/packages/@registries/routeManifest.generated.ts +++ b/packages/@registries/routeManifest.generated.ts @@ -1,7 +1,7 @@ // -i- Automatically generated by 'npx turbo @green-stack/core#link:routes', do not modify manually, it will get overwritten export const routeManifest = { - ['/']: 'HomeScreen', + ['/']: 'DemoScreen', ['/subpages/[slug]']: 'SlugScreen', ['/demos/images']: 'ImagesScreen', ['/demos/forms']: 'FormsScreen', From 7b719c03008ed3d68b66835a833cdc9d166633d6 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sun, 2 Nov 2025 14:43:43 +0100 Subject: [PATCH 122/126] feat: Migrate mock DB driver to driver signature pattern --- features/@app-core/tsconfig.json | 1 - packages/@db-driver/driver.signature.ts | 21 ++++++++++++++++++ packages/@db-driver/drivers/mock.db.ts | 5 ++--- packages/@db-driver/index.ts | 10 ++++++--- .../utils/createSchemaModel.mock.ts | 2 ++ .../@db-driver/utils/validateDbDriver.db.ts | 8 +++++++ .../@db-driver/utils/validateDriver.db.ts | 22 ------------------- .../utils/validateDriverModel.db.ts | 6 ++--- .../@green-stack-core/schemas/index.docs.mdx | 4 ---- 9 files changed, 43 insertions(+), 36 deletions(-) create mode 100644 packages/@db-driver/driver.signature.ts create mode 100644 packages/@db-driver/utils/validateDbDriver.db.ts delete mode 100644 packages/@db-driver/utils/validateDriver.db.ts diff --git a/features/@app-core/tsconfig.json b/features/@app-core/tsconfig.json index 6801fa4..bc832f5 100644 --- a/features/@app-core/tsconfig.json +++ b/features/@app-core/tsconfig.json @@ -26,7 +26,6 @@ ], "types": ["node", "glob"], "paths": { - "@app/kit": ["../../packages/@green-stack-core/*"], "@app/config": ["../../features/@app-core/appConfig.ts"], "@app/schemas/*": ["../../features/@app-core/schemas/*"], "@app/utils/*": ["../../features/@app-core/utils/*"], diff --git a/packages/@db-driver/driver.signature.ts b/packages/@db-driver/driver.signature.ts new file mode 100644 index 0000000..4a49d26 --- /dev/null +++ b/packages/@db-driver/driver.signature.ts @@ -0,0 +1,21 @@ +import { z } from '@green-stack/schemas' + +/* --- DB Driver Shape ------------------------------------------------------------------------- */ + +// -i- Validation that a given module is a DB Driver, by checking for the presence of specific properties +export const DbDriverShape = z.object({ + + // -i- The ability to create a database model / collection from a Zod schema + createSchemaModel: z.function().args( + z.instanceof(z.ZodObject), + z.string().optional(), + ), + + // -i- The base DB entity class that all models can extend from + DBEntity: z.instanceof(z.ZodObject), + +}) + +/* --- Types ----------------------------------------------------------------------------------- */ + +export type DbDriverShape = z.infer diff --git a/packages/@db-driver/drivers/mock.db.ts b/packages/@db-driver/drivers/mock.db.ts index bbad81b..34cb7f2 100644 --- a/packages/@db-driver/drivers/mock.db.ts +++ b/packages/@db-driver/drivers/mock.db.ts @@ -1,4 +1,4 @@ -import { validateDriver } from '../utils/validateDriver.db.ts' +import { validateDbDriver } from '@db/driver/utils/validateDbDriver.db.ts' /* --- Import Driver Methods ------------------------------------------------------------------- */ @@ -7,8 +7,7 @@ import { MockDBEntity } from '../schemas/MockEntity.schema.ts' /* --- Driver Validation ----------------------------------------------------------------------- */ -export const driver = validateDriver({ +export const driver = validateDbDriver({ createSchemaModel, - // - Schema Helpers - DBEntity: MockDBEntity, }) diff --git a/packages/@db-driver/index.ts b/packages/@db-driver/index.ts index 1d8a6a0..bc354da 100644 --- a/packages/@db-driver/index.ts +++ b/packages/@db-driver/index.ts @@ -1,16 +1,20 @@ -import { dbDrivers } from '@app/registries/drivers.generated' +import { dbDrivers } from '@app/registries/drivers/db.drivers.generated' import { appConfig } from '@app/config' /* --- Determine Main DB driver ---------------------------------------------------------------- */ const dbDriver = dbDrivers[appConfig.drivers.db] +if (!dbDriver) throw new Error( + `No DB driver found for key "${appConfig.drivers.db}". ` + + `Make sure the driver is installed and the driver key is correct.`, +) -/* --- Re-export Driver Methods ---------------------------------------------------------------- */ +/* --- Re-export Driver Resources -------------------------------------------------------------- */ export const createSchemaModel = dbDriver['createSchemaModel'] export const DBEntity = dbDriver['DBEntity'] /* --- Export Driver Helpers ------------------------------------------------------------------- */ -export { validateDriver } from './utils/validateDriver.db.ts' +export { validateDbDriver } from './utils/validateDbDriver.db.ts' export { validateDriverModel } from './utils/validateDriverModel.db.ts' diff --git a/packages/@db-driver/utils/createSchemaModel.mock.ts b/packages/@db-driver/utils/createSchemaModel.mock.ts index b7a29d1..6e003e8 100644 --- a/packages/@db-driver/utils/createSchemaModel.mock.ts +++ b/packages/@db-driver/utils/createSchemaModel.mock.ts @@ -18,6 +18,7 @@ export const createSchemaModel = < schema: z.ZodObject, modelName?: string, ) => { + // Apply the schema name as the model key? const schemaMeta = schema.introspect() const modelKey = (modelName || schemaMeta.name) as string @@ -423,6 +424,7 @@ export const createSchemaModel = < _createdAtField: createdAtField, _updatedAtField: updatedAtField, _softDeleteField: softDeleteField, + _dbDriverType: 'mock' as const, } return Object.assign(driver, { diff --git a/packages/@db-driver/utils/validateDbDriver.db.ts b/packages/@db-driver/utils/validateDbDriver.db.ts new file mode 100644 index 0000000..d497459 --- /dev/null +++ b/packages/@db-driver/utils/validateDbDriver.db.ts @@ -0,0 +1,8 @@ +import { DbDriverShape } from '../driver.signature' + +/** --- validateDbDriver() --------------------------------------------------------------------- */ +/** -i- Validates whether a DB driver matches the expected methods */ +export const validateDbDriver = (driver: DB_DRIVER) => { + DbDriverShape.parse(driver) + return driver as DB_DRIVER +} diff --git a/packages/@db-driver/utils/validateDriver.db.ts b/packages/@db-driver/utils/validateDriver.db.ts deleted file mode 100644 index 175ac65..0000000 --- a/packages/@db-driver/utils/validateDriver.db.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { z } from '@green-stack/schemas' - -/* --- Schema ---------------------------------------------------------------------------------- */ - -export const DbDriverSchema = z.object({ - createSchemaModel: z.function().args( - z.instanceof(z.ZodObject), - z.string().optional(), - ), - DBEntity: z.instanceof(z.ZodObject), -}) - -/* --- Types ----------------------------------------------------------------------------------- */ - -export type DbDriverShape = z.infer - -/** --- validateDriver() ----------------------------------------------------------------------- */ -/** -i- Validates whether a DB driver matches the expected methods */ -export const validateDriver = (driver: DB_DRIVER) => { - DbDriverSchema.parse(driver) - return driver as DB_DRIVER -} diff --git a/packages/@db-driver/utils/validateDriverModel.db.ts b/packages/@db-driver/utils/validateDriverModel.db.ts index d759274..1dd4b8f 100644 --- a/packages/@db-driver/utils/validateDriverModel.db.ts +++ b/packages/@db-driver/utils/validateDriverModel.db.ts @@ -2,7 +2,7 @@ import { z } from '@green-stack/schemas' /* --- Schema ---------------------------------------------------------------------------------- */ -export const DbDriverModelSchema = z.object({ +export const DbModelShape = z.object({ insertOne: z.function().args(z.any()).returns(z.promise(z.any())), insertMany: z.function().args(z.array(z.any())).returns(z.promise(z.array(z.any()))), findOne: z.function().args(z.any()).returns(z.promise(z.any())), @@ -16,11 +16,11 @@ export const DbDriverModelSchema = z.object({ /* --- Types ----------------------------------------------------------------------------------- */ -export type DbModelShape = z.infer +export type DbModelShape = z.infer /** --- validateDriverModel() ----------------------------------------------------------------------- */ /** -i- Validates whether a DB model matches the expected methods */ export const validateDriverModel = (model: DB_MODEL) => { - DbDriverModelSchema.parse(model) + DbModelShape.parse(model) return model } diff --git a/packages/@green-stack-core/schemas/index.docs.mdx b/packages/@green-stack-core/schemas/index.docs.mdx index 308cfc6..71e0b2b 100644 --- a/packages/@green-stack-core/schemas/index.docs.mdx +++ b/packages/@green-stack-core/schemas/index.docs.mdx @@ -560,8 +560,6 @@ will prompt you for a target workspace and name: └── SomeData.schema.ts ``` - - Though if you chose to also generate an integration, it might look like this instead: ```shell @@ -577,8 +575,6 @@ Though if you chose to also generate an integration, it might look like this ins └── SomeData.ts # <- `@db/driver` model using `createSchemaModel()` ``` - - ## Disclaimers ### About `z.union` and `z.tuple` From 4eea2e061d8c38df5e5abf1512666a78ff39da7b Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sun, 2 Nov 2025 19:19:20 +0100 Subject: [PATCH 123/126] fix: Update collect-drivers script to avoid circular deps --- .../scripts/collect-drivers.ts | 58 ++++++++-------- .../scripts/helpers/scriptUtils.ts | 2 +- .../utils/stringUtils.docs.mdx | 51 ++++++++++++++ .../@green-stack-core/utils/stringUtils.ts | 68 ++++++++++++++++++- .../db.drivers.generated.ts} | 6 -- turbo/generators/config.ts | 25 +++++-- 6 files changed, 167 insertions(+), 43 deletions(-) rename packages/@registries/{drivers.generated.ts => drivers/db.drivers.generated.ts} (67%) diff --git a/packages/@green-stack-core/scripts/collect-drivers.ts b/packages/@green-stack-core/scripts/collect-drivers.ts index 4d2b265..9aa3b5d 100644 --- a/packages/@green-stack-core/scripts/collect-drivers.ts +++ b/packages/@green-stack-core/scripts/collect-drivers.ts @@ -15,6 +15,8 @@ type DriverConfig = { driverTypeExportKey: string, driverTypeEntryLines: string[], driverConfigTypeEnumLines: string[], + driverImportLines: string[], + driverEntryLines: string[], } } } @@ -70,11 +72,11 @@ const createDriverTypeExportsSection = (ctx: { driverTypeEntryLines: string[], }) => [ - `${createDivider(ctx.driverType)}\n`, + `${createDivider(uppercaseFirstChar(ctx.driverType))}\n`, `export const ${ctx.driverTypeExport} = {`, ctx.driverTypeEntryLines.join('\n'), // prettier-ignore - `}`, + `}\n`, ].join('\n') @@ -89,13 +91,7 @@ const createDriversFileContent = (ctx: { `// -i- Auto generated with "npx turbo run @green-stack/core#collect-drivers"`, `${ctx.driverImports}\n`, - `${ctx.driverTypeExports}\n`, - - `${createDivider('All Drivers')}\n`, - - `export const drivers = {`, - ctx.driverEntryLines, - `}\n`, + `${ctx.driverTypeExports}`, ].join('\n') @@ -116,7 +112,9 @@ const collectDrivers = () => { // Skip if not a valid driver const driverFileContents = fs.readFileSync(driverFilePath, 'utf-8') - const isValidDriver = driverFileContents.includes('export const driver = validateDriver(') + let isValidDriver = driverFileContents.includes('export const driver = validate') + const driverExportLine = driverFileContents.split('\n').find((line) => line.includes('export const driver =')) + isValidDriver = !!driverExportLine?.includes('Driver(') if (!isValidDriver) return acc // Figure out workspace info @@ -150,6 +148,7 @@ const collectDrivers = () => { driverEntryLines: addSetItem(acc.driverEntryLines, driverEntryLine), driverConfigTypeLines: addSetItem(acc.driverConfigTypeLines, driverConfigTypeLine), drivers: { + ...acc.drivers, [driverType]: { driverType, driverTypeKey, @@ -161,7 +160,10 @@ const collectDrivers = () => { driverConfigTypeEnumLines: addSetItem( acc.drivers?.[driverType]?.driverConfigTypeEnumLines, driverConfigTypeEnumLine, - ) + ), + // Deduped for 1 file per driver + driverImportLines: addSetItem(acc.drivers?.[driverType]?.driverImportLines, driverImportLine), + driverEntryLines: addSetItem(acc.drivers?.[driverType]?.driverEntryLines, driverEntryLine), } } } @@ -171,35 +173,37 @@ const collectDrivers = () => { const configTypeSections = Object.values(driverConfig.drivers).map((driverData) => { const { driverType, driverConfigTypeEnumLines } = driverData return createDriverTypeEntries({ driverType, driverConfigTypeEnumLines }) - }).join('\n') + }).join(',\n') // Build drivers.config.ts file - const driverTypes = driverConfig.driverConfigTypeLines.join('\n') + const driverTypes = driverConfig.driverConfigTypeLines.join(',\n') const driverConfigContent = createDriverConfigContent({ driverTypeEntries: configTypeSections, driverTypes, }) fs.writeFileSync('../../packages/@registries/drivers.config.ts', driverConfigContent) - // Build drivers.generated.ts subtype exports - const driverTypeExports = Object.values(driverConfig.drivers).map((driverData) => { - const { driverTypeKey, driverTypeExportKey, driverTypeEntryLines } = driverData - return createDriverTypeExportsSection({ + // For each type of driver, build its own {type}.drivers.ts file + Object.keys(driverConfig.drivers).forEach((driverType) => { + + // Build drivers.generated.ts subtype exports + const driverData = driverConfig.drivers[driverType] + const { driverTypeKey, driverTypeExportKey, driverTypeEntryLines, driverImportLines, driverEntryLines } = driverData + const driverTypeExports = createDriverTypeExportsSection({ driverType: driverTypeKey, driverTypeExport: driverTypeExportKey, driverTypeEntryLines, }) - }).join('\n') - - // Build drivers.generated.ts file - const driverEntryLines = driverConfig.driverEntryLines.join('\n') - const driverImports = driverConfig.driverImportLines.join('\n') - const driversFileContent = createDriversFileContent({ - driverImports, - driverTypeExports, - driverEntryLines, + + // Build drivers.generated.ts file + const driversFileContent = createDriversFileContent({ + driverImports: driverImportLines.join('\n'), + driverTypeExports, + driverEntryLines: driverEntryLines.join('\n'), + }) + fs.writeFileSync(`../../packages/@registries/drivers/${driverType}.drivers.generated.ts`, driversFileContent) + }) - fs.writeFileSync('../../packages/@registries/drivers.generated.ts', driversFileContent) } catch (err) { console.log(err) diff --git a/packages/@green-stack-core/scripts/helpers/scriptUtils.ts b/packages/@green-stack-core/scripts/helpers/scriptUtils.ts index 0b0bfbc..7a2e76e 100644 --- a/packages/@green-stack-core/scripts/helpers/scriptUtils.ts +++ b/packages/@green-stack-core/scripts/helpers/scriptUtils.ts @@ -313,7 +313,7 @@ export const getAvailableSchemas = ( const packageSchemaPaths = globRel(`${folderLevel}packages/**/schemas/[A-Z]*.ts`).filter(excludeModules) const featureSchemaPaths = globRel(`${folderLevel}features/**/schemas/[A-Z]*.ts`).filter(excludeModules) const allSchemaPaths = [...packageSchemaPaths, ...featureSchemaPaths].filter((pth) => { - return !['@green-stack-core/schemas/', 'createSchema', '.bridge', '.resolver', '.enum'].some((excluded) => pth.includes(excluded)) + return !['@green-stack-core/schemas/', 'createSchema', '.bridge', '.resolver', '.enum', '.partial'].some((excluded) => pth.includes(excluded)) }) // Map to build list of available resolvers to integrate with diff --git a/packages/@green-stack-core/utils/stringUtils.docs.mdx b/packages/@green-stack-core/utils/stringUtils.docs.mdx index c067016..fce263a 100644 --- a/packages/@green-stack-core/utils/stringUtils.docs.mdx +++ b/packages/@green-stack-core/utils/stringUtils.docs.mdx @@ -170,6 +170,57 @@ const params = extractPathParams('/api/user/[slug]/posts/[id]') // => ['slug', 'id'] ``` +### `guessNameFromEmail()` + +Guesses the (full?) name from a provided email address. + +Handy for sending out emails / suggesting data for newly signed up users. + +```ts +guessNameFromEmail('thorr@fullproduct.dev') // → 'Thorr' + +guessNameFromEmail('john-doe@hotmail.com') // → 'John Doe' +guessNameFromEmail('john-s-doe-1@gmail.com') // → 'John Doe' + +guessNameFromEmail('john.doe@gmail.com') // → 'John Doe' +guessNameFromEmail('johndoe+something-else@gmail.com') // → 'Johndoe' + +guessNameFromEmail('notAnEmail') // → '' +guessNameFromEmail('') // → '' +``` + +### `guessDisplayName()` + +Attempts to extract a user's full or display name, based on partial user or userlike metadata objects. + +Checks in each potential source (function args) in the following order: +→ `fullName`? → `name`? → `firstName`? → `username`? → Guess from `email`? → `''` + +Handy for sending out emails / suggesting data for newly signed up users. + +```ts +// Each source arg should be an object that could have any one of these keys +type Userlike = { + name?: string | null, + username?: string | null, + fullName?: string | null, + firstName?: string | null, + lastName?: string | null, + email?: string | null, +} + +guessDisplayName({ fullName: 'John Doe' }) // → 'John Doe' +guessDisplayName({ ... }, { name: 'John Doe' }) // → 'John Doe' + +guessDisplayName({ firstName: 'John', lastName: 'Doe' }) // → 'John Doe' +guessDisplayName({ firstName: 'John' }) // → 'John' +guessDisplayName({ lastName: 'Doe' }) // → '' + +guessDisplayName({ ... }, { email: 'john@fullproduct.dev' }) // → 'John' +guessDisplayName({ email: 'john.doe@fullproduct.dev' }) // → 'John Doe' +guessDisplayName({ email: 'john@doe.dev' }, { username: 'jondovi' }) // → 'jondovi' +``` +
## ANSI Terminal Formatting diff --git a/packages/@green-stack-core/utils/stringUtils.ts b/packages/@green-stack-core/utils/stringUtils.ts index 966bb9f..2cf65ed 100644 --- a/packages/@green-stack-core/utils/stringUtils.ts +++ b/packages/@green-stack-core/utils/stringUtils.ts @@ -1,5 +1,6 @@ /* --- Case Utils ------------------------------------------------------------------------------ */ + export const snakeToCamel = (str: string) => str.replace(/(_\w)/g, (m) => m[1].toUpperCase()) export const snakeToDash = (str: string) => str.replace(/_/g, '-') export const dashToCamel = (str: string) => str.replace(/(-\w)/g, (m) => m[1].toUpperCase()) @@ -69,8 +70,67 @@ export const includesAny = (source: string, words: string[]) => { return lowercasedWords.some((word) => lowercasedSource.includes(word)) } +/** --- guessNameFromEmail() ------------------------------------------------------------------- */ +/** -i- Guesses the (full?) name from a provided email address. */ +export const guessNameFromEmail = (email: string) => { + // Only proceed if email looks valid + if (!email || !email.includes('@')) return '' + // Strip the first part before the @, remove all numbers and special characters + let local = email.split('@')[0] + local = local.replace(/[0-9]/g, '') // Remove numbers + local = local.replace(/[\.\_\-\+]/g, ' ') // Replace special chars with spaces + // Split camelCase parts by inserting spaces + local = local.replace(/([a-z])([A-Z])/g, '$1 $2') + // Remove parts that are likely not names + const nonNameParts = ['info', 'contact', 'admin', 'user', 'mail', 'hello', 'no-reply', 'noreply'] + let parts = local.split(' ').filter((part) => !nonNameParts.includes(part.toLowerCase())) + // Remove 1 letter parts + parts = parts.filter((part) => part.length > 1) + // If no parts remain, return empty + if (parts.length === 0) return '' + // Capitalize first letter of each part + parts = parts.map((part) => uppercaseFirstChar(part.toLowerCase())) + // Return full name + return parts.join(' ') +} + +/** --- guessDisplayName() --------------------------------------------------------------------- */ +/** -i- Attempts to extract a user's full or display name, based on partial user or userlike metadata objects */ +export const guessDisplayName = < + Userlike extends { + name?: string | null, + username?: string | null, + fullName?: string | null, + firstName?: string | null, + lastName?: string | null, + email?: string | null, + } +>(mainSource: Userlike, ...fallbackSources: Userlike[]) => { + // Combine sources + const sources = [mainSource, ...fallbackSources].filter(Boolean) + // Is there a 'fullName' field? + const fullName = sources.reduce((acc, src) => src.fullName || acc, '') + if (fullName) return fullName + // Is there a 'name' field? + const name = sources.reduce((acc, src) => src.name || acc, '') + if (name) return name + // Can we combine a 'firstName' and 'lastName' field? + const firstName = sources.reduce((acc, src) => src.firstName || acc, '') + const lastName = sources.reduce((acc, src) => src.lastName || acc, '') + const combinedName = [firstName, lastName].filter(Boolean).join(' ') + if (firstName) return combinedName + // Fall back to a 'username' field? + const username = sources.reduce((acc, src) => src.firstName || acc, '') + if (username) return username + // Guess the name from an 'email' field? + const email = sources.reduce((acc, src) => src.firstName || acc, '') + if (email) return guessNameFromEmail(email) + // Give up, return empty + return '' +} + /** --- slugify() ------------------------------------------------------------------------------ */ -/** -i- Converts a string to a slug */ +/** -i- Converts a string to a slug, @example `slugify('Some random Title')` -> `some-random-title` */ export const slugify = (str: string) => { return str .toLowerCase() @@ -80,7 +140,7 @@ export const slugify = (str: string) => { /** --- extractPathParams() -------------------------------------------------------------------- */ /** -i- Extracts an array of potential params from a url, e.g. `'/api/user/[slug]/...' => ['slug']` */ -export const extractPathParams = (url: string) => { +export const extractPathParams = (url: string = '') => { const pathSegments = url.split('/') const pathParams = pathSegments.filter((segment) => segment.startsWith('[') && segment.endsWith(']')) return pathParams.map((param) => param.slice(1, -1)) @@ -89,6 +149,7 @@ export const extractPathParams = (url: string) => { /** --- ansi ----------------------------------------------------------------------------------- */ /** -i- Ansi constants for escape codes */ export const ansi = { + // Utility reset: "\x1b[0m", bold: "\x1b[1m", @@ -119,11 +180,13 @@ export const ansi = { bgMagenta: "\x1b[45m", bgCyan: "\x1b[46m", bgWhite: "\x1b[47m" + } as const /** --- ansi utils ----------------------------------------------------------------------------- */ /** -i- Ansi helpers functions to format logs and terminal messages */ export const a = { + // Utility bold: (msg: MSG, clear = false) => `${clear ? ansi.reset : ''}${ansi.bold}${msg}${ansi.reset}`, muted: (msg: MSG, clear = false) => `${clear ? ansi.reset : ''}${ansi.dim}${msg}${ansi.reset}`, @@ -154,4 +217,5 @@ export const a = { bgMagenta: (msg: MSG, clear = false) => `${clear ? ansi.reset : ''}${ansi.bgMagenta}${msg}${ansi.reset}`, bgCyan: (msg: MSG, clear = false) => `${clear ? ansi.reset : ''}${ansi.bgCyan}${msg}${ansi.reset}`, bgWhite: (msg: MSG, clear = false) => `${clear ? ansi.reset : ''}${ansi.bgWhite}${msg}${ansi.reset}`, + } as const diff --git a/packages/@registries/drivers.generated.ts b/packages/@registries/drivers/db.drivers.generated.ts similarity index 67% rename from packages/@registries/drivers.generated.ts rename to packages/@registries/drivers/db.drivers.generated.ts index 60fa07d..583d084 100644 --- a/packages/@registries/drivers.generated.ts +++ b/packages/@registries/drivers/db.drivers.generated.ts @@ -6,9 +6,3 @@ import { driver as mockDbDriver } from '@db/driver/drivers/mock.db.ts' export const dbDrivers = { 'mock-db': mockDbDriver, } - -/* --- All Drivers ----------------------------------------------------------------------------- */ - -export const drivers = { - db: dbDrivers, -} diff --git a/turbo/generators/config.ts b/turbo/generators/config.ts index a284a8a..471da95 100644 --- a/turbo/generators/config.ts +++ b/turbo/generators/config.ts @@ -11,17 +11,28 @@ import * as workspaceGenerators from '../../packages/@registries/generators.gene // -i- Learn more about Turborepo Generators at: // -i- https://turbo.build/repo/docs/core-concepts/monorepos/code-generation -// -i- Skipping Deprecation Warnings because: not caused by us, don't break anything, adds noise +// -i- Skipping Deprecation Warnings because: not caused by us + doesn't break anything + adds noise // -i- We may fix this with a version bump in the future, but for now we just want to skip them -const originalEmit = process.emit + +const originalEmit = process.emit // @ts-ignore process.emit = (name, ...args) => { - const [data] = args + const [data] = args // @ts-ignore const isNamedWarning = name === 'warning' && typeof data === 'object' && data.name - const SKIPPED_WARNINGS = ['DeprecationWarning'] - if (isNamedWarning && SKIPPED_WARNINGS.includes(data.name)) return false + const SKIPPED_WARNINGS = ['DeprecationWarning'] // @ts-ignore + if (isNamedWarning && SKIPPED_WARNINGS.includes(data.name)) return false // @ts-ignore return originalEmit.call(process, name, ...args) } +const originalEmitWarning = process.emitWarning +process.emitWarning = (warning, ...args) => { + const [warningType] = args + const SKIPPED_WARNINGS = ['DeprecationWarning', 'ExperimentalWarning', 'deprecated'] + const isSkippedWarningType = typeof warningType === 'string' && SKIPPED_WARNINGS.includes(warningType) + const isSkippedWarningMsg = typeof warning === 'string' && SKIPPED_WARNINGS.some((w) => warning.includes(w)) + if (isSkippedWarningType || isSkippedWarningMsg) return false // @ts-ignore + return originalEmitWarning.call(process, warning, ...args) +} + // -i- Turborepo & Plop don't play well with CommonJS modules like custom inquirer prompts // -i- They require everything to run synchronously, so we need 'import-sync' instead of 'require' @@ -79,7 +90,7 @@ export default function (plop: PlopTypes.NodePlopAPI) { const numSpaces = packageJsonLines[1].indexOf('"') const packageData = JSON.parse(packageJson) let strategy = !scriptPrefix ? 'append-last' : 'append-last-prefix' - let scriptLineIndex = 0 + let scriptLineIndex = 0 // @ts-ignore if (scriptPrefix) scriptLineIndex = packageJsonLines.findLastIndex((line) => line.includes(`"${scriptPrefix}:`)) if (scriptLineIndex <= 0) strategy = 'append-last' if (strategy === 'append-last') { @@ -120,7 +131,7 @@ export default function (plop: PlopTypes.NodePlopAPI) { const turboConfig = JSON.parse(turboJson) const spaces = ' '.repeat(numSpaces) const indent = spaces.repeat(2) - const pkgMatch = `${indent}"${workspacePkg}#` + const pkgMatch = `${indent}"${workspacePkg}#` // @ts-ignore const lastPkgScriptIndex = turboJsonLines.findLastIndex((line) => line.startsWith(pkgMatch)) const strategy = lastPkgScriptIndex > 0 ? 'append-last-pkg-script' : 'append-last' if (strategy === 'append-last') { From 3c39822ecb50f24f1cce3844e29364371ee32bda Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sun, 2 Nov 2025 19:20:02 +0100 Subject: [PATCH 124/126] fix: Update collect-schemas script to collect partial definitions --- .../scripts/collect-schemas.ts | 104 +++++++++++++++++- packages/@registries/models.generated.ts | 3 + packages/@registries/schemas.partials.ts | 5 + 3 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 packages/@registries/schemas.partials.ts diff --git a/packages/@green-stack-core/scripts/collect-schemas.ts b/packages/@green-stack-core/scripts/collect-schemas.ts index fb38d2d..4581bf5 100644 --- a/packages/@green-stack-core/scripts/collect-schemas.ts +++ b/packages/@green-stack-core/scripts/collect-schemas.ts @@ -1,5 +1,5 @@ import fs from 'fs' -import { getAvailableSchemas } from './helpers/scriptUtils' +import { getAvailableSchemas, globRel, excludeModules, parseWorkspaces, uppercaseFirstChar, createDivider } from './helpers/scriptUtils' import { isEmpty } from '../utils/commonUtils' /* --- Constants ------------------------------------------------------------------------------ */ @@ -11,6 +11,11 @@ const genMsg = `// -i- Auto generated with "npx turbo run @green-stack/core#coll const collectSchemas = () => { try { + // Get workspace imports + const { workspaceImports } = parseWorkspaces('../../') + + /* -- 1. Schemas -- */ + // Figure out the available schemas const availableSchemas = getAvailableSchemas('../../', { includeOptOut: true }) @@ -25,11 +30,106 @@ const collectSchemas = () => { } // Log completion message - console.log('-----------------------------------------------------------------') + console.log('\n-----------------------------------------------------------------') console.log('-i- Successfully created schema registry at:') console.log('-----------------------------------------------------------------') console.log(' ✅ packages/@registries/schemas.generated.ts') + /* -- 2. Partials? -- */ + + // Check if we should collect partial schemas from workspaces + const packagePartialPaths = globRel(`../../packages/**/schemas/[A-Z]*.partial.ts`).filter(excludeModules) + const featurePartialPaths = globRel(`../../features/**/schemas/[A-Z]*.partial.ts`).filter(excludeModules) + const allPartialSchemaPaths = [...packagePartialPaths, ...featurePartialPaths] + + // Abort and put an empty partials config if there were no partial schemas to collect + if (isEmpty(allPartialSchemaPaths)) { + fs.writeFileSync('../../packages/@registries/schemas.partials.ts', [ + + genMsg, + `import { z } from '@green-stack/schemas'`, + + createDivider('Exports'), + + `export const partials = {} as Record`, + + ].join('\n')) + return + } + + // Build the partial schema registry file + const partialsLookup = allPartialSchemaPaths.reduce((acc, partialPath) => { + + // Figure out the schema name + const schemaFileName = partialPath.split('/').pop()!.replace('.ts', '') + const schemaName = schemaFileName.split('.').reverse()!.pop()! + const SchemaName = uppercaseFirstChar(schemaName) + + // Determine import line + partial spread + const workspacePath = partialPath.split('/schemas/')?.[0]?.replace(`../../`, '') + const workspaceName = workspaceImports[workspacePath] + const [pkgScopeOrName, ...restPkgName] = workspaceName.replace('@', '').replace('-', '').split('/') + const workspacePrefix = [pkgScopeOrName, ...(restPkgName.map(uppercaseFirstChar))].join('') + const importName = `${workspacePrefix}${uppercaseFirstChar(schemaName)}Fields` + const importLine = `import * as ${importName} from '${workspaceName}/schemas/${schemaFileName}'` + + // Determine entries + const partialSpread = ` ...${importName},` + const partialEntry = ` ${SchemaName}: ${SchemaName}Partials,` + + // Append to registry + return { + [SchemaName]: { + SchemaName, + importLines: [...(acc[SchemaName]?.importLines || []), importLine], + partialSpreads: [...(acc[SchemaName]?.partialSpreads || []), partialSpread], + partialEntry, + partialDivider: createDivider(`Expansions > ${SchemaName}.schema`), + } + } + + }, {} as Record) + + // Group all import lines + const partialConfigs = Object.values(partialsLookup) + const allImportLines = partialConfigs.flatMap(cfg => cfg.importLines) + + // Build final schema partials registry content + const partialsRegistry = [ + + `${genMsg}${allImportLines.join('\n')}\n`, + + ...Object.keys(partialsLookup).map((schemaName: string) => [ + + `${partialsLookup[schemaName].partialDivider}\n`, + + `// -i- Expandable partial fields for the '${schemaName}' schema`, + `export const ${schemaName}Partials = {`, + ...partialsLookup[schemaName].partialSpreads, + `}\n`, + + ].join('\n')).flat(), + + `${createDivider('Exports')}\n`, + + `export const partials = {`, + ...partialConfigs.map(cfg => cfg.partialEntry), + `}\n`, + + ].join('\n') + + // Write barrel file to 'packages/@registries/schemas.partials.ts' + fs.writeFileSync('../../packages/@registries/schemas.partials.ts', partialsRegistry) + + // Log completion message + console.log(' ✅ packages/@registries/schemas.partials.ts') + } catch (error) { console.error("Error running script 'collect-schemas':", error) process.exit(1) diff --git a/packages/@registries/models.generated.ts b/packages/@registries/models.generated.ts index 01631b0..3ac3e06 100644 --- a/packages/@registries/models.generated.ts +++ b/packages/@registries/models.generated.ts @@ -1,15 +1,18 @@ // -i- Auto generated with "npx turbo run @db/driver#collect-models" +import { driverModel as Users } from '@app/core/models/Users.model.ts' import { driverModel as Settings } from '@app/core/models/Settings.model.ts' /* --- Reexports ------------------------------------------------------------------------------- */ export { + Users, Settings } /* --- Models ---------------------------------------------------------------------------------- */ const dbModels = { + Users, Settings } diff --git a/packages/@registries/schemas.partials.ts b/packages/@registries/schemas.partials.ts new file mode 100644 index 0000000..07ef958 --- /dev/null +++ b/packages/@registries/schemas.partials.ts @@ -0,0 +1,5 @@ +// -i- Auto generated with "npx turbo run @green-stack/core#collect:schemas" + +import { z } from '@green-stack/schemas' +/* --- Exports --------------------------------------------------------------------------------- */ +export const partials = {} as Record \ No newline at end of file From a0865cdcdf36ed90a317906f112cc3a728105668 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Sun, 2 Nov 2025 19:35:11 +0100 Subject: [PATCH 125/126] feat: Add minimal User schema and model to be expanded in plugins --- features/@app-core/models/Users.model.ts | 11 +++++++ features/@app-core/schemas/User.schema.ts | 30 +++++++++++++++++++ .../scripts/collect-schemas.ts | 7 ++--- packages/@registries/schemas.generated.ts | 1 + packages/@registries/schemas.partials.ts | 5 ++-- 5 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 features/@app-core/models/Users.model.ts create mode 100644 features/@app-core/schemas/User.schema.ts diff --git a/features/@app-core/models/Users.model.ts b/features/@app-core/models/Users.model.ts new file mode 100644 index 0000000..b1bd44c --- /dev/null +++ b/features/@app-core/models/Users.model.ts @@ -0,0 +1,11 @@ +import { validateDriverModel } from '@db/driver' +import { User } from '../schemas/User.schema' +import { createSchemaModel } from '@db/driver' + +/* --- Model ----------------------------------------------------------------------------------- */ + +export const Users = createSchemaModel(User) + +/* --- Drivers --------------------------------------------------------------------------------- */ + +export const driverModel = validateDriverModel(Users.driver) diff --git a/features/@app-core/schemas/User.schema.ts b/features/@app-core/schemas/User.schema.ts new file mode 100644 index 0000000..1b2709a --- /dev/null +++ b/features/@app-core/schemas/User.schema.ts @@ -0,0 +1,30 @@ +import { z, schema } from '@green-stack/schemas' +import { partials } from '@app/registries/schemas.partials' + +/* --- Description ----------------------------------------------------------------------------- */ + +const d = "Essential user info" + +/** --- User ----------------------------------------------------------------------------------- */ +/** -i- Essential user info */ +export const User = schema('User', { + + userId: z + .string() + .index() + .unique() + .describe('Auth provider sub or user ID'), + email: z + .string() + .unique() + .describe('Primary Github email used during OAuth'), + + // -i- Partial fields from other modules / features / packages / plugins + + ...partials.User, + +}).describe(d) + +/* --- Type Alias ------------------------------------------------------------------------------ */ + +export type User = z.input diff --git a/packages/@green-stack-core/scripts/collect-schemas.ts b/packages/@green-stack-core/scripts/collect-schemas.ts index 4581bf5..053bbcc 100644 --- a/packages/@green-stack-core/scripts/collect-schemas.ts +++ b/packages/@green-stack-core/scripts/collect-schemas.ts @@ -46,12 +46,11 @@ const collectSchemas = () => { if (isEmpty(allPartialSchemaPaths)) { fs.writeFileSync('../../packages/@registries/schemas.partials.ts', [ - genMsg, - `import { z } from '@green-stack/schemas'`, + `${genMsg}import { z } from '@green-stack/schemas'\n`, - createDivider('Exports'), + `${createDivider('Exports')}\n`, - `export const partials = {} as Record`, + `export const partials = {} as Record\n`, ].join('\n')) return diff --git a/packages/@registries/schemas.generated.ts b/packages/@registries/schemas.generated.ts index 3881196..2319343 100644 --- a/packages/@registries/schemas.generated.ts +++ b/packages/@registries/schemas.generated.ts @@ -1,3 +1,4 @@ // -i- Auto generated with "npx turbo run @green-stack/core#collect:schemas" +export { User } from '@app/core/schemas/User.schema' export { HealthCheckOutput } from '@app/core/schemas/HealthCheckOutput' export { HealthCheckInput } from '@app/core/schemas/HealthCheckInput' diff --git a/packages/@registries/schemas.partials.ts b/packages/@registries/schemas.partials.ts index 07ef958..59c610b 100644 --- a/packages/@registries/schemas.partials.ts +++ b/packages/@registries/schemas.partials.ts @@ -1,5 +1,6 @@ // -i- Auto generated with "npx turbo run @green-stack/core#collect:schemas" - import { z } from '@green-stack/schemas' + /* --- Exports --------------------------------------------------------------------------------- */ -export const partials = {} as Record \ No newline at end of file + +export const partials = {} as Record From 421664c1d8c67d5bc338c00c0a9697af5e9e0921 Mon Sep 17 00:00:00 2001 From: codinsonn Date: Mon, 3 Nov 2025 00:09:10 +0100 Subject: [PATCH 126/126] fix: Issue with default exports in link-routes script --- packages/@green-stack-core/scripts/link-routes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@green-stack-core/scripts/link-routes.ts b/packages/@green-stack-core/scripts/link-routes.ts index d2ef273..5694796 100644 --- a/packages/@green-stack-core/scripts/link-routes.ts +++ b/packages/@green-stack-core/scripts/link-routes.ts @@ -76,7 +76,7 @@ const linkRoutes = () => { if (routeFile.includes('ScreenComponent')) screenComponentName = routeFile.split('ScreenComponent')[1].split('=')[1].split('\n')[0].trim() // prettier-ignore if (screenComponentName.includes('.')) screenComponentName = screenComponentName.split('.').pop() as string // Always check if there's a default export when autoDefault is false - if (!autoDefault && routeFile.includes('default')) nextExports.push('next') + if (!autoDefault && routeFile.includes('export default')) nextExports.push('default') // Keep track of whether or not this is a server component if (routeFile.includes('export const isServerComponent = true')) isRSC = true if (routeFile.includes('export const isRSC = true')) isRSC = true