├── .npmignore ├── .gitignore ├── src ├── index.ts └── useQuery.ts ├── scripts ├── esbuild.js └── publish.js ├── LICENSE ├── README.md ├── package.json ├── tsconfig.json └── yarn.lock /.npmignore: -------------------------------------------------------------------------------- 1 | **/*.tsbuildinfo 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { useQuery, QueryOptions } from "./useQuery"; 2 | -------------------------------------------------------------------------------- /scripts/esbuild.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | // Script to build CLI with esbuild. 3 | 4 | const args = process.argv.slice(2); 5 | const watch = args.includes("watch"); 6 | const esbuild = require("esbuild"); 7 | 8 | /** @type import("esbuild").BuildOptions */ 9 | const commonBuildOptions = { 10 | entryPoints: ["src/index.ts"], 11 | color: true, 12 | bundle: true, 13 | external: ["react", "@remix-run/*"], 14 | logLevel: "info", 15 | }; 16 | 17 | esbuild 18 | .build({ 19 | ...commonBuildOptions, 20 | outfile: "dist/index.js", 21 | platform: "neutral", 22 | watch, 23 | }) 24 | .catch(() => process.exit(1)); 25 | 26 | if (!watch) { 27 | esbuild 28 | .build({ 29 | ...commonBuildOptions, 30 | minify: true, 31 | outfile: "dist/index.cjs", 32 | platform: "node", 33 | }) 34 | .catch(() => process.exit(1)); 35 | } 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Siddhant Gupta 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # remix-query 2 | 3 | Keep your loader data in sync in your component without reloading the page. 4 | 5 | ## useQuery 6 | 7 | The hook to keep loader data of any (current or other) route in-sync at client-side without reloading the page. ([View source](./src/useQuery.ts)) 8 | 9 | - Reload when window is visible (default: true) 10 | - Reload when internet re-connects (default: true) 11 | - Reload when window receives focus (default: false) 12 | 13 | ```tsx 14 | import { useQuery } from "remix-query"; 15 | ``` 16 | 17 | - Default 18 | 19 | ```tsx 20 | const { data, loading, reload } = useQuery(); 21 | ``` 22 | 23 | - Polling 24 | 25 | ```tsx 26 | const { data, loading } = useQuery({ reloadInterval: 5000 }); 27 | ``` 28 | 29 | - Other route 30 | 31 | ```tsx 32 | const { data, loading, reload } = useQuery({ 33 | route: "/other/path", 34 | }); 35 | ``` 36 | 37 | - Other options 38 | 39 | ```tsx 40 | const { data, loading, reload } = useQuery({ 41 | reloadOnWindowVisible: true 42 | reloadOnWindowFocus: true 43 | reloadOnReconnect: true 44 | }); 45 | ``` 46 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "remix-query", 3 | "version": "0.2.0", 4 | "description": "Query for Remix-Run", 5 | "keywords": [ 6 | "remix-run", 7 | "remix", 8 | "react", 9 | "query", 10 | "api" 11 | ], 12 | "main": "dist/index.cjs", 13 | "module": "dist/index.js", 14 | "types": "dist/index.d.js", 15 | "files": [ 16 | "dist" 17 | ], 18 | "author": "Siddhant Gupta ", 19 | "license": "MIT", 20 | "repository": "guptasiddhant/remix-query", 21 | "scripts": { 22 | "build": "node scripts/esbuild.js", 23 | "postbuild": "tsc", 24 | "prebuild": "rm -rf dist || true", 25 | "prepublishOnly": "npm run build", 26 | "dev": "node scripts/esbuild.js watch" 27 | }, 28 | "peerDependencies": { 29 | "@remix-run/react": "^1.0.0", 30 | "react": "^17.0.0" 31 | }, 32 | "devDependencies": { 33 | "@jsdevtools/npm-publish": "^1.4.3", 34 | "@remix-run/react": "^1.1.1", 35 | "@types/node": "^17.0.8", 36 | "@types/react": "^17.0.38", 37 | "esbuild": "^0.14.11", 38 | "react": "^17.0.2", 39 | "react-dom": "^17.0.2", 40 | "typescript": "^4.5.4" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /scripts/publish.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | // Script to publish CLI to NPM. 3 | 4 | const { npmPublish } = require("@jsdevtools/npm-publish"); 5 | const { readFileSync, writeFileSync } = require("fs"); 6 | 7 | const token = process.argv[2]; 8 | const manifestPath = "package.json"; 9 | const preId = "canary"; 10 | 11 | publishToNpm().then(handleSuccess).catch(handleError); 12 | 13 | async function publishToNpm() { 14 | const result = await npmPublish({ token }); 15 | 16 | if (result.type === "none") return await publishCanaryToNpm(); 17 | 18 | return result; 19 | } 20 | 21 | async function publishCanaryToNpm() { 22 | const manifestFile = readFileSync(manifestPath, "utf8"); 23 | const manifest = JSON.parse(manifestFile); 24 | const canaryManifest = { 25 | ...manifest, 26 | version: `${manifest.version}-${preId}.${Date.now().valueOf()}`, 27 | }; 28 | writeFileSync(manifestPath, JSON.stringify(canaryManifest, null, 2)); 29 | 30 | return await npmPublish({ token, tag: preId }); 31 | } 32 | 33 | /** @param {import("@jsdevtools/npm-publish").Results} results */ 34 | function handleSuccess({ tag, version }) { 35 | console.log(`Usage: npx guptasiddhant@${tag}`); 36 | console.log( 37 | `Link : https://www.npmjs.com/package/guptasiddhant/v/${version}` 38 | ); 39 | } 40 | 41 | function handleError(error) { 42 | console.error(error); 43 | process.exit(1); 44 | } 45 | -------------------------------------------------------------------------------- /src/useQuery.ts: -------------------------------------------------------------------------------- 1 | import { 2 | useFetcher, 3 | useLoaderData, 4 | useLocation, 5 | useMatches, 6 | useTransition, 7 | } from "@remix-run/react"; 8 | import { useCallback, useEffect, useMemo, useState } from "react"; 9 | 10 | export interface QueryOptions { 11 | /** 12 | * Other route whose loader is used to fetch data. 13 | * @default currentPath 14 | */ 15 | route?: string; 16 | /** 17 | * Enable polling of data by providing interval in milliseconds. 18 | * @default 0 19 | */ 20 | reloadInterval?: number; 21 | /** 22 | * Reload when window is visible to the user. 23 | * @default true 24 | */ 25 | reloadOnWindowVisible?: boolean; 26 | /** 27 | * Reload when window has focus. 28 | * @default false 29 | */ 30 | reloadOnWindowFocus?: boolean; 31 | /** 32 | * Reload on reconnecting with internet. 33 | * @default true 34 | */ 35 | reloadOnReconnect?: boolean; 36 | } 37 | 38 | /** 39 | * The hook to keep loader data of current route 40 | * in-sync at client-side without reloading the page. 41 | * 42 | * - Drop-in replacement for `useLoaderData` a 43 | * ```tsx 44 | * const { data, loading, reload } = useQuery() 45 | * ``` 46 | * 47 | * - `useLoaderData` with polling. 48 | * ```tsx 49 | * const { data, loading, reload } = useQuery({ 50 | * route: "/path/to/data", 51 | * reloadInterval: 5000, 52 | * }) 53 | * ``` 54 | */ 55 | export function useQuery(options: QueryOptions = {}) { 56 | const { pathname } = useLocation(); 57 | const { 58 | route = pathname, 59 | reloadInterval = 0, 60 | reloadOnWindowVisible = true, 61 | reloadOnReconnect = true, 62 | reloadOnWindowFocus = false, 63 | } = options; 64 | 65 | const isCurrentRoute: boolean = route === pathname; 66 | 67 | const { data: serverData, loading: serverLoading } = useServerData( 68 | route, 69 | isCurrentRoute 70 | ); 71 | const { 72 | data: clientData, 73 | loading: clientLoading, 74 | reload, 75 | } = useClientData({ 76 | route, 77 | reloadInterval, 78 | reloadOnReconnect, 79 | reloadOnWindowVisible, 80 | reloadOnWindowFocus, 81 | }); 82 | 83 | const data: DataType | undefined = useMemo( 84 | () => clientData || serverData, 85 | [clientData, serverData] 86 | ); 87 | 88 | const loading: boolean = useMemo( 89 | () => clientLoading || serverLoading, 90 | [clientLoading, serverLoading] 91 | ); 92 | 93 | // Initial fetch for different route on client-side 94 | // if not already loaded on server-side. 95 | useEffect(() => { 96 | if (!serverData) reload(); 97 | }, [reload, serverData]); 98 | 99 | return { data, loading, reload }; 100 | } 101 | 102 | function useServerData( 103 | route: string, 104 | isCurrentRoute: boolean 105 | ): { 106 | data: DataType | undefined; 107 | loading: boolean; 108 | } { 109 | const loaderData = useLoaderData(); 110 | const { state } = useTransition(); 111 | const loading: boolean = useMemo(() => state === "submitting", [state]); 112 | const matchData = useMatches().find((match) => match.pathname === route) 113 | ?.data as DataType; 114 | 115 | return { data: isCurrentRoute ? loaderData : matchData, loading }; 116 | } 117 | 118 | function useClientData({ 119 | route, 120 | reloadInterval, 121 | reloadOnWindowVisible, 122 | reloadOnReconnect, 123 | reloadOnWindowFocus, 124 | }: Required): { 125 | data: DataType | undefined; 126 | loading: boolean; 127 | reload: () => void; 128 | } { 129 | const [isVisible, setIsVisible] = useState(true); 130 | const { load, state, data } = useFetcher(); 131 | 132 | const reload = useCallback(() => load(route), [load, route]); 133 | const loading: boolean = useMemo(() => state !== "idle", [state]); 134 | 135 | // Polling 136 | useEffect(() => { 137 | if (!reloadInterval || !isVisible) return; 138 | const interval = setInterval(reload, reloadInterval); 139 | return () => clearInterval(interval); 140 | }, [reloadInterval, reload, isVisible]); 141 | 142 | // Reload on window visibility change 143 | useDocumentEventListener("visibilitychange", () => { 144 | const visible = window.document.visibilityState === "visible"; 145 | setIsVisible(visible); 146 | if (visible && reloadOnWindowVisible) reload(); 147 | }); 148 | 149 | // Reload on window focus 150 | useWindowEventListener("focus", reload, !reloadOnWindowFocus); 151 | 152 | // Reload on internet reconnect 153 | useWindowEventListener("online", reload, !reloadOnReconnect); 154 | 155 | return { reload, loading, data }; 156 | } 157 | 158 | function useWindowEventListener( 159 | event: K, 160 | callback: (event: WindowEventMap[K]) => void, 161 | disabled?: boolean 162 | ) { 163 | useEffect(() => { 164 | if (disabled) return; 165 | window.addEventListener(event, callback); 166 | return () => window.removeEventListener(event, callback); 167 | }, [event, callback, disabled]); 168 | } 169 | 170 | function useDocumentEventListener( 171 | type: K, 172 | callback: (event: DocumentEventMap[K]) => void, 173 | disabled?: boolean 174 | ) { 175 | useEffect(() => { 176 | if (disabled) return; 177 | window.document.addEventListener(type, callback); 178 | return () => window.document.removeEventListener(type, callback); 179 | }, [type, callback, disabled]); 180 | } 181 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | // "composite": true /* Enable constraints that allow a TypeScript project to be used with project references. */, 8 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | "lib": [ 16 | "DOM", 17 | "ESNext" 18 | ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, 19 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 20 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 21 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 22 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ 23 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 24 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ 25 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ 26 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 27 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 28 | 29 | /* Modules */ 30 | "module": "None" /* Specify what module code is generated. */, 31 | // "rootDir": "./", /* Specify the root folder within your source files. */ 32 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, 33 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 34 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 35 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 36 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ 37 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 38 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 39 | // "resolveJsonModule": true, /* Enable importing .json files */ 40 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ 41 | 42 | /* JavaScript Support */ 43 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 44 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 45 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ 46 | 47 | /* Emit */ 48 | "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, 49 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 50 | "emitDeclarationOnly": true /* Only output d.ts files and not JavaScript files. */, 51 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 52 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ 53 | "outDir": "./dist/" /* Specify an output folder for all emitted files. */, 54 | // "removeComments": true, /* Disable emitting comments. */ 55 | // "noEmit": true, /* Disable emitting files from a compilation. */ 56 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 57 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ 58 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 59 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 60 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 61 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 62 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 63 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 64 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 65 | "stripInternal": true /* Disable emitting declarations that have `@internal` in their JSDoc comments. */, 66 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ 67 | "noEmitOnError": true /* Disable emitting files if any type checking errors are reported. */, 68 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ 69 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 70 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 71 | 72 | /* Interop Constraints */ 73 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 74 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 75 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, 76 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 77 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 78 | 79 | /* Type Checking */ 80 | "strict": true /* Enable all strict type-checking options. */, 81 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ 82 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ 83 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 84 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ 85 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 86 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ 87 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ 88 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 89 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ 90 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ 91 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 92 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 93 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 94 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 95 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 96 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ 97 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 98 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 99 | 100 | /* Completeness */ 101 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 102 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 103 | }, 104 | "include": ["./src"], 105 | "exclude": [ 106 | "node_modules", 107 | "dist", 108 | "coverage", 109 | "typings", 110 | "test", 111 | "test-tsconfig.json", 112 | "tsconfig.json" 113 | ] 114 | } 115 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.7.6": 6 | version "7.16.7" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" 8 | integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== 9 | dependencies: 10 | regenerator-runtime "^0.13.4" 11 | 12 | "@jsdevtools/ez-spawn@^3.0.4": 13 | version "3.0.4" 14 | resolved "https://registry.yarnpkg.com/@jsdevtools/ez-spawn/-/ez-spawn-3.0.4.tgz#5641eb26fee6d31ec29f6788eba849470c52c7ff" 15 | integrity sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA== 16 | dependencies: 17 | call-me-maybe "^1.0.1" 18 | cross-spawn "^7.0.3" 19 | string-argv "^0.3.1" 20 | type-detect "^4.0.8" 21 | 22 | "@jsdevtools/npm-publish@^1.4.3": 23 | version "1.4.3" 24 | resolved "https://registry.yarnpkg.com/@jsdevtools/npm-publish/-/npm-publish-1.4.3.tgz#47074543fa6b97c4abcd8135c89d3706fb8d2040" 25 | integrity sha512-EdmrDPCtVZIDeTmLhQFmuwiEXtRZfQh6KwM7uZ//Zpi4FAXPCKLgOxBggbYDpsmobpGOVlWDhhUE5HMhoYJgmQ== 26 | dependencies: 27 | "@jsdevtools/ez-spawn" "^3.0.4" 28 | "@jsdevtools/ono" "^7.1.3" 29 | command-line-args "^5.1.1" 30 | semver "^7.3.4" 31 | 32 | "@jsdevtools/ono@^7.1.3": 33 | version "7.1.3" 34 | resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" 35 | integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== 36 | 37 | "@remix-run/react@^1.1.1": 38 | version "1.1.1" 39 | resolved "https://registry.yarnpkg.com/@remix-run/react/-/react-1.1.1.tgz#e0b0d15e4f1c76431b5beb6e47a0eb6125b5d09e" 40 | integrity sha512-vz7my0sqjuL3BpgvSb+pUFjebof54okDLm2wHI09NnlbPS1ILrrp61zeNmDyrA11tFcxS/JrgKS/q1Frk030mg== 41 | dependencies: 42 | react-router-dom "^6.2.1" 43 | 44 | "@types/node@^17.0.8": 45 | version "17.0.8" 46 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b" 47 | integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg== 48 | 49 | "@types/prop-types@*": 50 | version "15.7.4" 51 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" 52 | integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== 53 | 54 | "@types/react@^17.0.38": 55 | version "17.0.38" 56 | resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd" 57 | integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ== 58 | dependencies: 59 | "@types/prop-types" "*" 60 | "@types/scheduler" "*" 61 | csstype "^3.0.2" 62 | 63 | "@types/scheduler@*": 64 | version "0.16.2" 65 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" 66 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 67 | 68 | array-back@^3.0.1, array-back@^3.1.0: 69 | version "3.1.0" 70 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" 71 | integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== 72 | 73 | call-me-maybe@^1.0.1: 74 | version "1.0.1" 75 | resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" 76 | integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= 77 | 78 | command-line-args@^5.1.1: 79 | version "5.2.0" 80 | resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.0.tgz#087b02748272169741f1fd7c785b295df079b9be" 81 | integrity sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A== 82 | dependencies: 83 | array-back "^3.1.0" 84 | find-replace "^3.0.0" 85 | lodash.camelcase "^4.3.0" 86 | typical "^4.0.0" 87 | 88 | cross-spawn@^7.0.3: 89 | version "7.0.3" 90 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 91 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 92 | dependencies: 93 | path-key "^3.1.0" 94 | shebang-command "^2.0.0" 95 | which "^2.0.1" 96 | 97 | csstype@^3.0.2: 98 | version "3.0.10" 99 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" 100 | integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== 101 | 102 | esbuild-android-arm64@0.14.11: 103 | version "0.14.11" 104 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz#b8b34e35a5b43880664ac7a3fbc70243d7ed894f" 105 | integrity sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw== 106 | 107 | esbuild-darwin-64@0.14.11: 108 | version "0.14.11" 109 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz#ba805de98c0412e50fcd0636451797da157b0625" 110 | integrity sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ== 111 | 112 | esbuild-darwin-arm64@0.14.11: 113 | version "0.14.11" 114 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz#4d3573e448af76ce33e16231f3d9f878542d6fe8" 115 | integrity sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg== 116 | 117 | esbuild-freebsd-64@0.14.11: 118 | version "0.14.11" 119 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz#9294e6ab359ec93590ab097b0f2017de7c78ab4d" 120 | integrity sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA== 121 | 122 | esbuild-freebsd-arm64@0.14.11: 123 | version "0.14.11" 124 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz#ae3e0b09173350b66cf8321583c9a1c1fcb8bb55" 125 | integrity sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w== 126 | 127 | esbuild-linux-32@0.14.11: 128 | version "0.14.11" 129 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz#ddadbc7038aa5a6b1675bb1503cf79a0cbf1229a" 130 | integrity sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg== 131 | 132 | esbuild-linux-64@0.14.11: 133 | version "0.14.11" 134 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz#d698e3ce3a231ddfeec6b5df8c546ae8883fcd88" 135 | integrity sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg== 136 | 137 | esbuild-linux-arm64@0.14.11: 138 | version "0.14.11" 139 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz#85faea9fa99ad355b5e3b283197a4dfd0a110fe7" 140 | integrity sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg== 141 | 142 | esbuild-linux-arm@0.14.11: 143 | version "0.14.11" 144 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz#74cbcf0b8a22c8401bcbcd6ebd4cbf2baca8b7b4" 145 | integrity sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ== 146 | 147 | esbuild-linux-mips64le@0.14.11: 148 | version "0.14.11" 149 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz#490429211a3233f5cbbd8575b7758b897e42979a" 150 | integrity sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw== 151 | 152 | esbuild-linux-ppc64le@0.14.11: 153 | version "0.14.11" 154 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz#fc79d60710213b5b98345f5b138d48245616827a" 155 | integrity sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ== 156 | 157 | esbuild-linux-s390x@0.14.11: 158 | version "0.14.11" 159 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz#ca4b93556bbba6cc95b0644f2ee93c982165ba07" 160 | integrity sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw== 161 | 162 | esbuild-netbsd-64@0.14.11: 163 | version "0.14.11" 164 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz#edb340bc6653c88804cac2253e21b74258fce165" 165 | integrity sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw== 166 | 167 | esbuild-openbsd-64@0.14.11: 168 | version "0.14.11" 169 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz#caeff5f946f79a60ce7bcf88871ca4c71d3476e8" 170 | integrity sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q== 171 | 172 | esbuild-sunos-64@0.14.11: 173 | version "0.14.11" 174 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz#90ce7e1749c2958a53509b4bae7b8f7d98f276d6" 175 | integrity sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg== 176 | 177 | esbuild-windows-32@0.14.11: 178 | version "0.14.11" 179 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz#d067f4ce15b29efba6336e6a23597120fafe49ec" 180 | integrity sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ== 181 | 182 | esbuild-windows-64@0.14.11: 183 | version "0.14.11" 184 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz#13e86dd37a6cd61a5276fa2d271342d0f74da864" 185 | integrity sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg== 186 | 187 | esbuild-windows-arm64@0.14.11: 188 | version "0.14.11" 189 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz#e8edfdf1d712085e6dc3fba18a0c225aaae32b75" 190 | integrity sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ== 191 | 192 | esbuild@^0.14.11: 193 | version "0.14.11" 194 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.11.tgz#ac4acb78907874832afb704c3afe58ad37715c27" 195 | integrity sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg== 196 | optionalDependencies: 197 | esbuild-android-arm64 "0.14.11" 198 | esbuild-darwin-64 "0.14.11" 199 | esbuild-darwin-arm64 "0.14.11" 200 | esbuild-freebsd-64 "0.14.11" 201 | esbuild-freebsd-arm64 "0.14.11" 202 | esbuild-linux-32 "0.14.11" 203 | esbuild-linux-64 "0.14.11" 204 | esbuild-linux-arm "0.14.11" 205 | esbuild-linux-arm64 "0.14.11" 206 | esbuild-linux-mips64le "0.14.11" 207 | esbuild-linux-ppc64le "0.14.11" 208 | esbuild-linux-s390x "0.14.11" 209 | esbuild-netbsd-64 "0.14.11" 210 | esbuild-openbsd-64 "0.14.11" 211 | esbuild-sunos-64 "0.14.11" 212 | esbuild-windows-32 "0.14.11" 213 | esbuild-windows-64 "0.14.11" 214 | esbuild-windows-arm64 "0.14.11" 215 | 216 | find-replace@^3.0.0: 217 | version "3.0.0" 218 | resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" 219 | integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== 220 | dependencies: 221 | array-back "^3.0.1" 222 | 223 | history@^5.2.0: 224 | version "5.2.0" 225 | resolved "https://registry.yarnpkg.com/history/-/history-5.2.0.tgz#7cdd31cf9bac3c5d31f09c231c9928fad0007b7c" 226 | integrity sha512-uPSF6lAJb3nSePJ43hN3eKj1dTWpN9gMod0ZssbFTIsen+WehTmEadgL+kg78xLJFdRfrrC//SavDzmRVdE+Ig== 227 | dependencies: 228 | "@babel/runtime" "^7.7.6" 229 | 230 | isexe@^2.0.0: 231 | version "2.0.0" 232 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 233 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 234 | 235 | "js-tokens@^3.0.0 || ^4.0.0": 236 | version "4.0.0" 237 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 238 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 239 | 240 | lodash.camelcase@^4.3.0: 241 | version "4.3.0" 242 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 243 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= 244 | 245 | loose-envify@^1.1.0: 246 | version "1.4.0" 247 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 248 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 249 | dependencies: 250 | js-tokens "^3.0.0 || ^4.0.0" 251 | 252 | lru-cache@^6.0.0: 253 | version "6.0.0" 254 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 255 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 256 | dependencies: 257 | yallist "^4.0.0" 258 | 259 | object-assign@^4.1.1: 260 | version "4.1.1" 261 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 262 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 263 | 264 | path-key@^3.1.0: 265 | version "3.1.1" 266 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 267 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 268 | 269 | react-dom@^17.0.2: 270 | version "17.0.2" 271 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" 272 | integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== 273 | dependencies: 274 | loose-envify "^1.1.0" 275 | object-assign "^4.1.1" 276 | scheduler "^0.20.2" 277 | 278 | react-router-dom@^6.2.1: 279 | version "6.2.1" 280 | resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.2.1.tgz#32ec81829152fbb8a7b045bf593a22eadf019bec" 281 | integrity sha512-I6Zax+/TH/cZMDpj3/4Fl2eaNdcvoxxHoH1tYOREsQ22OKDYofGebrNm6CTPUcvLvZm63NL/vzCYdjf9CUhqmA== 282 | dependencies: 283 | history "^5.2.0" 284 | react-router "6.2.1" 285 | 286 | react-router@6.2.1: 287 | version "6.2.1" 288 | resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.2.1.tgz#be2a97a6006ce1d9123c28934e604faef51448a3" 289 | integrity sha512-2fG0udBtxou9lXtK97eJeET2ki5//UWfQSl1rlJ7quwe6jrktK9FCCc8dQb5QY6jAv3jua8bBQRhhDOM/kVRsg== 290 | dependencies: 291 | history "^5.2.0" 292 | 293 | react@^17.0.2: 294 | version "17.0.2" 295 | resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" 296 | integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== 297 | dependencies: 298 | loose-envify "^1.1.0" 299 | object-assign "^4.1.1" 300 | 301 | regenerator-runtime@^0.13.4: 302 | version "0.13.9" 303 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" 304 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== 305 | 306 | scheduler@^0.20.2: 307 | version "0.20.2" 308 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" 309 | integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== 310 | dependencies: 311 | loose-envify "^1.1.0" 312 | object-assign "^4.1.1" 313 | 314 | semver@^7.3.4: 315 | version "7.3.5" 316 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 317 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 318 | dependencies: 319 | lru-cache "^6.0.0" 320 | 321 | shebang-command@^2.0.0: 322 | version "2.0.0" 323 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 324 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 325 | dependencies: 326 | shebang-regex "^3.0.0" 327 | 328 | shebang-regex@^3.0.0: 329 | version "3.0.0" 330 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 331 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 332 | 333 | string-argv@^0.3.1: 334 | version "0.3.1" 335 | resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" 336 | integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== 337 | 338 | type-detect@^4.0.8: 339 | version "4.0.8" 340 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 341 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 342 | 343 | typescript@^4.5.4: 344 | version "4.5.4" 345 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" 346 | integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== 347 | 348 | typical@^4.0.0: 349 | version "4.0.0" 350 | resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" 351 | integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== 352 | 353 | which@^2.0.1: 354 | version "2.0.2" 355 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 356 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 357 | dependencies: 358 | isexe "^2.0.0" 359 | 360 | yallist@^4.0.0: 361 | version "4.0.0" 362 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 363 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 364 | --------------------------------------------------------------------------------