From e0d2833445adc3aa5fd6149f896c1a4de2db4b26 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Tue, 27 Dec 2022 10:48:06 +0100 Subject: [PATCH 01/12] Add git repo in browser Signed-off-by: Alexis Rico --- blocks.config.json | 8 + blocks/diff-block/Block.tsx | 6 +- blocks/test-block/Block.css | 3 + blocks/test-block/Block.tsx | 22 + blocks/test-block/components/Button.tsx | 7 + blocks/test-block/index.tsx | 16 + blocks/{diff-block => }/utils/base64.ts | 0 blocks/utils/createWorker.ts | 236 ++++ blocks/utils/loadBuffer.ts | 7 + blocks/utils/types.ts | 65 + .../{diff-block => }/utils/useGitHubData.tsx | 0 blocks/utils/useGitRepo.tsx | 54 + .../utils/useLocalStorageState.ts | 0 package.json | 10 + tsconfig.json | 2 +- yarn.lock | 1072 ++++++++++++----- 16 files changed, 1181 insertions(+), 327 deletions(-) create mode 100644 blocks/test-block/Block.css create mode 100644 blocks/test-block/Block.tsx create mode 100644 blocks/test-block/components/Button.tsx create mode 100644 blocks/test-block/index.tsx rename blocks/{diff-block => }/utils/base64.ts (100%) create mode 100644 blocks/utils/createWorker.ts create mode 100644 blocks/utils/loadBuffer.ts create mode 100644 blocks/utils/types.ts rename blocks/{diff-block => }/utils/useGitHubData.tsx (100%) create mode 100644 blocks/utils/useGitRepo.tsx rename blocks/{diff-block => }/utils/useLocalStorageState.ts (100%) diff --git a/blocks.config.json b/blocks.config.json index f1dbb6e..6cbd1f3 100644 --- a/blocks.config.json +++ b/blocks.config.json @@ -6,5 +6,13 @@ "description": "A diff block", "entry": "blocks/diff-block/index.tsx", "matches": ["*"] + }, + { + "type": "file", + "id": "test-block", + "title": "Test Block", + "description": "A test block", + "entry": "blocks/test-block/index.tsx", + "matches": ["*"] } ] diff --git a/blocks/diff-block/Block.tsx b/blocks/diff-block/Block.tsx index 50e7408..da6c7c3 100644 --- a/blocks/diff-block/Block.tsx +++ b/blocks/diff-block/Block.tsx @@ -4,9 +4,9 @@ import ReactDiffViewer, { DiffMethod } from 'react-diff-viewer'; import styled from 'styled-components'; import './Block.css'; import { Button } from './components/Button'; -import { decode } from './utils/base64'; -import { useGitHubData } from './utils/useGitHubData'; -import { useLocalStorageState } from './utils/useLocalStorageState'; +import { decode } from '../utils/base64'; +import { useGitHubData } from '../utils/useGitHubData'; +import { useLocalStorageState } from '../utils/useLocalStorageState'; export function DiffBlock(props: FileBlockProps) { const { context, originalContent } = props; diff --git a/blocks/test-block/Block.css b/blocks/test-block/Block.css new file mode 100644 index 0000000..59e39a6 --- /dev/null +++ b/blocks/test-block/Block.css @@ -0,0 +1,3 @@ +pre { + line-height: 1.5 !important; +} diff --git a/blocks/test-block/Block.tsx b/blocks/test-block/Block.tsx new file mode 100644 index 0000000..9ed6dd4 --- /dev/null +++ b/blocks/test-block/Block.tsx @@ -0,0 +1,22 @@ +import { FileBlockProps } from '@githubnext/blocks'; +import { Box } from '@primer/react'; +import styled from 'styled-components'; +import './Block.css'; +import { useGitRepo } from '../utils/useGitRepo'; + +export function TestBlock(props: FileBlockProps) { + const { context, originalContent } = props; + const { owner, repo, path, sha } = context; + const url = `https://github.com/${owner}/${repo}`; + + const { isLoading: cloning } = useGitRepo('clone', { url, dir: `/git/${owner}/${repo}` }); + + return ; +} + +const Container = styled(Box)` + display: flex; + flex-direction: column; + width: 100%; + position: absolute; +`; diff --git a/blocks/test-block/components/Button.tsx b/blocks/test-block/components/Button.tsx new file mode 100644 index 0000000..8f0972f --- /dev/null +++ b/blocks/test-block/components/Button.tsx @@ -0,0 +1,7 @@ +import { Button as PrimerButton } from '@primer/react'; +import styled from 'styled-components'; + +export const Button = styled(PrimerButton)<{ selected: boolean }>` + background-color: ${(props) => (props.selected ? 'hsla(220,14%,94%,1)' : 'inherit')}; + box-shadow: ${(props) => (props.selected ? 'inset 0 1px 0 rgba(208,215,222,0.2)' : 'none')}; +`; diff --git a/blocks/test-block/index.tsx b/blocks/test-block/index.tsx new file mode 100644 index 0000000..bd86f15 --- /dev/null +++ b/blocks/test-block/index.tsx @@ -0,0 +1,16 @@ +import { FileBlockProps } from '@githubnext/blocks'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { TestBlock } from './Block'; +import { GitRepoProvider } from '../utils/useGitRepo'; + +const queryClient = new QueryClient(); + +export default function (props: FileBlockProps) { + return ( + + + + + + ); +} diff --git a/blocks/diff-block/utils/base64.ts b/blocks/utils/base64.ts similarity index 100% rename from blocks/diff-block/utils/base64.ts rename to blocks/utils/base64.ts diff --git a/blocks/utils/createWorker.ts b/blocks/utils/createWorker.ts new file mode 100644 index 0000000..accfa96 --- /dev/null +++ b/blocks/utils/createWorker.ts @@ -0,0 +1,236 @@ +function createWorker() { + var code = ` + importScripts('https://cdn.jsdelivr.net/npm/@rollup/browser/dist/rollup.browser.js'); + importScripts('https://unpkg.com/isomorphic-git'); + importScripts('https://unpkg.com/@isomorphic-git/lightning-fs'); + + const SEARCH_EXTENSIONS = [ + "/index.tsx", + "/index.ts", + "/index.js", + ".tsx", + ".ts", + ".json", + ".js", + ]; + + function searchFile( vfs, filepath, extensions ) { + for (const ext of ["", ...extensions]) { + // console.log("searching...", filepath + ext); + if (vfs.has(filepath + ext)) { + return filepath + ext; + } + } + } + + const DEBUG = false; + const log = (...args) => { + if (DEBUG) console.log(...args); + }; + + const isFileSchema = (id) => + id.startsWith("file://") || id.startsWith("/"); + + const isRelativePath = (id) => stripSchema(id).startsWith("."); + const stripSchema = (id) => id.replace(/^file\\:(\\/\\/)?/, ""); + + const virtualFs = ({ + files, + extensions = SEARCH_EXTENSIONS, + memoryOnly = true, + }) => { + + const vfs = new Map(Object.entries(files)); + + return { + name: "virtual-fs", + resolveId(id, importer) { + // const exts = extensions ?; + log("[rollup-plugin-virtual-fs]", id, importer); + const normalized = stripSchema(id); + // entry point + if (isFileSchema(id) && importer == null) { + return searchFile(vfs, normalized, extensions); + } + // relative filepath + if (importer && isFileSchema(importer) && isRelativePath(id)) { + const rawImporter = importer.replace(/^file\\:/, ""); + const fullpath = id; + const reslovedWithExt = searchFile(vfs, fullpath, extensions); + if (reslovedWithExt) return reslovedWithExt; + this.warn('[rollup-plugin-virtual-fs] can not resolve id: ' + fullpath); + } + }, + load(id) { + const real = stripSchema(id); + const ret = vfs.get(real); + if (ret) return ret; + if (memoryOnly) + throw new Error('[virtualFs] ' + id + ' is not found on files'); + }, + }; + }; + + // Convert a value to an Async Iterator +// This will be easier with async generator functions. +function fromValue(value) { + let queue = [value]; + return { + next() { + return Promise.resolve({ done: queue.length === 0, value: queue.pop() }) + }, + return() { + queue = []; + return {} + }, + [Symbol.asyncIterator]() { + return this + }, + } +} + +function getIterator(iterable) { + if (iterable[Symbol.asyncIterator]) { + return iterable[Symbol.asyncIterator]() + } + if (iterable[Symbol.iterator]) { + return iterable[Symbol.iterator]() + } + if (iterable.next) { + return iterable + } + return fromValue(iterable) +} + +// Currently 'for await' upsets my linters. +async function forAwait(iterable, cb) { + const iter = getIterator(iterable); + while (true) { + const { value, done } = await iter.next(); + if (value) await cb(value); + if (done) break + } + if (iter.return) iter.return(); +} + +async function collect(iterable) { + let size = 0; + const buffers = []; + await forAwait(iterable, value => { + buffers.push(value); + size += value.byteLength; + }); + const result = new Uint8Array(size); + let nextIndex = 0; + for (const buffer of buffers) { + result.set(buffer, nextIndex); + nextIndex += buffer.byteLength; + } + return result +} + +// Convert a web ReadableStream (not Node stream!) to an Async Iterator +// adapted from https://jakearchibald.com/2017/async-iterators-and-generators/ +function fromStream(stream) { + // Use native async iteration if it's available. + if (stream[Symbol.asyncIterator]) return stream + const reader = stream.getReader(); + return { + next() { + return reader.read() + }, + return() { + reader.releaseLock(); + return {} + }, + [Symbol.asyncIterator]() { + return this + }, + } +} + + +async function request({ + onProgress, + url, + method = 'GET', + headers = {}, + body, +}) { + // streaming uploads aren't possible yet in the browser + if (body) { + body = await collect(body); + } + const res = await fetch(url, { method, headers, body }); + const iter = + res.body && res.body.getReader + ? fromStream(res.body) + : [new Uint8Array(await res.arrayBuffer())]; + // convert Header object to ordinary JSON + headers = {}; + for (const [key, value] of res.headers.entries()) { + headers[key] = value; + } + return { + url: res.url, + method: res.method, + statusCode: res.status, + statusMessage: res.statusText, + body: iter, + headers: headers, + } +} + + const http = { request }; + + self.onmessage = async function (e) { + try { + const { rollup: runRollup } = rollup; + + const bundle = await runRollup({ + input: '/index.js', + output: { file: 'file://bundle.js' }, + plugins: [virtualFs({ files: { "/index.js": 'const foo = 1; export default foo;' } })] + }); + + const { output } = await bundle.generate({}); + + self.postMessage({ kind:"bundle", data: output[0].code}); + + self.postMessage({ kind:"git", data: null}); + + const fs = new LightningFS('block-tests-fs'); + + await git.clone({ + fs, + http, + dir: '/foo-bar', + url: 'https://github.com/SferaDev/block-tests', + corsProxy: 'https://dev.eyeseetea.com/cors/', + force: true, + }); + + const foo = await fs.promises.readFile('/foo-bar/myadd.test.ts', 'utf8'); + + self.postMessage({ kind:"git", data: foo}); + + self.postMessage({ kind:"done", data: null}); + } catch (e) { + self.postMessage({ kind:"error", data: e}); + } + + // Close the worker + self.close(); + }; + `; + + const blob = new Blob([code], { type: 'application/javascript' }); + const worker = new Worker(URL.createObjectURL(blob)); + + // Test, used in all examples: + worker.onmessage = function (e) { + console.log('Response: ' + e.data.kind, e.data.data); + }; + + worker.postMessage('Test'); +} diff --git a/blocks/utils/loadBuffer.ts b/blocks/utils/loadBuffer.ts new file mode 100644 index 0000000..e9c4ec1 --- /dev/null +++ b/blocks/utils/loadBuffer.ts @@ -0,0 +1,7 @@ +import { Buffer as BufferPolyfill } from 'buffer'; + +declare global { + var Buffer: typeof BufferPolyfill; +} + +globalThis.Buffer = BufferPolyfill; diff --git a/blocks/utils/types.ts b/blocks/utils/types.ts new file mode 100644 index 0000000..3b7cf8f --- /dev/null +++ b/blocks/utils/types.ts @@ -0,0 +1,65 @@ +export type StringKeys = Extract; +export type NumberKeys = Extract; +export type Values = O[StringKeys]; + +export type UnionToIntersection = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never; + +export type If = Condition extends true ? Then : Else; + +export type IsObject = T extends Record ? true : false; +export type IsArray = T extends Array ? true : false; + +export type NonEmptyArray = T[] & { 0: T }; + +export type RequiredBy = T & { + [P in K]-?: NonNullable; +}; + +export type GetArrayInnerType = T[number]; + +export type FunctionKeys = { + [K in keyof T]: T[K] extends (...args: any) => any ? K : never; +}[keyof T]; + +export type AllRequired = { + [P in keyof T]-?: T[P]; +}; + +export type KeysOfUnion = T extends T ? keyof T : never; + +type Impossible = { + [P in K]: never; +}; + +export type Exactly = U & Impossible>; + +export type SingleOrArray = T | T[]; + +export type Dictionary = Record; + +export type OmitBy = T extends any ? Omit : never; + +type Without = { [P in Exclude]?: never }; +export type ExclusiveOr = T | U extends object ? (Without & U) | (Without & T) : T | U; + +type Explode = keyof T extends infer K + ? K extends unknown + ? { [I in keyof T]: I extends K ? T[I] : never } + : never + : never; +export type AtMostOne = Explode>; +export type AtLeastOne }> = Partial & U[keyof U]; +export type ExactlyOne = AtMostOne & AtLeastOne; + +type Fn = (...args: any[]) => any; + +type NarrowRaw = + | (A extends [] ? [] : never) + | (A extends Narrowable ? A : never) + | { + [K in keyof A]: A[K] extends Fn ? A[K] : NarrowRaw; + }; +type Narrowable = string | number | bigint | boolean; +type Try = A1 extends A2 ? A1 : Catch; + +export type Narrow = Try>; diff --git a/blocks/diff-block/utils/useGitHubData.tsx b/blocks/utils/useGitHubData.tsx similarity index 100% rename from blocks/diff-block/utils/useGitHubData.tsx rename to blocks/utils/useGitHubData.tsx diff --git a/blocks/utils/useGitRepo.tsx b/blocks/utils/useGitRepo.tsx new file mode 100644 index 0000000..f992fbc --- /dev/null +++ b/blocks/utils/useGitRepo.tsx @@ -0,0 +1,54 @@ +import './loadBuffer'; + +import { UseQueryOptions, useQuery } from '@tanstack/react-query'; +import { BFSRequire, configure } from 'browserfs'; +import git, { FsClient } from 'isomorphic-git'; +import http from 'isomorphic-git/http/web'; +import { createContext, useContext, useEffect, useState } from 'react'; +import { Values } from './types'; + +const GitContext = createContext(null); + +type GitContextOptions = { corsProxy?: string }; + +type GitContextState = { + fs: FsClient; + options?: GitContextOptions; +}; + +type GitMethod = Values<{ + [K in keyof typeof git]: typeof git[K] extends (args: any) => Promise ? K : never; +}>; + +export const useGitRepo = ( + method: Method, + args: typeof git[Method] extends (args: infer Args) => Promise ? Omit : never, + queryOptions?: UseQueryOptions Promise ? Result : never> +) => { + const context = useContext(GitContext); + if (!context) { + throw new Error('useGitRepo must be used within a GitRepoProvider'); + } + + const { fs, options } = context; + + return useQuery(['git', method, args], () => git[method]({ ...options, ...args, fs, http } as any), { + enabled: !!fs, + ...(queryOptions as any) + }); +}; + +export const GitRepoProvider = ({ children, ...options }: { children: React.ReactNode } & GitContextOptions) => { + const [fs, setFs] = useState(); + + useEffect(() => { + configure({ fs: 'IndexedDB', options: {} }, (e) => { + if (e) throw e; + setFs(BFSRequire('fs')); + }); + }, []); + + if (!fs) return null; + + return {children}; +}; diff --git a/blocks/diff-block/utils/useLocalStorageState.ts b/blocks/utils/useLocalStorageState.ts similarity index 100% rename from blocks/diff-block/utils/useLocalStorageState.ts rename to blocks/utils/useLocalStorageState.ts diff --git a/package.json b/package.json index 1efabe0..fbe01a8 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,20 @@ }, "dependencies": { "@githubnext/blocks": "^2.3.2", + "@isomorphic-git/cors-proxy": "^2.7.1", + "@isomorphic-git/lightning-fs": "^4.6.0", + "@rollup/browser": "^3.8.1", + "@rollup/plugin-virtual": "^3.0.1", "@tanstack/react-query": "^4.19.1", + "browserfs": "^1.4.3", + "buffer": "^6.0.3", + "isomorphic-git": "^1.21.0", "react": "^18.2.0", "react-diff-viewer": "^3.1.1", "react-dom": "^18.2.0", + "rollup-plugin-esbuild": "^5.0.0", + "rollup-plugin-import-cdn": "^0.2.2", + "rollup-plugin-virtual-fs": "^4.0.1-alpha.0", "styled-components": "^5.3.6" } } diff --git a/tsconfig.json b/tsconfig.json index 86a6435..8da4cc6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "./node_modules/@githubnext/blocks/tsconfig.json", - "include": ["./blocks"] + "include": ["./blocks", "blocks/utils"] } diff --git a/yarn.lock b/yarn.lock index 379f4d5..1d19dab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@ampproject/remapping@^2.1.0": version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: "@jridgewell/gen-mapping" "^0.1.0" @@ -12,26 +12,26 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" "@babel/code-frame@^7.16.7": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: "@babel/highlight" "^7.16.7" "@babel/compat-data@^7.18.8": version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.13.tgz#6aff7b350a1e8c3e40b029e46cbe78e24a913483" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz" integrity sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw== "@babel/core@^7.18.10": version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.13.tgz#9be8c44512751b05094a4d3ab05fc53a47ce00ac" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.13.tgz" integrity sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A== dependencies: "@ampproject/remapping" "^2.1.0" @@ -52,7 +52,7 @@ "@babel/generator@^7.17.12": version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.12.tgz#5970e6160e9be0428e02f4aba62d8551ec366cc8" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.17.12.tgz" integrity sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw== dependencies: "@babel/types" "^7.17.12" @@ -61,7 +61,7 @@ "@babel/generator@^7.18.13": version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.13.tgz#59550cbb9ae79b8def15587bdfbaa388c4abf212" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz" integrity sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ== dependencies: "@babel/types" "^7.18.13" @@ -70,21 +70,21 @@ "@babel/helper-annotate-as-pure@^7.16.0": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: "@babel/types" "^7.16.7" "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-compilation-targets@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz" integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== dependencies: "@babel/compat-data" "^7.18.8" @@ -94,19 +94,19 @@ "@babel/helper-environment-visitor@^7.16.7": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz" integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== dependencies: "@babel/types" "^7.16.7" "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== "@babel/helper-function-name@^7.17.9": version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz" integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== dependencies: "@babel/template" "^7.16.7" @@ -114,7 +114,7 @@ "@babel/helper-function-name@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz" integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== dependencies: "@babel/template" "^7.18.6" @@ -122,35 +122,35 @@ "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz" integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== dependencies: "@babel/types" "^7.16.7" "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.0": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== dependencies: "@babel/types" "^7.16.7" "@babel/helper-module-imports@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + 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" "@babel/helper-module-transforms@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz" integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -164,53 +164,53 @@ "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz" integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== "@babel/helper-simple-access@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== dependencies: "@babel/types" "^7.18.6" "@babel/helper-split-export-declaration@^7.16.7": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz" integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== dependencies: "@babel/types" "^7.16.7" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-string-parser@^7.18.10": version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== "@babel/helper-validator-option@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helpers@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz" integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== dependencies: "@babel/template" "^7.18.6" @@ -219,7 +219,7 @@ "@babel/highlight@^7.16.7": version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz" integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== dependencies: "@babel/helper-validator-identifier" "^7.16.7" @@ -228,7 +228,7 @@ "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" @@ -237,45 +237,45 @@ "@babel/parser@^7.16.7", "@babel/parser@^7.17.12": version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.12.tgz#36c2ed06944e3691ba82735fc4cf62d12d491a23" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.17.12.tgz" integrity sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA== "@babel/parser@^7.18.10", "@babel/parser@^7.18.13": version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz" integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg== "@babel/plugin-syntax-jsx@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz" integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-jsx-development@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz" integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" "@babel/plugin-transform-react-jsx-self@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz#3849401bab7ae8ffa1e3e5687c94a753fc75bda7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz" integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-jsx-source@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz#06e9ae8a14d2bc19ce6e3c447d842032a50598fc" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz" integrity sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-jsx@^7.18.10", "@babel/plugin-transform-react-jsx@^7.18.6": version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz#ea47b2c4197102c196cbd10db9b3bb20daa820f1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz" integrity sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -286,14 +286,14 @@ "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.7.7": version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz" integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== dependencies: regenerator-runtime "^0.13.4" "@babel/template@^7.16.7": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== dependencies: "@babel/code-frame" "^7.16.7" @@ -302,7 +302,7 @@ "@babel/template@^7.18.10", "@babel/template@^7.18.6": version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== dependencies: "@babel/code-frame" "^7.18.6" @@ -311,7 +311,7 @@ "@babel/traverse@^7.18.13", "@babel/traverse@^7.18.9": version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.13.tgz#5ab59ef51a997b3f10c4587d648b9696b6cb1a68" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz" integrity sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA== dependencies: "@babel/code-frame" "^7.18.6" @@ -327,7 +327,7 @@ "@babel/traverse@^7.4.5": version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.12.tgz#011874d2abbca0ccf1adbe38f6f7a4ff1747599c" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.12.tgz" integrity sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw== dependencies: "@babel/code-frame" "^7.16.7" @@ -343,7 +343,7 @@ "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.17.12": version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.12.tgz#1210690a516489c0200f355d87619157fbbd69a0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz" integrity sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg== dependencies: "@babel/helper-validator-identifier" "^7.16.7" @@ -351,7 +351,7 @@ "@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.18.9": version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.13.tgz#30aeb9e514f4100f7c1cb6e5ba472b30e48f519a" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz" integrity sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ== dependencies: "@babel/helper-string-parser" "^7.18.10" @@ -360,7 +360,7 @@ "@emotion/cache@^10.0.27": version "10.0.29" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" + resolved "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz" integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== dependencies: "@emotion/sheet" "0.9.4" @@ -370,29 +370,29 @@ "@emotion/hash@0.8.0": version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== "@emotion/is-prop-valid@^1.1.0": version "1.1.2" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.2.tgz#34ad6e98e871aa6f7a20469b602911b8b11b3a95" + resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.2.tgz" integrity sha512-3QnhqeL+WW88YjYbQL5gUIkthuMw7a0NGbZ7wfFVk2kg/CK5w8w5FFa0RzWjyY1+sujN0NWbtSHH6OJmWHtJpQ== dependencies: "@emotion/memoize" "^0.7.4" "@emotion/memoize@0.7.4": version "0.7.4" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== "@emotion/memoize@^0.7.4": version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" + resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz" integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== "@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": version "0.11.16" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" + resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz" integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg== dependencies: "@emotion/hash" "0.8.0" @@ -403,27 +403,27 @@ "@emotion/sheet@0.9.4": version "0.9.4" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" + resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz" integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== "@emotion/stylis@0.8.5", "@emotion/stylis@^0.8.4": version "0.8.5" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + resolved "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz" integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== "@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.4": version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== "@emotion/utils@0.11.3": version "0.11.3" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" + resolved "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz" integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== "@emotion/weak-memoize@0.2.5": version "0.2.5" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" + resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== "@esbuild/linux-loong64@0.14.54": @@ -433,7 +433,7 @@ "@githubnext/blocks@^2.3.2": version "2.3.2" - resolved "https://registry.yarnpkg.com/@githubnext/blocks/-/blocks-2.3.2.tgz#154de2effc4fc51afa25f0503ddb1fbc8ffca5e2" + resolved "https://registry.npmjs.org/@githubnext/blocks/-/blocks-2.3.2.tgz" integrity sha512-ja0zVGdtg8apUwv1d6SaFacWFmG3vMEFYwCuaGvX/gicuBWp1qjPYMvUCe7D1OzdvUf973+ICpsuNVB8JpTsqA== dependencies: "@loadable/component" "^5.15.0" @@ -460,9 +460,37 @@ twind "^0.16.17" vite "^3.0.0" +"@isomorphic-git/cors-proxy@^2.7.1": + version "2.7.1" + resolved "https://registry.npmjs.org/@isomorphic-git/cors-proxy/-/cors-proxy-2.7.1.tgz" + integrity sha512-5P4bcOiwCJoYi6lf3pkTtFz6eQWaJsJD3IS75VQBgAoFFfNUlMw5Ufqd/UMFeqy6FJNgGCbuSHdfoKUx+pAlhA== + dependencies: + cross-env "^5.2.0" + daemonize-process "^1.0.9" + micro "^9.3.3" + micro-cors "0.1.1" + minimisted "^2.0.0" + node-fetch "^2.6.0" + tree-kill "^1.2.1" + +"@isomorphic-git/idb-keyval@3.3.2": + version "3.3.2" + resolved "https://registry.npmjs.org/@isomorphic-git/idb-keyval/-/idb-keyval-3.3.2.tgz" + integrity sha512-r8/AdpiS0/WJCNR/t/gsgL+M8NMVj/ek7s60uz3LmpCaTF2mEVlZJlB01ZzalgYzRLXwSPC92o+pdzjM7PN/pA== + +"@isomorphic-git/lightning-fs@^4.6.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@isomorphic-git/lightning-fs/-/lightning-fs-4.6.0.tgz" + integrity sha512-tfon8f1h6LawjFI/d8lZPWRPTxmdvyTMbkT/j5yo6dB0hALhKw5D9JsdCcUu/D1pAcMMiU7GZFDsDGqylerr7g== + dependencies: + "@isomorphic-git/idb-keyval" "3.3.2" + isomorphic-textencoder "1.0.1" + just-debounce-it "1.1.0" + just-once "1.1.0" + "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: "@jridgewell/set-array" "^1.0.0" @@ -470,7 +498,7 @@ "@jridgewell/gen-mapping@^0.3.0": version "0.3.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz" integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== dependencies: "@jridgewell/set-array" "^1.0.0" @@ -479,7 +507,7 @@ "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: "@jridgewell/set-array" "^1.0.1" @@ -488,27 +516,27 @@ "@jridgewell/resolve-uri@^3.0.3": version "3.0.7" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz" integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== "@jridgewell/set-array@^1.0.0": version "1.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz" integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.13" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz" integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== "@jridgewell/trace-mapping@^0.3.9": version "0.3.13" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz" integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -516,7 +544,7 @@ "@loadable/component@^5.15.0": version "5.15.2" - resolved "https://registry.yarnpkg.com/@loadable/component/-/component-5.15.2.tgz#b6c418d592e0a64f16b1d614ca9d3b1443d3b498" + resolved "https://registry.npmjs.org/@loadable/component/-/component-5.15.2.tgz" integrity sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw== dependencies: "@babel/runtime" "^7.7.7" @@ -525,39 +553,39 @@ "@octokit/openapi-types@^12.11.0": version "12.11.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz" integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== "@octokit/types@^6.0.0": version "6.41.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" + resolved "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz" integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== dependencies: "@octokit/openapi-types" "^12.11.0" "@primer/behaviors@1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@primer/behaviors/-/behaviors-1.1.1.tgz#51e2f02ebfe297c4c05f503cdc52ae8b4ce5794c" + resolved "https://registry.npmjs.org/@primer/behaviors/-/behaviors-1.1.1.tgz" integrity sha512-wvF1PYjyxKNTr6+5w4uR5Gkz53t1fsRDgKjWxDKk7wmlh0cwiILBo4dDFjjVhWRF1mBSjaIxxJGB4WGaP7ct2Q== "@primer/octicons-react@16.1.1": version "16.1.1" - resolved "https://registry.yarnpkg.com/@primer/octicons-react/-/octicons-react-16.1.1.tgz#6a9eaffbbf46cb44d344a37a5ff2384973b82d3f" + resolved "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-16.1.1.tgz" integrity sha512-xCxQ5z23ol7yDuJs85Lc4ARzyoay+b3zOhAKkEMU7chk0xi2hT2OnRP23QUudNNDPTGozX268RGYLexUa6P4xw== "@primer/octicons-react@^17.3.0": version "17.3.0" - resolved "https://registry.yarnpkg.com/@primer/octicons-react/-/octicons-react-17.3.0.tgz#a9b868db9520e48114fd402e56600e99bcb7e8b7" + resolved "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-17.3.0.tgz" integrity sha512-72K4SeDj3WmehiQqVeOS+icvcO5+JHXK12ee3AqbZGqNqgCKdU4zJRKeC7EGMV4lQhoJXbj8OEdppBLa3qFDhw== "@primer/primitives@7.6.0": version "7.6.0" - resolved "https://registry.yarnpkg.com/@primer/primitives/-/primitives-7.6.0.tgz#942efe38b6e09bf6d0351c045436e628e32c3ddb" + resolved "https://registry.npmjs.org/@primer/primitives/-/primitives-7.6.0.tgz" integrity sha512-cu28QLjectVf2rT4P7m6zS9v4g4yHtErRuPfsgEWEJhbXVIII6vDBm6elJzYixGpTNxpVtSUNezxUXv16l1ejQ== "@primer/react@^35.2.1": version "35.2.1" - resolved "https://registry.yarnpkg.com/@primer/react/-/react-35.2.1.tgz#fe35510b650b249cd36207d4854a60786fd5cc3f" + resolved "https://registry.npmjs.org/@primer/react/-/react-35.2.1.tgz" integrity sha512-aa5N0bGgOWPkUCjW5qqVtAxcaUxWe6pT4TjG6YCfoUjuY/OkngENSoBipXhNNThFfE78z7moP7UwxvxY7JW8mA== dependencies: "@primer/behaviors" "1.1.1" @@ -581,115 +609,134 @@ "@radix-ui/react-polymorphic@0.0.14": version "0.0.14" - resolved "https://registry.yarnpkg.com/@radix-ui/react-polymorphic/-/react-polymorphic-0.0.14.tgz#fc6cefee6686db8c5a7ff14c8c1b9b5abdee325b" + resolved "https://registry.npmjs.org/@radix-ui/react-polymorphic/-/react-polymorphic-0.0.14.tgz" integrity sha512-9nsMZEDU3LeIUeHJrpkkhZVxu/9Fc7P2g2I3WR+uA9mTbNC3hGaabi0dV6wg0CfHb+m4nSs1pejbE/5no3MJTA== "@react-aria/ssr@3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.1.0.tgz#b7163e6224725c30121932a8d1422ef91d1fab22" + resolved "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.1.0.tgz" integrity sha512-RxqQKmE8sO7TGdrcSlHTcVzMP450hqowtBSd2bBS9oPlcokVkaGq28c3Rwa8ty5ctw4EBCjXqjP7xdcKMGDzug== dependencies: "@babel/runtime" "^7.6.2" +"@rollup/browser@^3.8.1": + version "3.8.1" + resolved "https://registry.npmjs.org/@rollup/browser/-/browser-3.8.1.tgz" + integrity sha512-PGcy4fw7+ENgNoaJRX7K2Is61goyWw+eyw5B5AeuXXpQLmjpk5NpiUKDZV9HgcdXY8iHo/PlnEjAamzYiginhQ== + +"@rollup/plugin-virtual@^3.0.1": + version "3.0.1" + resolved "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-3.0.1.tgz" + integrity sha512-fK8O0IL5+q+GrsMLuACVNk2x21g3yaw+sG2qn16SnUd3IlBsQyvWxLMGHmCmXRMecPjGRSZ/1LmZB4rjQm68og== + +"@rollup/pluginutils@^5.0.1": + version "5.0.2" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz" + integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + "@styled-system/background@^5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/background/-/background-5.1.2.tgz#75c63d06b497ab372b70186c0bf608d62847a2ba" + resolved "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz" integrity sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/border@^5.1.5": version "5.1.5" - resolved "https://registry.yarnpkg.com/@styled-system/border/-/border-5.1.5.tgz#0493d4332d2b59b74bb0d57d08c73eb555761ba6" + resolved "https://registry.npmjs.org/@styled-system/border/-/border-5.1.5.tgz" integrity sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/color@^5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/color/-/color-5.1.2.tgz#b8d6b4af481faabe4abca1a60f8daa4ccc2d9f43" + resolved "https://registry.npmjs.org/@styled-system/color/-/color-5.1.2.tgz" integrity sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/core@^5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/core/-/core-5.1.2.tgz#b8b7b86455d5a0514f071c4fa8e434b987f6a772" + resolved "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz" integrity sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw== dependencies: object-assign "^4.1.1" "@styled-system/css@5.1.5", "@styled-system/css@^5.1.5": version "5.1.5" - resolved "https://registry.yarnpkg.com/@styled-system/css/-/css-5.1.5.tgz#0460d5f3ff962fa649ea128ef58d9584f403bbbc" + resolved "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz" integrity sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A== "@styled-system/flexbox@^5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/flexbox/-/flexbox-5.1.2.tgz#077090f43f61c3852df63da24e4108087a8beecf" + resolved "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.2.tgz" integrity sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/grid@^5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/grid/-/grid-5.1.2.tgz#7165049877732900b99cd00759679fbe45c6c573" + resolved "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.2.tgz" integrity sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/layout@^5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/layout/-/layout-5.1.2.tgz#12d73e79887e10062f4dbbbc2067462eace42339" + resolved "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.2.tgz" integrity sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/position@^5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/position/-/position-5.1.2.tgz#56961266566836f57a24d8e8e33ce0c1adb59dd3" + resolved "https://registry.npmjs.org/@styled-system/position/-/position-5.1.2.tgz" integrity sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/props@5.1.5": version "5.1.5" - resolved "https://registry.yarnpkg.com/@styled-system/props/-/props-5.1.5.tgz#f50bf40e8fc8393726f06cbcd096a39a7d779ce4" + resolved "https://registry.npmjs.org/@styled-system/props/-/props-5.1.5.tgz" integrity sha512-FXhbzq2KueZpGaHxaDm8dowIEWqIMcgsKs6tBl6Y6S0njG9vC8dBMI6WSLDnzMoSqIX3nSKHmOmpzpoihdDewg== dependencies: styled-system "^5.1.5" "@styled-system/shadow@^5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/shadow/-/shadow-5.1.2.tgz#beddab28d7de03cd0177a87ac4ed3b3b6d9831fd" + resolved "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.2.tgz" integrity sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/space@^5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/space/-/space-5.1.2.tgz#38925d2fa29a41c0eb20e65b7c3efb6e8efce953" + resolved "https://registry.npmjs.org/@styled-system/space/-/space-5.1.2.tgz" integrity sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/theme-get@5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/theme-get/-/theme-get-5.1.2.tgz#b40a00a44da63b7a6ed85f73f737c4defecd6049" + resolved "https://registry.npmjs.org/@styled-system/theme-get/-/theme-get-5.1.2.tgz" integrity sha512-afAYdRqrKfNIbVgmn/2Qet1HabxmpRnzhFwttbGr6F/mJ4RDS/Cmn+KHwHvNXangQsWw/5TfjpWV+rgcqqIcJQ== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/typography@^5.1.2": version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/typography/-/typography-5.1.2.tgz#65fb791c67d50cd2900d234583eaacdca8c134f7" + resolved "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.2.tgz" integrity sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/variant@^5.1.5": version "5.1.5" - resolved "https://registry.yarnpkg.com/@styled-system/variant/-/variant-5.1.5.tgz#8446d8aad06af3a4c723d717841df2dbe4ddeafd" + resolved "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.5.tgz" integrity sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw== dependencies: "@styled-system/core" "^5.1.2" @@ -697,20 +744,25 @@ "@tanstack/query-core@4.19.1": version "4.19.1" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.19.1.tgz#2e92d9e8a50884eb231c5beb4386e131ebe34306" + resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.19.1.tgz" integrity sha512-Zp0aIose5C8skBzqbVFGk9HJsPtUhRVDVNWIqVzFbGQQgYSeLZMd3Sdb4+EnA5wl1J7X+bre2PJGnQg9x/zHOA== "@tanstack/react-query@^4.19.1": version "4.19.1" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.19.1.tgz#43356dd537127e76d75f5a2769eb23dafd9a3690" + resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.19.1.tgz" integrity sha512-5dvHvmc0vrWI03AJugzvKfirxCyCLe+qawrWFCXdu8t7dklIhJ7D5ZhgTypv7mMtIpdHPcECtCiT/+V74wCn2A== dependencies: "@tanstack/query-core" "4.19.1" use-sync-external-store "^1.2.0" +"@types/estree@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + "@types/hoist-non-react-statics@*": version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz" integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== dependencies: "@types/react" "*" @@ -718,17 +770,17 @@ "@types/parse-json@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prop-types@*": version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/react@*": version "18.0.9" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.9.tgz#d6712a38bd6cd83469603e7359511126f122e878" + resolved "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz" integrity sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw== dependencies: "@types/prop-types" "*" @@ -737,12 +789,12 @@ "@types/scheduler@*": version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== "@types/styled-components@5.1.11": version "5.1.11" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.11.tgz#a3a1bc0f2cdad7318d8ce219ee507e6b353503b5" + resolved "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.11.tgz" integrity sha512-u8g3bSw9KUiZY+S++gh+LlURGraqBe3MC5I5dygrNjGDHWWQfsmZZRTJ9K9oHU2CqWtxChWmJkDI/gp+TZPQMw== dependencies: "@types/hoist-non-react-statics" "*" @@ -751,26 +803,26 @@ "@types/styled-system@5.1.12": version "5.1.12" - resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.12.tgz#4f3ca8da3dffe3c5a6cc3b2a97f51b41464c104a" + resolved "https://registry.npmjs.org/@types/styled-system/-/styled-system-5.1.12.tgz" integrity sha512-7x4BYKKfK9QewfsFC2x5r9BK/OrfX+JF/1P21jKPMHruawDw9gvG7bTZgTVk6YkzDO2JUlsk4i8hdiAepAhD0g== dependencies: csstype "^3.0.2" "@types/styled-system__css@5.0.16": version "5.0.16" - resolved "https://registry.yarnpkg.com/@types/styled-system__css/-/styled-system__css-5.0.16.tgz#cae75cef03dfa1020703e842a8b1c14d8f9a8f33" + resolved "https://registry.npmjs.org/@types/styled-system__css/-/styled-system__css-5.0.16.tgz" integrity sha512-Cji5miCIpR27m8yzH6y3cLU6106N4GVyPgUhBQ4nL7VxgoeAtRdAriKdGTnRgJzSpT3HyB7h5G//cDWOl0M1jQ== dependencies: csstype "^3.0.2" "@types/styled-system__theme-get@5.0.1": version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/styled-system__theme-get/-/styled-system__theme-get-5.0.1.tgz#c3884e8f15641603503dc1d49f9d282dce11e5fb" + resolved "https://registry.npmjs.org/@types/styled-system__theme-get/-/styled-system__theme-get-5.0.1.tgz" integrity sha512-+i4VZ5wuYKMU8oKPmUlzc9r2RhpSNOK061Khtrr7X0sOQEcIyhUtrDusuMkp5ZR3D05Xopn3zybTPyUSQkKGAA== "@vitejs/plugin-react@^2.0.1": version "2.0.1" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-2.0.1.tgz#3197c01d8e4a4eb9fed829c7888c467a43aadd4e" + resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.0.1.tgz" integrity sha512-uINzNHmjrbunlFtyVkST6lY1ewSfz/XwLufG0PIqvLGnpk2nOIOa/1CACTDNcKi1/RwaCzJLmsXwm1NsUVV/NA== dependencies: "@babel/core" "^7.18.10" @@ -783,7 +835,7 @@ accepts@~1.3.8: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + 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" @@ -791,34 +843,51 @@ accepts@~1.3.8: ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + 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" ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" anymatch@~3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" +arg@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz" + integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg== + array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +async-lock@^1.1.0: + version "1.4.0" + resolved "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz" + integrity sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ== + +async@^2.1.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + babel-plugin-emotion@^10.0.27: version "10.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz#a1fe3503cff80abfd0bdda14abd2e8e57a79d17d" + resolved "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz" integrity sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA== dependencies: "@babel/helper-module-imports" "^7.0.0" @@ -834,7 +903,7 @@ babel-plugin-emotion@^10.0.27: babel-plugin-macros@^2.0.0: version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz" integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== dependencies: "@babel/runtime" "^7.7.2" @@ -843,7 +912,7 @@ babel-plugin-macros@^2.0.0: "babel-plugin-styled-components@>= 1.12.0": version "2.0.7" - resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz#c81ef34b713f9da2b7d3f5550df0d1e19e798086" + resolved "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz" integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA== dependencies: "@babel/helper-annotate-as-pure" "^7.16.0" @@ -854,27 +923,32 @@ babel-plugin-macros@^2.0.0: babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + resolved "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz" integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + big-integer@^1.6.16: version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== body-parser@1.20.0: version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== dependencies: bytes "3.1.2" @@ -892,7 +966,7 @@ body-parser@1.20.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -900,14 +974,14 @@ brace-expansion@^1.1.7: braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" broadcast-channel@^3.4.1: version "3.7.0" - resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937" + resolved "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz" integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg== dependencies: "@babel/runtime" "^7.7.2" @@ -919,9 +993,17 @@ broadcast-channel@^3.4.1: rimraf "3.0.2" unload "2.2.0" +browserfs@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/browserfs/-/browserfs-1.4.3.tgz#92ffc6063967612daccdb8566d3fc03f521205fb" + integrity sha512-tz8HClVrzTJshcyIu8frE15cjqjcBIu15Bezxsvl/i+6f59iNCN3kznlWjz0FEb3DlnDx3gW5szxeT6D1x0s0w== + dependencies: + async "^2.1.4" + pako "^1.0.4" + browserslist@^4.20.2: version "4.20.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz" integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== dependencies: caniuse-lite "^1.0.30001332" @@ -930,14 +1012,27 @@ browserslist@^4.20.2: node-releases "^2.0.3" picocolors "^1.0.0" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + bytes@3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== call-bind@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -945,22 +1040,22 @@ call-bind@^1.0.0: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelize@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + resolved "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz" integrity sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg== caniuse-lite@^1.0.30001332: version "1.0.30001341" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz#59590c8ffa8b5939cf4161f00827b8873ad72498" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz" integrity sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA== chalk@^2.0.0: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + 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" @@ -969,7 +1064,7 @@ chalk@^2.0.0: chalk@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -977,7 +1072,7 @@ chalk@^4.1.2: chokidar@^3.5.3: version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -992,85 +1087,90 @@ chokidar@^3.5.3: classnames@2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz" integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== classnames@^2.2.6: version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== +clean-git-ref@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz" + integrity sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw== + color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + 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" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + 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" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color2k@1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/color2k/-/color2k-1.2.4.tgz#af34950ac58e23cf224a01cb8dd0c9911a79605e" + resolved "https://registry.npmjs.org/color2k/-/color2k-1.2.4.tgz" integrity sha512-DiwdBwc0BryPFFXoCrW8XQGXl2rEtMToODybxZjKnN5IJXt/tV/FsN02pCK/b7KcWvJEioz3c74lQSmayFvS4Q== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + 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" -content-type@~1.0.4: +content-type@1.0.4, content-type@~1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== convert-source-map@^1.5.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== convert-source-map@^1.7.0: version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= cookie@0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== cosmiconfig@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== dependencies: "@types/parse-json" "^4.0.0" @@ -1079,9 +1179,14 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + create-emotion@^10.0.14, create-emotion@^10.0.27: version "10.0.27" - resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-10.0.27.tgz#cb4fa2db750f6ca6f9a001a33fbf1f6c46789503" + resolved "https://registry.npmjs.org/create-emotion/-/create-emotion-10.0.27.tgz" integrity sha512-fIK73w82HPPn/RsAij7+Zt8eCE8SptcJ3WoRMfxMtjteYxud8GDTKKld7MYwAX2TVhrw29uR1N/bVGxeStHILg== dependencies: "@emotion/cache" "^10.0.27" @@ -1089,9 +1194,27 @@ create-emotion@^10.0.14, create-emotion@^10.0.27: "@emotion/sheet" "0.9.4" "@emotion/utils" "0.11.3" +cross-env@^5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz" + integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ== + dependencies: + cross-spawn "^6.0.5" + +cross-spawn@^6.0.5: + 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" + cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1100,12 +1223,12 @@ cross-spawn@^7.0.3: css-color-keywords@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz" integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= css-to-react-native@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" + resolved "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz" integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== dependencies: camelize "^1.0.0" @@ -1114,56 +1237,78 @@ css-to-react-native@^3.0.0: csstype@^2.5.7: version "2.6.21" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" + resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz" integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== csstype@^3.0.2, csstype@^3.0.5: version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz" integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== +daemonize-process@^1.0.9: + version "1.0.9" + resolved "https://registry.npmjs.org/daemonize-process/-/daemonize-process-1.0.9.tgz" + integrity sha512-YoB+AmcgHIBDVeyfVWSCV90FNk799zX8Uvn7RJTDCD8Y0EMNbSfIKLG961VgchJme2GHmqpXUuV8Rxe2j2L+bw== + debug@2.6.9: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^4.1.0: +debug@^4.1.0, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + deepmerge@4.2.2: version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== depd@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + destroy@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-node@^2.0.4, detect-node@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== +diff3@0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz" + integrity sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g== + diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dom-serializer@^1.0.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" @@ -1172,19 +1317,19 @@ dom-serializer@^1.0.1: domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^4.0.0, domhandler@^4.2.0: version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" domutils@^2.5.2: version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -1193,27 +1338,27 @@ domutils@^2.5.2: dotenv-expand@^8.0.3: version "8.0.3" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-8.0.3.tgz#29016757455bcc748469c83a19b36aaf2b83dd6e" + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz" integrity sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg== dotenv@^16.0.1: version "16.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz" integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.4.118: version "1.4.137" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz#186180a45617283f1c012284458510cd99d6787f" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz" integrity sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA== emotion@^10.0.14: version "10.0.27" - resolved "https://registry.yarnpkg.com/emotion/-/emotion-10.0.27.tgz#f9ca5df98630980a23c819a56262560562e5d75e" + resolved "https://registry.npmjs.org/emotion/-/emotion-10.0.27.tgz" integrity sha512-2xdDzdWWzue8R8lu4G76uWX5WhyQuzATon9LmNeCy/2BHVC6dsEpfhN1a0qhELgtDVdjyEA6J8Y/VlI5ZnaH0g== dependencies: babel-plugin-emotion "^10.0.27" @@ -1221,21 +1366,31 @@ emotion@^10.0.14: encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= entities@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + 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" +es-module-lexer@^0.10.5: + version "0.10.5" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz" + integrity sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw== + +es-module-lexer@^1.0.5: + version "1.1.0" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.1.0.tgz" + integrity sha512-fJg+1tiyEeS8figV+fPcPpm8WqJEflG3yPU0NOm5xMvrNkuiy7HzX/Ljng4Y0hAoiw4/3hQTCFYw+ub8+a2pRA== + esbuild-android-64@0.14.49: version "0.14.49" resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz#9e4682c36dcf6e7b71b73d2a3723a96e0fdc5054" @@ -1268,12 +1423,12 @@ esbuild-darwin-64@0.14.54: esbuild-darwin-arm64@0.14.49: version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz#c04a3a57dad94a972c66a697a68a25aa25947f41" + resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz" integrity sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A== esbuild-darwin-arm64@0.14.54: version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz" integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== esbuild-freebsd-64@0.14.49: @@ -1438,7 +1593,7 @@ esbuild-windows-arm64@0.14.54: esbuild@0.14.54: version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz" integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== optionalDependencies: "@esbuild/linux-loong64" "0.14.54" @@ -1465,7 +1620,7 @@ esbuild@0.14.54: esbuild@^0.14.47: version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.49.tgz#b82834760eba2ddc17b44f05cfcc0aaca2bae492" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz" integrity sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw== optionalDependencies: esbuild-android-64 "0.14.49" @@ -1491,27 +1646,32 @@ esbuild@^0.14.47: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +estree-walker@^2.0.2: + 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== + etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= express@^4.18.1: version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== dependencies: accepts "~1.3.8" @@ -1546,16 +1706,21 @@ express@^4.18.1: utils-merge "1.0.1" vary "~1.1.2" +fast-text-encoding@^1.0.0: + version "1.0.6" + resolved "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz" + integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== + fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + 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" finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -1568,47 +1733,47 @@ finalhandler@1.2.0: find-root@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== focus-visible@5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/focus-visible/-/focus-visible-5.2.0.tgz#3a9e41fccf587bd25dcc2ef045508284f0a4d6b3" + resolved "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.0.tgz" integrity sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ== forwarded@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-intrinsic@^1.0.2: version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== dependencies: function-bind "^1.1.1" @@ -1617,19 +1782,19 @@ get-intrinsic@^1.0.2: git-config-path@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-2.0.0.tgz#62633d61af63af4405a5024efd325762f58a181b" + resolved "https://registry.npmjs.org/git-config-path/-/git-config-path-2.0.0.tgz" integrity sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA== glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@^7.1.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -1641,48 +1806,48 @@ glob@^7.1.3: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.1: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" history@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/history/-/history-5.0.0.tgz#0cabbb6c4bbf835addb874f8259f6d25101efd08" + resolved "https://registry.npmjs.org/history/-/history-5.0.0.tgz" integrity sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg== dependencies: "@babel/runtime" "^7.7.6" hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1: version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" htmlparser2@^6.0.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" @@ -1690,9 +1855,20 @@ htmlparser2@^6.0.0: domutils "^2.5.2" entities "^2.0.0" +http-errors@1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -1703,14 +1879,24 @@ http-errors@2.0.0: iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.4: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + import-fresh@^3.1.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -1718,125 +1904,169 @@ import-fresh@^3.1.0: inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@^1.3.5: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + 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" is-core-module@^2.9.0: version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== dependencies: has "^1.0.3" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isomorphic-git@^1.21.0: + version "1.21.0" + resolved "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.21.0.tgz" + integrity sha512-ZqCAUM63CYepA3fB8H7NVyPSiOkgzIbQ7T+QPrm9xtYgQypN9JUJ5uLMjB5iTfomdJf3mdm6aSxjZwnT6ubvEA== + dependencies: + async-lock "^1.1.0" + clean-git-ref "^2.0.1" + crc-32 "^1.2.0" + diff3 "0.0.3" + ignore "^5.1.4" + minimisted "^2.0.0" + pako "^1.0.10" + pify "^4.0.1" + readable-stream "^3.4.0" + sha.js "^2.4.9" + simple-get "^4.0.1" + +isomorphic-textencoder@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/isomorphic-textencoder/-/isomorphic-textencoder-1.0.1.tgz" + integrity sha512-676hESgHullDdHDsj469hr+7t3i/neBKU9J7q1T4RHaWwLAsaQnywC0D1dIUId0YZ+JtVrShzuBk1soo0+GVcQ== + dependencies: + fast-text-encoding "^1.0.0" + +joycon@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" + integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== + js-sha3@0.8.0: version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + 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== json5@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +just-debounce-it@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/just-debounce-it/-/just-debounce-it-1.1.0.tgz" + integrity sha512-87Nnc0qZKgBZuhFZjYVjSraic0x7zwjhaTMrCKlj0QYKH6lh0KbFzVnfu6LHan03NO7J8ygjeBeD0epejn5Zcg== + +just-once@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/just-once/-/just-once-1.1.0.tgz" + integrity sha512-+rZVpl+6VyTilK7vB/svlMPil4pxqIJZkbnN7DKZTOzyXfun6ZiFeq2Pk4EtCEHZ0VU4EkdFzG8ZK5F3PErcDw== + lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lodash.uniqueid@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.uniqueid/-/lodash.uniqueid-4.0.1.tgz#3268f26a7c88e4f4b1758d679271814e31fa5b26" + resolved "https://registry.npmjs.org/lodash.uniqueid/-/lodash.uniqueid-4.0.1.tgz" integrity sha1-MmjyanyI5PSxdY1nknGBTjH6WyY= -lodash@^4.17.11: +lodash@^4.17.11, lodash@^4.17.14: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + 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" magic-string@^0.26.2: version "0.26.2" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.2.tgz#5331700e4158cd6befda738bb6b0c7b93c0d4432" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz" integrity sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A== dependencies: sourcemap-codec "^1.4.8" match-sorter@^6.0.2: version "6.3.1" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" + resolved "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz" integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== dependencies: "@babel/runtime" "^7.12.5" @@ -1844,139 +2074,187 @@ match-sorter@^6.0.2: media-typer@0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= memoize-one@^5.0.4: version "5.2.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= methods@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +micro-cors@0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/micro-cors/-/micro-cors-0.1.1.tgz" + integrity sha512-6WqIahA5sbQR1Gjexp1VuWGFDKbZZleJb/gy1khNGk18a6iN1FdTcr3Q8twaxkV5H94RjxIBjirYbWCehpMBFw== + +micro@^9.3.3: + version "9.4.1" + resolved "https://registry.npmjs.org/micro/-/micro-9.4.1.tgz" + integrity sha512-Lpjcbp6Y9GJIfewxDfTmu9eW0rt0MGo+Gs1d3yJLFa7mhErtKkCngGhDbA/O1gqUjEwsHh+jWPg8BJ0Bx4AgFA== + dependencies: + arg "4.1.0" + content-type "1.0.4" + raw-body "2.4.1" + microseconds@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" + resolved "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz" integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + 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" mime@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimist@^1.2.5: + version "1.2.7" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + minimist@^1.2.6: version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimisted@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz" + integrity sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA== + dependencies: + minimist "^1.2.5" + ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nano-time@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" + resolved "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz" integrity sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8= dependencies: big-integer "^1.6.16" nanoid@^3.3.4: version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch@^2.6.0: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-releases@^2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz" integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-inspect@^1.9.0: version "1.12.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== oblivious-set@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" + resolved "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz" integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + 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" -once@^1.3.0: +once@^1.3.0, once@^1.3.1: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" +pako@^1.0.10, pako@^1.0.4: + version "1.0.11" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-git-config@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-3.0.0.tgz#4a2de08c7b74a2555efa5ae94d40cd44302a6132" + resolved "https://registry.npmjs.org/parse-git-config/-/parse-git-config-3.0.0.tgz" integrity sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA== dependencies: git-config-path "^2.0.0" @@ -1984,7 +2262,7 @@ parse-git-config@^3.0.0: parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -1994,57 +2272,67 @@ parse-json@^5.0.0: parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-key@^2.0.1: + 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== + path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch-browser@^2.2.6: version "2.2.6" - resolved "https://registry.yarnpkg.com/picomatch-browser/-/picomatch-browser-2.2.6.tgz#e0626204575eb49f019f2f2feac24fc3b53e7a8a" + resolved "https://registry.npmjs.org/picomatch-browser/-/picomatch-browser-2.2.6.tgz" integrity sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.0: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.0, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + postcss-value-parser@^4.0.2: version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.4.14: version "8.4.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz" integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== dependencies: nanoid "^3.3.4" @@ -2053,12 +2341,12 @@ postcss@^8.4.14: prettier@^2.6.2: version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz" integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== prop-types@^15.6.2: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -2067,7 +2355,7 @@ prop-types@^15.6.2: proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + 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" @@ -2075,19 +2363,29 @@ proxy-addr@~2.0.7: qs@6.10.3: version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== dependencies: side-channel "^1.0.4" range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +raw-body@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + raw-body@2.5.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" @@ -2097,7 +2395,7 @@ raw-body@2.5.1: react-diff-viewer@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/react-diff-viewer/-/react-diff-viewer-3.1.1.tgz#21ac9c891193d05a3734bfd6bd54b107ee6d46cc" + resolved "https://registry.npmjs.org/react-diff-viewer/-/react-diff-viewer-3.1.1.tgz" integrity sha512-rmvwNdcClp6ZWdS11m1m01UnBA4OwYaLG/li0dB781e/bQEzsGyj+qewVd6W5ztBwseQ72pO7nwaCcq5jnlzcw== dependencies: classnames "^2.2.6" @@ -2109,7 +2407,7 @@ react-diff-viewer@^3.1.1: react-dom@^18.2.0: version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + 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" @@ -2117,19 +2415,19 @@ react-dom@^18.2.0: react-error-boundary@^3.1.4: version "3.1.4" - resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.4.tgz#255db92b23197108757a888b01e5b729919abde0" + resolved "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz" integrity sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA== dependencies: "@babel/runtime" "^7.12.5" react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-query@^3.39.0: version "3.39.0" - resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.0.tgz#0caca7b0da98e65008bbcd4df0d25618c2100050" + resolved "https://registry.npmjs.org/react-query/-/react-query-3.39.0.tgz" integrity sha512-Od0IkSuS79WJOhzWBx/ys0x13+7wFqgnn64vBqqAAnZ9whocVhl/y1padD5uuZ6EIkXbFbInax0qvY7zGM0thA== dependencies: "@babel/runtime" "^7.5.5" @@ -2138,41 +2436,50 @@ react-query@^3.39.0: react-refresh@^0.14.0: version "0.14.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== react@^18.2.0: version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" +readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" regenerator-runtime@^0.13.4: version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== remove-accents@0.4.2: version "0.4.2" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" + resolved "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz" integrity sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U= resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@^1.12.0, resolve@^1.22.1: version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" @@ -2181,48 +2488,76 @@ resolve@^1.12.0, resolve@^1.22.1: rimraf@3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" +rollup-plugin-esbuild@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-5.0.0.tgz" + integrity sha512-1cRIOHAPh8WQgdQQyyvFdeOdxuiyk+zB5zJ5+YOwrZP4cJ0MT3Fs48pQxrZeyZHcn+klFherytILVfE4aYrneg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + debug "^4.3.4" + es-module-lexer "^1.0.5" + joycon "^3.1.1" + jsonc-parser "^3.2.0" + +rollup-plugin-import-cdn@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/rollup-plugin-import-cdn/-/rollup-plugin-import-cdn-0.2.2.tgz" + integrity sha512-hfHB3ZGUSGcWVx1/GAdrk+wOkPIMaI1Mr41X6Knpi1r9OTvOPw1iIyb7VLdjvKeT/vfM5RkyVSw8890p4QMC2w== + dependencies: + es-module-lexer "^0.10.5" + +rollup-plugin-virtual-fs@^4.0.1-alpha.0: + version "4.0.1-alpha.0" + resolved "https://registry.npmjs.org/rollup-plugin-virtual-fs/-/rollup-plugin-virtual-fs-4.0.1-alpha.0.tgz" + integrity sha512-tQ0SymyiUeA4Xn0nT5eP7gwGMiEewL6qyPvOc3xkaaLRILCr+wqWBQNh2a9SfpaMDJdoRt+68sk9TAhC24ZeVA== + rollup@^2.75.6: version "2.77.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.0.tgz#749eaa5ac09b6baa52acc076bc46613eddfd53f4" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.77.0.tgz" integrity sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g== optionalDependencies: fsevents "~2.3.2" -safe-buffer@5.2.1: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== "safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== scheduler@^0.23.0: version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" +semver@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== send@0.18.0: version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -2241,7 +2576,7 @@ send@0.18.0: serve-static@1.15.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -2249,65 +2584,116 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +sha.js@^2.4.9: + 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" + shallowequal@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== +shebang-command@^1.2.0: + 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" + shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" get-intrinsic "^1.0.2" object-inspect "^1.9.0" +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + source-map-js@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map@^0.5.7: version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== sourcemap-codec@^1.4.8: version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== statuses@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + style-vendorizer@^2.0.0: version "2.2.3" - resolved "https://registry.yarnpkg.com/style-vendorizer/-/style-vendorizer-2.2.3.tgz#e18098fd981c5884c58ff939475fbba74aaf080c" + resolved "https://registry.npmjs.org/style-vendorizer/-/style-vendorizer-2.2.3.tgz" integrity sha512-/VDRsWvQAgspVy9eATN3z6itKTuyg+jW1q6UoTCQCFRqPDw8bi3E1hXIKnGw5LvXS2AQPuJ7Af4auTLYeBOLEg== styled-components@^5.3.5: version "5.3.5" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.5.tgz#a750a398d01f1ca73af16a241dec3da6deae5ec4" + resolved "https://registry.npmjs.org/styled-components/-/styled-components-5.3.5.tgz" integrity sha512-ndETJ9RKaaL6q41B69WudeqLzOpY1A/ET/glXkNZ2T7dPjPqpPCXXQjDFYZWwNnE5co0wX+gTCqx9mfxTmSIPg== dependencies: "@babel/helper-module-imports" "^7.0.0" @@ -2323,7 +2709,7 @@ styled-components@^5.3.5: styled-components@^5.3.6: version "5.3.6" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1" + resolved "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz" integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg== dependencies: "@babel/helper-module-imports" "^7.0.0" @@ -2339,7 +2725,7 @@ styled-components@^5.3.6: styled-system@5.1.5, styled-system@^5.1.5: version "5.1.5" - resolved "https://registry.yarnpkg.com/styled-system/-/styled-system-5.1.5.tgz#e362d73e1dbb5641a2fd749a6eba1263dc85075e" + resolved "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz" integrity sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A== dependencies: "@styled-system/background" "^5.1.2" @@ -2358,43 +2744,58 @@ styled-system@5.1.5, styled-system@^5.1.5: supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + 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" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + 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" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tree-kill@^1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + twind@^0.16.17: version "0.16.17" - resolved "https://registry.yarnpkg.com/twind/-/twind-0.16.17.tgz#ca8434d7570cd4246ea2f9d6269aa597e00730aa" + resolved "https://registry.npmjs.org/twind/-/twind-0.16.17.tgz" integrity sha512-dBKm8+ncJcIALiqBRLxA/krFEwUSjnzR+N73eKgqPtVPJqfLpkajWwKWL5xEpEQ5ypS3ffa0jJjH3/eIeuA3pw== dependencies: csstype "^3.0.5" @@ -2403,7 +2804,7 @@ twind@^0.16.17: type-is@~1.6.18: version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -2411,7 +2812,7 @@ type-is@~1.6.18: unload@2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7" + resolved "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz" integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== dependencies: "@babel/runtime" "^7.6.2" @@ -2419,27 +2820,32 @@ unload@2.2.0: unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= use-sync-external-store@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= vite@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/vite/-/vite-3.0.2.tgz#2a7b4642c53ae066cf724e7e581d6c1fd24e2c32" + resolved "https://registry.npmjs.org/vite/-/vite-3.0.2.tgz" integrity sha512-TAqydxW/w0U5AoL5AsD9DApTvGb2iNbGs3sN4u2VdT1GFkQVUfgUldt+t08TZgi23uIauh1TUOQJALduo9GXqw== dependencies: esbuild "^0.14.47" @@ -2449,19 +2855,39 @@ vite@^3.0.0: optionalDependencies: fsevents "~2.3.2" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= yaml@^1.7.2: version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== From 2c5a6c0b7a68b09af816454d14da1be346e5e1e9 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Tue, 27 Dec 2022 12:31:39 +0100 Subject: [PATCH 02/12] Add esbuild-wasm Signed-off-by: Alexis Rico --- blocks/test-block/Block.tsx | 12 ++- blocks/utils/loadProcess.ts | 11 +++ blocks/utils/useBundler.ts | 124 +++++++++++++++++++++++++++ blocks/utils/useGitRepo.tsx | 49 ++++++++--- package.json | 6 +- yarn.lock | 162 +++++++++++++++++++++++++++++++++++- 6 files changed, 347 insertions(+), 17 deletions(-) create mode 100644 blocks/utils/loadProcess.ts create mode 100644 blocks/utils/useBundler.ts diff --git a/blocks/test-block/Block.tsx b/blocks/test-block/Block.tsx index 9ed6dd4..dfbb3f8 100644 --- a/blocks/test-block/Block.tsx +++ b/blocks/test-block/Block.tsx @@ -2,14 +2,22 @@ import { FileBlockProps } from '@githubnext/blocks'; import { Box } from '@primer/react'; import styled from 'styled-components'; import './Block.css'; -import { useGitRepo } from '../utils/useGitRepo'; +import { useFS, useGitRepo } from '../utils/useGitRepo'; +import { useBundler } from '../utils/useBundler'; export function TestBlock(props: FileBlockProps) { const { context, originalContent } = props; const { owner, repo, path, sha } = context; + const url = `https://github.com/${owner}/${repo}`; + const dir = `/git/${owner}/${repo}`; + + const fs = useFS(); + const { isLoading: cloning } = useGitRepo('clone', { url, dir, singleBranch: true, depth: 1, ref: sha }); + + const { data } = useBundler({ fs, code: originalContent }); - const { isLoading: cloning } = useGitRepo('clone', { url, dir: `/git/${owner}/${repo}` }); + console.log({ cloning, data, originalContent }); return ; } diff --git a/blocks/utils/loadProcess.ts b/blocks/utils/loadProcess.ts new file mode 100644 index 0000000..1cc167c --- /dev/null +++ b/blocks/utils/loadProcess.ts @@ -0,0 +1,11 @@ +declare global { + var process: any; +} + +globalThis.process = { + env: { + NODE_ENV: 'development' + } +}; + +export {}; diff --git a/blocks/utils/useBundler.ts b/blocks/utils/useBundler.ts new file mode 100644 index 0000000..c176667 --- /dev/null +++ b/blocks/utils/useBundler.ts @@ -0,0 +1,124 @@ +import './loadProcess'; + +import { rollup, Plugin } from '@rollup/browser'; +import { UseQueryOptions, useQuery } from '@tanstack/react-query'; +import type { CallbackFsClient } from 'isomorphic-git'; +import { importCdn } from 'rollup-plugin-import-cdn'; +import { build, initialize } from 'esbuild-wasm'; + +const SEARCH_EXTENSIONS = ['/index.tsx', '/index.ts', '/index.js', '.tsx', '.ts', '.json', '.js']; + +function searchFile(vfs: Map, filepath: string, extensions: string[]) { + for (const ext of ['', ...extensions]) { + if (vfs.has(filepath + ext)) { + return filepath + ext; + } + } +} + +const isFileSchema = (id: string) => id.startsWith('file://') || id.startsWith('/'); + +const isRelativePath = (id: string) => stripSchema(id).startsWith('.'); +const stripSchema = (id: string) => id.replace(/^file\\:(\/\/)?/, ''); + +const fileSystem = ({ + fs, + files, + extensions = SEARCH_EXTENSIONS +}: { + fs: CallbackFsClient; + files: Record; + extensions?: string[]; +}) => { + const vfs = new Map(Object.entries(files)); + + return { + name: 'virtual-fs', + resolveId(id: string, importer: string | null) { + const normalized = stripSchema(id); + + // entry point + if (isFileSchema(id) && importer == null) { + return searchFile(vfs, normalized, extensions); + } + + // relative filepath + if (importer && isFileSchema(importer) && isRelativePath(id)) { + const fullpath = id; + const reslovedWithExt = searchFile(vfs, fullpath, extensions); + if (reslovedWithExt) return reslovedWithExt; + console.warn('[rollup-plugin-virtual-fs] can not resolve id: ' + fullpath); + } + }, + load(id: string) { + const real = stripSchema(id); + const ret = vfs.get(real); + if (ret) return ret; + + // load file from fs + const file = fs.readFile(real); + if (file) return file; + } + }; +}; + +type UseBundlerOptions = { + fs: CallbackFsClient; + code: string; +}; + +let myPlugin = { + name: 'example', + setup(build: any) { + build.onResolve({ filter: /.*/ }, (args: any) => { + // here i just replace the prefix './' with '/', + // but normally you have to implement the resolver correctly + return { path: '/' + args.path.replace(/^\.\//, '') }; + }); + build.onLoad({ filter: /.*/ }, (args: any) => { + return { contents: 'console.log("M")', loader: 'default' }; + }); + } +}; + +let initialized = false; + +export function useBundler({ fs, code }: UseBundlerOptions, queryOptions?: UseQueryOptions) { + return useQuery( + ['bundle', code], + async () => { + const input = 'index.ts'; + + /**const bundle = await rollup({ + input, + plugins: [ + importCdn({ fetchImpl: fetch }), + fileSystem({ fs, files: { [input]: code } }), + typescript() + ] as Plugin[] + }); + + const { output } = await bundle.generate({ format: 'esm' }); + + return output;**/ + + if (!initialized) { + initialized = true; + await initialize({ + worker: true, + wasmURL: 'https://www.unpkg.com/esbuild-wasm@0.16.11/esbuild.wasm' + }); + } + + const result = await build({ + entryPoints: [input], + bundle: true, + write: false, + plugins: [myPlugin] + }); + + return result.outputFiles[0].text; + }, + queryOptions as any + ); +} diff --git a/blocks/utils/useGitRepo.tsx b/blocks/utils/useGitRepo.tsx index f992fbc..b42876c 100644 --- a/blocks/utils/useGitRepo.tsx +++ b/blocks/utils/useGitRepo.tsx @@ -1,8 +1,8 @@ import './loadBuffer'; -import { UseQueryOptions, useQuery } from '@tanstack/react-query'; +import { UseQueryOptions, UseQueryResult, useQuery } from '@tanstack/react-query'; import { BFSRequire, configure } from 'browserfs'; -import git, { FsClient } from 'isomorphic-git'; +import git, { CallbackFsClient } from 'isomorphic-git'; import http from 'isomorphic-git/http/web'; import { createContext, useContext, useEffect, useState } from 'react'; import { Values } from './types'; @@ -12,7 +12,7 @@ const GitContext = createContext(null); type GitContextOptions = { corsProxy?: string }; type GitContextState = { - fs: FsClient; + fs: CallbackFsClient; options?: GitContextOptions; }; @@ -20,11 +20,21 @@ type GitMethod = Values<{ [K in keyof typeof git]: typeof git[K] extends (args: any) => Promise ? K : never; }>; +type GitArgs = typeof git[Method] extends (args: infer Args) => Promise + ? Omit + : never; + +type GitResult = typeof git[Method] extends (args: any) => Promise + ? Result extends void + ? null + : Result + : never; + export const useGitRepo = ( method: Method, - args: typeof git[Method] extends (args: infer Args) => Promise ? Omit : never, - queryOptions?: UseQueryOptions Promise ? Result : never> -) => { + args: GitArgs, + queryOptions?: UseQueryOptions> +): UseQueryResult> => { const context = useContext(GitContext); if (!context) { throw new Error('useGitRepo must be used within a GitRepoProvider'); @@ -32,14 +42,22 @@ export const useGitRepo = ( const { fs, options } = context; - return useQuery(['git', method, args], () => git[method]({ ...options, ...args, fs, http } as any), { - enabled: !!fs, - ...(queryOptions as any) - }); + return useQuery( + ['git', method, args], + async () => { + const result = await git[method]({ ...options, ...args, fs, http } as any); + + return result ?? null; + }, + { + enabled: !!fs, + ...(queryOptions as any) + } + ); }; export const GitRepoProvider = ({ children, ...options }: { children: React.ReactNode } & GitContextOptions) => { - const [fs, setFs] = useState(); + const [fs, setFs] = useState(); useEffect(() => { configure({ fs: 'IndexedDB', options: {} }, (e) => { @@ -52,3 +70,12 @@ export const GitRepoProvider = ({ children, ...options }: { children: React.Reac return {children}; }; + +export function useFS() { + const context = useContext(GitContext); + if (!context) { + throw new Error('useFS must be used within a GitRepoProvider'); + } + + return context.fs; +} diff --git a/package.json b/package.json index fbe01a8..a9be50b 100644 --- a/package.json +++ b/package.json @@ -11,17 +11,21 @@ "@isomorphic-git/cors-proxy": "^2.7.1", "@isomorphic-git/lightning-fs": "^4.6.0", "@rollup/browser": "^3.8.1", + "@rollup/plugin-typescript": "^10.0.1", "@rollup/plugin-virtual": "^3.0.1", "@tanstack/react-query": "^4.19.1", "browserfs": "^1.4.3", "buffer": "^6.0.3", + "esbuild-wasm": "^0.16.11", "isomorphic-git": "^1.21.0", "react": "^18.2.0", "react-diff-viewer": "^3.1.1", "react-dom": "^18.2.0", "rollup-plugin-esbuild": "^5.0.0", "rollup-plugin-import-cdn": "^0.2.2", + "rollup-plugin-typescript2": "^0.34.1", "rollup-plugin-virtual-fs": "^4.0.1-alpha.0", - "styled-components": "^5.3.6" + "styled-components": "^5.3.6", + "typescript": "^4.9.4" } } diff --git a/yarn.lock b/yarn.lock index 1d19dab..3d9f6bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -624,11 +624,27 @@ resolved "https://registry.npmjs.org/@rollup/browser/-/browser-3.8.1.tgz" integrity sha512-PGcy4fw7+ENgNoaJRX7K2Is61goyWw+eyw5B5AeuXXpQLmjpk5NpiUKDZV9HgcdXY8iHo/PlnEjAamzYiginhQ== +"@rollup/plugin-typescript@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-10.0.1.tgz#270b515b116ea28320e6bb62451c4767d49072d6" + integrity sha512-wBykxRLlX7EzL8BmUqMqk5zpx2onnmRMSw/l9M1sVfkJvdwfxogZQVNUM9gVMJbjRLDR5H6U0OMOrlDGmIV45A== + dependencies: + "@rollup/pluginutils" "^5.0.1" + resolve "^1.22.1" + "@rollup/plugin-virtual@^3.0.1": version "3.0.1" resolved "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-3.0.1.tgz" integrity sha512-fK8O0IL5+q+GrsMLuACVNk2x21g3yaw+sG2qn16SnUd3IlBsQyvWxLMGHmCmXRMecPjGRSZ/1LmZB4rjQm68og== +"@rollup/pluginutils@^4.1.2": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + "@rollup/pluginutils@^5.0.1": version "5.0.2" resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz" @@ -1129,6 +1145,11 @@ color2k@1.2.4: resolved "https://registry.npmjs.org/color2k/-/color2k-1.2.4.tgz" integrity sha512-DiwdBwc0BryPFFXoCrW8XQGXl2rEtMToODybxZjKnN5IJXt/tV/FsN02pCK/b7KcWvJEioz3c74lQSmayFvS4Q== +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" @@ -1561,6 +1582,11 @@ esbuild-sunos-64@0.14.54: resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== +esbuild-wasm@^0.16.11: + version "0.16.11" + resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.16.11.tgz#dab620fc7fae1c6138ec573cf081899c9a2d7b27" + integrity sha512-9nfwruEYcmtVCu5kPg47OejFe57Rq45s+KpRC08P4PUfhkVOPLKHRP6j4lNR+AxZTv38pL7tAGQcRWzWjxAzZw== + esbuild-windows-32@0.14.49: version "0.14.49" resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz#79198c88ec9bde163c18a6b430c34eab098ec21a" @@ -1659,7 +1685,7 @@ escape-string-regexp@^1.0.5: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -estree-walker@^2.0.2: +estree-walker@^2.0.1, estree-walker@^2.0.2: 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== @@ -1731,11 +1757,28 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" +find-cache-dir@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-root@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + focus-visible@5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.0.tgz" @@ -1751,6 +1794,15 @@ fresh@0.5.2: resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" @@ -1809,6 +1861,11 @@ globals@^11.1.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" @@ -2025,6 +2082,15 @@ jsonc-parser@^3.2.0: resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + just-debounce-it@1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/just-debounce-it/-/just-debounce-it-1.1.0.tgz" @@ -2040,6 +2106,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash.uniqueid@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/lodash.uniqueid/-/lodash.uniqueid-4.0.1.tgz" @@ -2057,6 +2130,13 @@ loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + magic-string@^0.26.2: version "0.26.2" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz" @@ -2064,6 +2144,13 @@ magic-string@^0.26.2: dependencies: sourcemap-codec "^1.4.8" +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + match-sorter@^6.0.2: version "6.3.1" resolved "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz" @@ -2240,6 +2327,25 @@ once@^1.3.0, once@^1.3.1: dependencies: wrappy "1" +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + pako@^1.0.10, pako@^1.0.4: version "1.0.11" resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" @@ -2275,6 +2381,11 @@ parseurl@~1.3.3: resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" @@ -2315,7 +2426,7 @@ picomatch-browser@^2.2.6: resolved "https://registry.npmjs.org/picomatch-browser/-/picomatch-browser-2.2.6.tgz" integrity sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.0, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.0, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -2325,6 +2436,13 @@ pify@^4.0.1: resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + postcss-value-parser@^4.0.2: version "4.2.0" resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" @@ -2511,6 +2629,17 @@ rollup-plugin-import-cdn@^0.2.2: dependencies: es-module-lexer "^0.10.5" +rollup-plugin-typescript2@^0.34.1: + version "0.34.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.34.1.tgz#c457f155a71d133c142689213fce78694e30d0be" + integrity sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw== + dependencies: + "@rollup/pluginutils" "^4.1.2" + find-cache-dir "^3.3.2" + fs-extra "^10.0.0" + semver "^7.3.7" + tslib "^2.4.0" + rollup-plugin-virtual-fs@^4.0.1-alpha.0: version "4.0.1-alpha.0" resolved "https://registry.npmjs.org/rollup-plugin-virtual-fs/-/rollup-plugin-virtual-fs-4.0.1-alpha.0.tgz" @@ -2550,11 +2679,18 @@ semver@^5.5.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + send@0.18.0: version "0.18.0" resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" @@ -2793,6 +2929,11 @@ tree-kill@^1.2.1: resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== +tslib@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + twind@^0.16.17: version "0.16.17" resolved "https://registry.npmjs.org/twind/-/twind-0.16.17.tgz" @@ -2810,6 +2951,16 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typescript@^4.9.4: + version "4.9.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unload@2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz" @@ -2887,6 +3038,11 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml@^1.7.2: version "1.10.2" resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" From 41c3bcc38aec4d831e91f77012e7b3e70aa90915 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Wed, 28 Dec 2022 11:48:26 +0100 Subject: [PATCH 03/12] Update bundler Signed-off-by: Alexis Rico --- blocks/utils/createWorker.ts | 236 ----------------------------------- blocks/utils/useBundler.ts | 104 +++------------ 2 files changed, 18 insertions(+), 322 deletions(-) delete mode 100644 blocks/utils/createWorker.ts diff --git a/blocks/utils/createWorker.ts b/blocks/utils/createWorker.ts deleted file mode 100644 index accfa96..0000000 --- a/blocks/utils/createWorker.ts +++ /dev/null @@ -1,236 +0,0 @@ -function createWorker() { - var code = ` - importScripts('https://cdn.jsdelivr.net/npm/@rollup/browser/dist/rollup.browser.js'); - importScripts('https://unpkg.com/isomorphic-git'); - importScripts('https://unpkg.com/@isomorphic-git/lightning-fs'); - - const SEARCH_EXTENSIONS = [ - "/index.tsx", - "/index.ts", - "/index.js", - ".tsx", - ".ts", - ".json", - ".js", - ]; - - function searchFile( vfs, filepath, extensions ) { - for (const ext of ["", ...extensions]) { - // console.log("searching...", filepath + ext); - if (vfs.has(filepath + ext)) { - return filepath + ext; - } - } - } - - const DEBUG = false; - const log = (...args) => { - if (DEBUG) console.log(...args); - }; - - const isFileSchema = (id) => - id.startsWith("file://") || id.startsWith("/"); - - const isRelativePath = (id) => stripSchema(id).startsWith("."); - const stripSchema = (id) => id.replace(/^file\\:(\\/\\/)?/, ""); - - const virtualFs = ({ - files, - extensions = SEARCH_EXTENSIONS, - memoryOnly = true, - }) => { - - const vfs = new Map(Object.entries(files)); - - return { - name: "virtual-fs", - resolveId(id, importer) { - // const exts = extensions ?; - log("[rollup-plugin-virtual-fs]", id, importer); - const normalized = stripSchema(id); - // entry point - if (isFileSchema(id) && importer == null) { - return searchFile(vfs, normalized, extensions); - } - // relative filepath - if (importer && isFileSchema(importer) && isRelativePath(id)) { - const rawImporter = importer.replace(/^file\\:/, ""); - const fullpath = id; - const reslovedWithExt = searchFile(vfs, fullpath, extensions); - if (reslovedWithExt) return reslovedWithExt; - this.warn('[rollup-plugin-virtual-fs] can not resolve id: ' + fullpath); - } - }, - load(id) { - const real = stripSchema(id); - const ret = vfs.get(real); - if (ret) return ret; - if (memoryOnly) - throw new Error('[virtualFs] ' + id + ' is not found on files'); - }, - }; - }; - - // Convert a value to an Async Iterator -// This will be easier with async generator functions. -function fromValue(value) { - let queue = [value]; - return { - next() { - return Promise.resolve({ done: queue.length === 0, value: queue.pop() }) - }, - return() { - queue = []; - return {} - }, - [Symbol.asyncIterator]() { - return this - }, - } -} - -function getIterator(iterable) { - if (iterable[Symbol.asyncIterator]) { - return iterable[Symbol.asyncIterator]() - } - if (iterable[Symbol.iterator]) { - return iterable[Symbol.iterator]() - } - if (iterable.next) { - return iterable - } - return fromValue(iterable) -} - -// Currently 'for await' upsets my linters. -async function forAwait(iterable, cb) { - const iter = getIterator(iterable); - while (true) { - const { value, done } = await iter.next(); - if (value) await cb(value); - if (done) break - } - if (iter.return) iter.return(); -} - -async function collect(iterable) { - let size = 0; - const buffers = []; - await forAwait(iterable, value => { - buffers.push(value); - size += value.byteLength; - }); - const result = new Uint8Array(size); - let nextIndex = 0; - for (const buffer of buffers) { - result.set(buffer, nextIndex); - nextIndex += buffer.byteLength; - } - return result -} - -// Convert a web ReadableStream (not Node stream!) to an Async Iterator -// adapted from https://jakearchibald.com/2017/async-iterators-and-generators/ -function fromStream(stream) { - // Use native async iteration if it's available. - if (stream[Symbol.asyncIterator]) return stream - const reader = stream.getReader(); - return { - next() { - return reader.read() - }, - return() { - reader.releaseLock(); - return {} - }, - [Symbol.asyncIterator]() { - return this - }, - } -} - - -async function request({ - onProgress, - url, - method = 'GET', - headers = {}, - body, -}) { - // streaming uploads aren't possible yet in the browser - if (body) { - body = await collect(body); - } - const res = await fetch(url, { method, headers, body }); - const iter = - res.body && res.body.getReader - ? fromStream(res.body) - : [new Uint8Array(await res.arrayBuffer())]; - // convert Header object to ordinary JSON - headers = {}; - for (const [key, value] of res.headers.entries()) { - headers[key] = value; - } - return { - url: res.url, - method: res.method, - statusCode: res.status, - statusMessage: res.statusText, - body: iter, - headers: headers, - } -} - - const http = { request }; - - self.onmessage = async function (e) { - try { - const { rollup: runRollup } = rollup; - - const bundle = await runRollup({ - input: '/index.js', - output: { file: 'file://bundle.js' }, - plugins: [virtualFs({ files: { "/index.js": 'const foo = 1; export default foo;' } })] - }); - - const { output } = await bundle.generate({}); - - self.postMessage({ kind:"bundle", data: output[0].code}); - - self.postMessage({ kind:"git", data: null}); - - const fs = new LightningFS('block-tests-fs'); - - await git.clone({ - fs, - http, - dir: '/foo-bar', - url: 'https://github.com/SferaDev/block-tests', - corsProxy: 'https://dev.eyeseetea.com/cors/', - force: true, - }); - - const foo = await fs.promises.readFile('/foo-bar/myadd.test.ts', 'utf8'); - - self.postMessage({ kind:"git", data: foo}); - - self.postMessage({ kind:"done", data: null}); - } catch (e) { - self.postMessage({ kind:"error", data: e}); - } - - // Close the worker - self.close(); - }; - `; - - const blob = new Blob([code], { type: 'application/javascript' }); - const worker = new Worker(URL.createObjectURL(blob)); - - // Test, used in all examples: - worker.onmessage = function (e) { - console.log('Response: ' + e.data.kind, e.data.data); - }; - - worker.postMessage('Test'); -} diff --git a/blocks/utils/useBundler.ts b/blocks/utils/useBundler.ts index c176667..e6ca206 100644 --- a/blocks/utils/useBundler.ts +++ b/blocks/utils/useBundler.ts @@ -1,107 +1,39 @@ import './loadProcess'; -import { rollup, Plugin } from '@rollup/browser'; import { UseQueryOptions, useQuery } from '@tanstack/react-query'; +import { Plugin, build, initialize } from 'esbuild-wasm'; import type { CallbackFsClient } from 'isomorphic-git'; -import { importCdn } from 'rollup-plugin-import-cdn'; -import { build, initialize } from 'esbuild-wasm'; - -const SEARCH_EXTENSIONS = ['/index.tsx', '/index.ts', '/index.js', '.tsx', '.ts', '.json', '.js']; - -function searchFile(vfs: Map, filepath: string, extensions: string[]) { - for (const ext of ['', ...extensions]) { - if (vfs.has(filepath + ext)) { - return filepath + ext; - } - } -} - -const isFileSchema = (id: string) => id.startsWith('file://') || id.startsWith('/'); - -const isRelativePath = (id: string) => stripSchema(id).startsWith('.'); -const stripSchema = (id: string) => id.replace(/^file\\:(\/\/)?/, ''); - -const fileSystem = ({ - fs, - files, - extensions = SEARCH_EXTENSIONS -}: { - fs: CallbackFsClient; - files: Record; - extensions?: string[]; -}) => { - const vfs = new Map(Object.entries(files)); - - return { - name: 'virtual-fs', - resolveId(id: string, importer: string | null) { - const normalized = stripSchema(id); - - // entry point - if (isFileSchema(id) && importer == null) { - return searchFile(vfs, normalized, extensions); - } - - // relative filepath - if (importer && isFileSchema(importer) && isRelativePath(id)) { - const fullpath = id; - const reslovedWithExt = searchFile(vfs, fullpath, extensions); - if (reslovedWithExt) return reslovedWithExt; - console.warn('[rollup-plugin-virtual-fs] can not resolve id: ' + fullpath); - } - }, - load(id: string) { - const real = stripSchema(id); - const ret = vfs.get(real); - if (ret) return ret; - - // load file from fs - const file = fs.readFile(real); - if (file) return file; - } - }; -}; type UseBundlerOptions = { fs: CallbackFsClient; code: string; }; -let myPlugin = { - name: 'example', - setup(build: any) { - build.onResolve({ filter: /.*/ }, (args: any) => { - // here i just replace the prefix './' with '/', - // but normally you have to implement the resolver correctly - return { path: '/' + args.path.replace(/^\.\//, '') }; +const virtualFs = ({ fs, files = {} }: { fs: CallbackFsClient; files?: Record }): Plugin => ({ + name: 'virtual-fs', + setup: (build) => { + const vfs = new Map(Object.entries(files)); + + // TODO: Add proper resolve logic + build.onResolve({ filter: /.*/ }, (args) => { + return { path: args.path }; }); - build.onLoad({ filter: /.*/ }, (args: any) => { - return { contents: 'console.log("M")', loader: 'default' }; + + // TODO: Add CDN loading, fully test relative imports in fs + build.onLoad({ filter: /.*/ }, (args) => { + const file = vfs.get(args.path) ?? fs.readFile(args.path); + if (file) return { contents: file, loader: 'default' }; }); } -}; +}); +const entryPoint = '/__entry.ts'; let initialized = false; export function useBundler({ fs, code }: UseBundlerOptions, queryOptions?: UseQueryOptions) { return useQuery( ['bundle', code], async () => { - const input = 'index.ts'; - - /**const bundle = await rollup({ - input, - plugins: [ - importCdn({ fetchImpl: fetch }), - fileSystem({ fs, files: { [input]: code } }), - typescript() - ] as Plugin[] - }); - - const { output } = await bundle.generate({ format: 'esm' }); - - return output;**/ - if (!initialized) { initialized = true; await initialize({ @@ -111,10 +43,10 @@ export function useBundler({ fs, code }: UseBundlerOptions, queryOptions?: UseQu } const result = await build({ - entryPoints: [input], + entryPoints: [entryPoint], bundle: true, write: false, - plugins: [myPlugin] + plugins: [virtualFs({ fs, files: { [entryPoint]: code } })] }); return result.outputFiles[0].text; From a05b8ab8a95c37fd735a8c68eb2e2c93fcf7ea18 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Fri, 30 Dec 2022 11:29:32 +0100 Subject: [PATCH 04/12] Reorg files Signed-off-by: Alexis Rico --- blocks.config.json | 4 +- blocks/test-block/components/Button.tsx | 7 - blocks/utils/loadProcess.ts | 11 - blocks/utils/useBundler.ts | 56 ---- package.json | 8 +- {blocks => src/blocks}/diff-block/Block.css | 0 {blocks => src/blocks}/diff-block/Block.tsx | 8 +- {blocks => src/blocks}/diff-block/index.tsx | 0 {blocks => src/blocks}/test-block/Block.css | 0 {blocks => src/blocks}/test-block/Block.tsx | 10 +- {blocks => src/blocks}/test-block/index.tsx | 1 + .../diff-block => src}/components/Button.tsx | 0 {blocks => src}/utils/base64.ts | 0 src/utils/fs.ts | 7 + {blocks => src}/utils/loadBuffer.ts | 0 src/utils/loadProcess.ts | 6 + src/utils/path.ts | 244 ++++++++++++++++ {blocks => src}/utils/types.ts | 0 src/utils/useBundler.ts | 122 ++++++++ {blocks => src}/utils/useGitHubData.tsx | 0 {blocks => src}/utils/useGitRepo.tsx | 74 ++++- {blocks => src}/utils/useLocalStorageState.ts | 0 tsconfig.json | 2 +- yarn.lock | 260 ++++++++++-------- 24 files changed, 614 insertions(+), 206 deletions(-) delete mode 100644 blocks/test-block/components/Button.tsx delete mode 100644 blocks/utils/loadProcess.ts delete mode 100644 blocks/utils/useBundler.ts rename {blocks => src/blocks}/diff-block/Block.css (100%) rename {blocks => src/blocks}/diff-block/Block.tsx (95%) rename {blocks => src/blocks}/diff-block/index.tsx (100%) rename {blocks => src/blocks}/test-block/Block.css (100%) rename {blocks => src/blocks}/test-block/Block.tsx (63%) rename {blocks => src/blocks}/test-block/index.tsx (94%) rename {blocks/diff-block => src}/components/Button.tsx (100%) rename {blocks => src}/utils/base64.ts (100%) create mode 100644 src/utils/fs.ts rename {blocks => src}/utils/loadBuffer.ts (100%) create mode 100644 src/utils/loadProcess.ts create mode 100644 src/utils/path.ts rename {blocks => src}/utils/types.ts (100%) create mode 100644 src/utils/useBundler.ts rename {blocks => src}/utils/useGitHubData.tsx (100%) rename {blocks => src}/utils/useGitRepo.tsx (53%) rename {blocks => src}/utils/useLocalStorageState.ts (100%) diff --git a/blocks.config.json b/blocks.config.json index 6cbd1f3..697a75c 100644 --- a/blocks.config.json +++ b/blocks.config.json @@ -4,7 +4,7 @@ "id": "diff-block", "title": "Diff Block", "description": "A diff block", - "entry": "blocks/diff-block/index.tsx", + "entry": "src/blocks/diff-block/index.tsx", "matches": ["*"] }, { @@ -12,7 +12,7 @@ "id": "test-block", "title": "Test Block", "description": "A test block", - "entry": "blocks/test-block/index.tsx", + "entry": "src/blocks/test-block/index.tsx", "matches": ["*"] } ] diff --git a/blocks/test-block/components/Button.tsx b/blocks/test-block/components/Button.tsx deleted file mode 100644 index 8f0972f..0000000 --- a/blocks/test-block/components/Button.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Button as PrimerButton } from '@primer/react'; -import styled from 'styled-components'; - -export const Button = styled(PrimerButton)<{ selected: boolean }>` - background-color: ${(props) => (props.selected ? 'hsla(220,14%,94%,1)' : 'inherit')}; - box-shadow: ${(props) => (props.selected ? 'inset 0 1px 0 rgba(208,215,222,0.2)' : 'none')}; -`; diff --git a/blocks/utils/loadProcess.ts b/blocks/utils/loadProcess.ts deleted file mode 100644 index 1cc167c..0000000 --- a/blocks/utils/loadProcess.ts +++ /dev/null @@ -1,11 +0,0 @@ -declare global { - var process: any; -} - -globalThis.process = { - env: { - NODE_ENV: 'development' - } -}; - -export {}; diff --git a/blocks/utils/useBundler.ts b/blocks/utils/useBundler.ts deleted file mode 100644 index e6ca206..0000000 --- a/blocks/utils/useBundler.ts +++ /dev/null @@ -1,56 +0,0 @@ -import './loadProcess'; - -import { UseQueryOptions, useQuery } from '@tanstack/react-query'; -import { Plugin, build, initialize } from 'esbuild-wasm'; -import type { CallbackFsClient } from 'isomorphic-git'; - -type UseBundlerOptions = { - fs: CallbackFsClient; - code: string; -}; - -const virtualFs = ({ fs, files = {} }: { fs: CallbackFsClient; files?: Record }): Plugin => ({ - name: 'virtual-fs', - setup: (build) => { - const vfs = new Map(Object.entries(files)); - - // TODO: Add proper resolve logic - build.onResolve({ filter: /.*/ }, (args) => { - return { path: args.path }; - }); - - // TODO: Add CDN loading, fully test relative imports in fs - build.onLoad({ filter: /.*/ }, (args) => { - const file = vfs.get(args.path) ?? fs.readFile(args.path); - if (file) return { contents: file, loader: 'default' }; - }); - } -}); - -const entryPoint = '/__entry.ts'; -let initialized = false; - -export function useBundler({ fs, code }: UseBundlerOptions, queryOptions?: UseQueryOptions) { - return useQuery( - ['bundle', code], - async () => { - if (!initialized) { - initialized = true; - await initialize({ - worker: true, - wasmURL: 'https://www.unpkg.com/esbuild-wasm@0.16.11/esbuild.wasm' - }); - } - - const result = await build({ - entryPoints: [entryPoint], - bundle: true, - write: false, - plugins: [virtualFs({ fs, files: { [entryPoint]: code } })] - }); - - return result.outputFiles[0].text; - }, - queryOptions as any - ); -} diff --git a/package.json b/package.json index a9be50b..41133f7 100644 --- a/package.json +++ b/package.json @@ -7,16 +7,16 @@ "build": "blocks build" }, "dependencies": { - "@githubnext/blocks": "^2.3.2", + "@githubnext/blocks": "^2.3.4", "@isomorphic-git/cors-proxy": "^2.7.1", "@isomorphic-git/lightning-fs": "^4.6.0", - "@rollup/browser": "^3.8.1", + "@rollup/browser": "^3.9.0", "@rollup/plugin-typescript": "^10.0.1", "@rollup/plugin-virtual": "^3.0.1", - "@tanstack/react-query": "^4.19.1", + "@tanstack/react-query": "^4.20.4", "browserfs": "^1.4.3", "buffer": "^6.0.3", - "esbuild-wasm": "^0.16.11", + "esbuild-wasm": "^0.16.12", "isomorphic-git": "^1.21.0", "react": "^18.2.0", "react-diff-viewer": "^3.1.1", diff --git a/blocks/diff-block/Block.css b/src/blocks/diff-block/Block.css similarity index 100% rename from blocks/diff-block/Block.css rename to src/blocks/diff-block/Block.css diff --git a/blocks/diff-block/Block.tsx b/src/blocks/diff-block/Block.tsx similarity index 95% rename from blocks/diff-block/Block.tsx rename to src/blocks/diff-block/Block.tsx index da6c7c3..7a80a81 100644 --- a/blocks/diff-block/Block.tsx +++ b/src/blocks/diff-block/Block.tsx @@ -3,10 +3,10 @@ import { ActionList, ActionMenu, Box, ButtonGroup, Text } from '@primer/react'; import ReactDiffViewer, { DiffMethod } from 'react-diff-viewer'; import styled from 'styled-components'; import './Block.css'; -import { Button } from './components/Button'; -import { decode } from '../utils/base64'; -import { useGitHubData } from '../utils/useGitHubData'; -import { useLocalStorageState } from '../utils/useLocalStorageState'; +import { Button } from '../../components/Button'; +import { decode } from '../../utils/base64'; +import { useGitHubData } from '../../utils/useGitHubData'; +import { useLocalStorageState } from '../../utils/useLocalStorageState'; export function DiffBlock(props: FileBlockProps) { const { context, originalContent } = props; diff --git a/blocks/diff-block/index.tsx b/src/blocks/diff-block/index.tsx similarity index 100% rename from blocks/diff-block/index.tsx rename to src/blocks/diff-block/index.tsx diff --git a/blocks/test-block/Block.css b/src/blocks/test-block/Block.css similarity index 100% rename from blocks/test-block/Block.css rename to src/blocks/test-block/Block.css diff --git a/blocks/test-block/Block.tsx b/src/blocks/test-block/Block.tsx similarity index 63% rename from blocks/test-block/Block.tsx rename to src/blocks/test-block/Block.tsx index dfbb3f8..437e45e 100644 --- a/blocks/test-block/Block.tsx +++ b/src/blocks/test-block/Block.tsx @@ -1,21 +1,21 @@ import { FileBlockProps } from '@githubnext/blocks'; import { Box } from '@primer/react'; import styled from 'styled-components'; +import { useBundler } from '../../utils/useBundler'; +import { useFS, useFetchOrCloneRepo } from '../../utils/useGitRepo'; import './Block.css'; -import { useFS, useGitRepo } from '../utils/useGitRepo'; -import { useBundler } from '../utils/useBundler'; export function TestBlock(props: FileBlockProps) { const { context, originalContent } = props; - const { owner, repo, path, sha } = context; + const { owner, repo, sha } = context; const url = `https://github.com/${owner}/${repo}`; const dir = `/git/${owner}/${repo}`; const fs = useFS(); - const { isLoading: cloning } = useGitRepo('clone', { url, dir, singleBranch: true, depth: 1, ref: sha }); + const { isLoading: cloning } = useFetchOrCloneRepo(url, dir, sha); - const { data } = useBundler({ fs, code: originalContent }); + const { data } = useBundler({ fs, baseDir: dir, code: originalContent }, { enabled: !cloning }); console.log({ cloning, data, originalContent }); diff --git a/blocks/test-block/index.tsx b/src/blocks/test-block/index.tsx similarity index 94% rename from blocks/test-block/index.tsx rename to src/blocks/test-block/index.tsx index bd86f15..e9abbae 100644 --- a/blocks/test-block/index.tsx +++ b/src/blocks/test-block/index.tsx @@ -2,6 +2,7 @@ import { FileBlockProps } from '@githubnext/blocks'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { TestBlock } from './Block'; import { GitRepoProvider } from '../utils/useGitRepo'; +import '../utils/loadProcess'; const queryClient = new QueryClient(); diff --git a/blocks/diff-block/components/Button.tsx b/src/components/Button.tsx similarity index 100% rename from blocks/diff-block/components/Button.tsx rename to src/components/Button.tsx diff --git a/blocks/utils/base64.ts b/src/utils/base64.ts similarity index 100% rename from blocks/utils/base64.ts rename to src/utils/base64.ts diff --git a/src/utils/fs.ts b/src/utils/fs.ts new file mode 100644 index 0000000..fb212c1 --- /dev/null +++ b/src/utils/fs.ts @@ -0,0 +1,7 @@ +export type FS = { + readFileSync: (path: string, encoding: string) => string; + writeFileSync: (path: string, data: string, encoding: string) => void; + existsSync: (path: string) => boolean; + mkdirSync: (path: string) => void; + readdirSync: (path: string) => string[]; +}; diff --git a/blocks/utils/loadBuffer.ts b/src/utils/loadBuffer.ts similarity index 100% rename from blocks/utils/loadBuffer.ts rename to src/utils/loadBuffer.ts diff --git a/src/utils/loadProcess.ts b/src/utils/loadProcess.ts new file mode 100644 index 0000000..6de48e4 --- /dev/null +++ b/src/utils/loadProcess.ts @@ -0,0 +1,6 @@ +// @ts-expect-error mocking some node apis +globalThis.process = { env: {}, argv: [], stdout: { write: () => {} }, platform: 'browser' }; +// @ts-expect-error mocking some node apis +globalThis.global = globalThis; + +export {}; diff --git a/src/utils/path.ts b/src/utils/path.ts new file mode 100644 index 0000000..d457477 --- /dev/null +++ b/src/utils/path.ts @@ -0,0 +1,244 @@ +/*-------------------------------------------------------------------------- + +The MIT License (MIT) + +Copyright (c) 2022 Haydn Paterson (sinclair) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +---------------------------------------------------------------------------*/ + +export interface PathObject { + root: string; + dir: string; + base: string; + ext: string; + name: string; +} + +export namespace Path { + const splitPathPattern = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + + /** file path seperator. */ + export const sep: string = '/'; + + /** file path delimitor. */ + export const delimiter: string = ':'; + + /** The current working directory. */ + export const cwd: string = '/'; + + /** Gets the basename of the given path. */ + export function basename(path: string, ext?: string): string { + let f = posixSplitPath(path)[2]; + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; + } + + /** Gets the directory path of the given path. */ + export function dirname(path: string): string { + const result = posixSplitPath(path); + const root = result[0]; + let dir = result[1]; + if (!root && !dir) { + return '.'; + } + if (dir) { + dir = dir.substr(0, dir.length - 1); + } + return root + dir; + } + + /** Gets the file extension of the the given path. */ + export function extname(path: string): string { + return posixSplitPath(path)[3]; + } + + /** Formats the given PathObject into a path string. */ + export function format(pathObject: Partial): string { + if (typeof pathObject !== 'object') { + throw new TypeError(`Parameter 'pathObject' must be an object, not ${typeof pathObject}`); + } + const root = pathObject.root || ''; + if (typeof root !== 'string') { + throw new TypeError(`'pathObject.root' must be a string or undefined, not ${typeof pathObject.root}`); + } + const dir = pathObject.dir ? pathObject.dir + sep : ''; + const base = pathObject.base || ''; + return dir + base; + } + + /** Returns true if the given path is absolute. */ + export function isAbsolute(path: string): boolean { + return path.charAt(0) === '/'; + } + + /** Joins the given path parameters. */ + export function join(...paths: string[]): string { + let path = ''; + for (let i = 0; i < paths.length; i++) { + const segment = paths[i]; + if (typeof segment !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + if (segment) { + if (!path) { + path += segment; + } else { + path += '/' + segment; + } + } + } + return normalize(path); + } + + /** Normalizes the a path. */ + export function normalize(path: string): string { + const absolute = isAbsolute(path); + const trailingSlash = path && path[path.length - 1] === '/'; + path = normalizeArray(path.split('/'), !absolute).join('/'); + if (!path && !absolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (absolute ? '/' : '') + path; + } + + /** Parses the given path into a PathObject. */ + export function parse(path: string): PathObject { + if (typeof path !== 'string') { + throw new TypeError(`Parameter 'pathString' must be a string, not ${typeof path}`); + } + let parts = posixSplitPath(path); + if (!parts || parts.length !== 4) { + throw new TypeError(`Invalid path '${path}'`); + } + parts[1] = parts[1] || ''; + parts[2] = parts[2] || ''; + parts[3] = parts[3] || ''; + return { + root: parts[0], + dir: parts[0] + parts[1].slice(0, -1), + base: parts[2], + ext: parts[3], + name: parts[2].slice(0, parts[2].length - parts[3].length) + }; + } + + /** Solves the relative path for the given 'from' and 'to' paths. */ + export function relative(from: string, to: string): string { + from = resolve(from).substr(1); + to = resolve(to).substr(1); + const fromParts = trimArray(from.split('/')); + const toParts = trimArray(to.split('/')); + const length = Math.min(fromParts.length, toParts.length); + let samePartsLength = length; + for (let i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + let outputParts = []; + for (let i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + } + + /** Resolves the given paths. */ + export function resolve(...paths: string[]): string { + let resolvedPath = ''; + let resolvedAbsolute = false; + for (let i = paths.length - 1; i >= -1 && !resolvedAbsolute; i--) { + let path = i >= 0 ? paths[i] : cwd; + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path[0] === '/'; + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(resolvedPath.split('/'), !resolvedAbsolute).join('/'); + + return (resolvedAbsolute ? '/' : '') + resolvedPath || '.'; + } + + // #region utility + + /** Splits the given path. */ + function posixSplitPath(path: string) { + return splitPathPattern.exec(path)!.slice(1); + } + + // Resolves '.' and '..' elements in a path array with directory names there must be no slashes or device names + // (c:\) in the array (so also no leading and trailing slashes - it does not distinguish relative and absolute paths) + function normalizeArray(parts: string[], allowAboveRoot: boolean): string[] { + const res = []; + for (let i = 0; i < parts.length; i++) { + const p = parts[i]; + if (!p || p === '.') { + continue; + } + if (p === '..') { + if (res.length && res[res.length - 1] !== '..') { + res.pop(); + } else if (allowAboveRoot) { + res.push('..'); + } + } else { + res.push(p); + } + } + return res; + } + + // returns an array with empty elements removed from either end of the input + // array or the original array if no elements need to be removed + function trimArray(array: string[]): string[] { + const lastIndex = array.length - 1; + let start = 0; + for (; start <= lastIndex; start++) { + if (array[start]) break; + } + let end = lastIndex; + for (; end >= 0; end--) { + if (array[end]) break; + } + + if (start === 0 && end === lastIndex) { + return array; + } + if (start > end) { + return []; + } + return array.slice(start, end + 1); + } +} diff --git a/blocks/utils/types.ts b/src/utils/types.ts similarity index 100% rename from blocks/utils/types.ts rename to src/utils/types.ts diff --git a/src/utils/useBundler.ts b/src/utils/useBundler.ts new file mode 100644 index 0000000..af82475 --- /dev/null +++ b/src/utils/useBundler.ts @@ -0,0 +1,122 @@ +import './loadProcess'; + +import { UseQueryOptions, useQuery } from '@tanstack/react-query'; +import { Plugin, build, initialize } from 'esbuild-wasm'; +import { Path } from './path'; +import { FS } from './fs'; + +import packageJson from '../../package.json'; + +type UseBundlerOptions = { + fs: FS; + code: string; + baseDir?: string; +}; + +const virtualFs = ({ + fs, + baseDir = '/', + files = {} +}: { + fs: FS; + baseDir?: string; + files?: Record; +}): Plugin => ({ + name: 'virtual-fs', + setup: (build) => { + console.log('setup', { baseDir, files }); + const vfs = new Map( + Object.entries(files).map(([path, contents]) => [normalizeName(Path.join(baseDir, path)), contents]) + ); + + build.onResolve({ filter: /.*/ }, (args) => { + console.log('onResolve', args); + + switch (args.kind) { + case 'entry-point': { + const path = Path.join(baseDir, normalizeName(entryPoint)); + + return { path }; + } + case 'import-statement': { + const dirname = Path.dirname(args.importer); + const path = Path.join(dirname, args.path); + + return { path }; + } + } + + throw new Error(`Unknown resolve kind: ${args.kind}`); + }); + + // TODO: Add CDN loading, fully test relative imports in fs + build.onLoad({ filter: /.*/ }, async (args) => { + console.log('onLoad', args); + + const extensions = Path.extname(args.path) ? [Path.extname(args.path)] : ['.ts', '.tsx', '.js', '.jsx']; + + for (const ext of extensions) { + const absPathWithExt = stripExt(args.path) + ext; + const loader = getLoader(ext); + + try { + const file = vfs.get(absPathWithExt) ?? (await readFile(fs, absPathWithExt)); + if (file) return { contents: file, loader }; + } catch (e) {} + } + }); + } +}); + +function readFile(fs: FS, path: string) { + return new Promise((resolve, reject) => { + // @ts-ignore + fs.readFile(path, (err, data) => { + if (err) reject(err); + else resolve(data.toString()); + }); + }); +} + +const getLoader = (ext: string) => + ext === '.ts' ? 'ts' : ext === '.tsx' ? 'tsx' : ext === '.js' ? 'js' : ext === '.jsx' ? 'jsx' : 'default'; + +function normalizeName(path: string) { + return '/' + path.replace(/^[\/]*/g, ''); +} + +function stripExt(path: string) { + const i = path.lastIndexOf('.'); + return i !== -1 ? path.slice(0, i) : path; +} + +const entryPoint = '__entry.ts'; +let initialized = false; + +export function useBundler({ fs, baseDir, code }: UseBundlerOptions, queryOptions?: UseQueryOptions) { + return useQuery( + ['bundle', code], + async () => { + if (!initialized) { + initialized = true; + + const wasmVersion = packageJson.dependencies['esbuild-wasm']; + + await initialize({ + worker: true, + wasmURL: `https://www.unpkg.com/esbuild-wasm@${wasmVersion}/esbuild.wasm` + }); + } + + const result = await build({ + entryPoints: [entryPoint], + bundle: true, + write: false, + plugins: [virtualFs({ fs, baseDir, files: { [entryPoint]: code } })] + }); + + return result.outputFiles[0].text; + }, + queryOptions as any + ); +} diff --git a/blocks/utils/useGitHubData.tsx b/src/utils/useGitHubData.tsx similarity index 100% rename from blocks/utils/useGitHubData.tsx rename to src/utils/useGitHubData.tsx diff --git a/blocks/utils/useGitRepo.tsx b/src/utils/useGitRepo.tsx similarity index 53% rename from blocks/utils/useGitRepo.tsx rename to src/utils/useGitRepo.tsx index b42876c..ea088a2 100644 --- a/blocks/utils/useGitRepo.tsx +++ b/src/utils/useGitRepo.tsx @@ -1,18 +1,26 @@ import './loadBuffer'; -import { UseQueryOptions, UseQueryResult, useQuery } from '@tanstack/react-query'; +import { + UseMutationOptions, + UseMutationResult, + UseQueryOptions, + UseQueryResult, + useMutation, + useQuery +} from '@tanstack/react-query'; import { BFSRequire, configure } from 'browserfs'; -import git, { CallbackFsClient } from 'isomorphic-git'; +import git, { CallbackFsClient, FsClient } from 'isomorphic-git'; import http from 'isomorphic-git/http/web'; import { createContext, useContext, useEffect, useState } from 'react'; import { Values } from './types'; +import { FS } from './fs'; const GitContext = createContext(null); type GitContextOptions = { corsProxy?: string }; type GitContextState = { - fs: CallbackFsClient; + fs: FsClient; options?: GitContextOptions; }; @@ -30,7 +38,7 @@ type GitResult = typeof git[Method] extends (args: any : Result : never; -export const useGitRepo = ( +export const useGitRepoQuery = ( method: Method, args: GitArgs, queryOptions?: UseQueryOptions> @@ -56,6 +64,30 @@ export const useGitRepo = ( ); }; +export const useGitRepoMutation = ( + method: Method, + queryOptions?: UseMutationOptions> +): UseMutationResult, any, GitArgs> => { + const context = useContext(GitContext); + if (!context) { + throw new Error('useGitRepo must be used within a GitRepoProvider'); + } + + const { fs, options } = context; + + return useMutation( + async (args: GitArgs) => { + const result = await git[method]({ ...options, ...args, fs, http } as any); + + return result ?? null; + }, + { + enabled: !!fs, + ...(queryOptions as any) + } + ); +}; + export const GitRepoProvider = ({ children, ...options }: { children: React.ReactNode } & GitContextOptions) => { const [fs, setFs] = useState(); @@ -77,5 +109,37 @@ export function useFS() { throw new Error('useFS must be used within a GitRepoProvider'); } - return context.fs; + return context.fs as unknown as FS; +} + +export function useFetchOrCloneRepo(url: string, dir: string, sha: string) { + const context = useContext(GitContext); + if (!context) { + throw new Error('useFetchOrCloneRepo must be used within a GitRepoProvider'); + } + + const { fs, options } = context; + + return useQuery(['git', 'fetchOrClone'], async () => { + try { + await git.listRemotes({ fs, dir }); + } catch (e) { + await git.clone({ ...options, fs, http, dir, url }); + } + + const { fetchHead } = await git.fetch({ + ...options, + fs, + http, + dir, + ref: sha, + depth: 1, + singleBranch: true, + tags: false + }); + + await git.checkout({ ...options, fs, dir, ref: fetchHead ?? sha, force: true }); + + return await git.resolveRef({ fs, dir, ref: 'HEAD' }); + }); } diff --git a/blocks/utils/useLocalStorageState.ts b/src/utils/useLocalStorageState.ts similarity index 100% rename from blocks/utils/useLocalStorageState.ts rename to src/utils/useLocalStorageState.ts diff --git a/tsconfig.json b/tsconfig.json index 8da4cc6..8dc3320 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "./node_modules/@githubnext/blocks/tsconfig.json", - "include": ["./blocks", "blocks/utils"] + "include": ["src", "src/utils"] } diff --git a/yarn.lock b/yarn.lock index 3d9f6bc..0810b14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -431,16 +431,36 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== -"@githubnext/blocks@^2.3.2": - version "2.3.2" - resolved "https://registry.npmjs.org/@githubnext/blocks/-/blocks-2.3.2.tgz" - integrity sha512-ja0zVGdtg8apUwv1d6SaFacWFmG3vMEFYwCuaGvX/gicuBWp1qjPYMvUCe7D1OzdvUf973+ICpsuNVB8JpTsqA== +"@github/combobox-nav@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@github/combobox-nav/-/combobox-nav-2.1.5.tgz#905598cc681e016eddfcd8adcb39e4d81c907577" + integrity sha512-dmG1PuppNKHnBBEcfylWDwj9SSxd/E/qd8mC1G/klQC3s7ps5q6JZ034mwkkG0LKfI+Y+UgEua/ROD776N400w== + +"@github/markdown-toolbar-element@^2.1.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@github/markdown-toolbar-element/-/markdown-toolbar-element-2.1.1.tgz#08a0696be1006b42b6b29560104f1bca20341b06" + integrity sha512-J++rpd5H9baztabJQB82h26jtueOeBRSTqetk9Cri+Lj/s28ndu6Tovn0uHQaOKtBWDobFunk9b5pP5vcqt7cA== + +"@github/paste-markdown@^1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@github/paste-markdown/-/paste-markdown-1.4.2.tgz#aedba0972536c2fc7944931b6e62bd43dc130592" + integrity sha512-ZwSgPyo9nA6TRngXV0QnFT4e5ujeOGxRDWN2aa6qfimz2o2VOsJ9bFGuGvB723nvzq5z9zKr6JWGtvK7MSJj3w== + +"@github/relative-time-element@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@github/relative-time-element/-/relative-time-element-4.1.2.tgz#8cfceb2a8bbb66e145f2fd18330e151f9b47118b" + integrity sha512-34izL9UqcgU2ZkziZVGuxQoCsswLM5jQ7Q7PYZ04GByaFASg8rdyZrLW3SaWzTFghANfr6l00RMBhjPX6PtxNw== + +"@githubnext/blocks@^2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@githubnext/blocks/-/blocks-2.3.4.tgz#44e50b41661dd6f38b7e61a29e7249f3812b4113" + integrity sha512-Kp2KMSYD3jLJEikP499/3LYxUgzAafYru5uVSelZ3cA/FAeBWSoY77g0P4R4Mj7UhgdMOinVj+JEH6GNWyYrig== dependencies: "@loadable/component" "^5.15.0" "@octokit/openapi-types" "^12.11.0" "@octokit/types" "^6.0.0" "@primer/octicons-react" "^17.3.0" - "@primer/react" "^35.2.1" + "@primer/react" "^35.15.1" "@vitejs/plugin-react" "^2.0.1" chalk "^4.1.2" chokidar "^3.5.3" @@ -542,6 +562,11 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@lit-labs/react@1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@lit-labs/react/-/react-1.0.9.tgz#0703ed89fcdfd2766bc71c18ccb6b06c4bbe6019" + integrity sha512-yjkdcciypTIJ6vUXzZJHTAwt2fdATUAfZMkHRbLpbgEnr8OwpwVOQ04me1Y7p5Vwtmcd4GWY0/BQ6G8jUgCK1w== + "@loadable/component@^5.15.0": version "5.15.2" resolved "https://registry.npmjs.org/@loadable/component/-/component-5.15.2.tgz" @@ -563,66 +588,67 @@ dependencies: "@octokit/openapi-types" "^12.11.0" -"@primer/behaviors@1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@primer/behaviors/-/behaviors-1.1.1.tgz" - integrity sha512-wvF1PYjyxKNTr6+5w4uR5Gkz53t1fsRDgKjWxDKk7wmlh0cwiILBo4dDFjjVhWRF1mBSjaIxxJGB4WGaP7ct2Q== - -"@primer/octicons-react@16.1.1": - version "16.1.1" - resolved "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-16.1.1.tgz" - integrity sha512-xCxQ5z23ol7yDuJs85Lc4ARzyoay+b3zOhAKkEMU7chk0xi2hT2OnRP23QUudNNDPTGozX268RGYLexUa6P4xw== +"@primer/behaviors@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@primer/behaviors/-/behaviors-1.3.1.tgz#febae28e5f7824f1fa547389b3ff8563e171da58" + integrity sha512-aMRDUQ350lk0FxtL5gJWPFHHOSSzDbJ6uNJVIt8XSqiGe1pxuW5mVVfrEp1uvzZ0pCHkCdm9fycjnfOeMeIrOQ== "@primer/octicons-react@^17.3.0": version "17.3.0" resolved "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-17.3.0.tgz" integrity sha512-72K4SeDj3WmehiQqVeOS+icvcO5+JHXK12ee3AqbZGqNqgCKdU4zJRKeC7EGMV4lQhoJXbj8OEdppBLa3qFDhw== -"@primer/primitives@7.6.0": - version "7.6.0" - resolved "https://registry.npmjs.org/@primer/primitives/-/primitives-7.6.0.tgz" - integrity sha512-cu28QLjectVf2rT4P7m6zS9v4g4yHtErRuPfsgEWEJhbXVIII6vDBm6elJzYixGpTNxpVtSUNezxUXv16l1ejQ== - -"@primer/react@^35.2.1": - version "35.2.1" - resolved "https://registry.npmjs.org/@primer/react/-/react-35.2.1.tgz" - integrity sha512-aa5N0bGgOWPkUCjW5qqVtAxcaUxWe6pT4TjG6YCfoUjuY/OkngENSoBipXhNNThFfE78z7moP7UwxvxY7JW8mA== - dependencies: - "@primer/behaviors" "1.1.1" - "@primer/octicons-react" "16.1.1" - "@primer/primitives" "7.6.0" - "@radix-ui/react-polymorphic" "0.0.14" - "@react-aria/ssr" "3.1.0" - "@styled-system/css" "5.1.5" - "@styled-system/props" "5.1.5" - "@styled-system/theme-get" "5.1.2" - "@types/styled-components" "5.1.11" - "@types/styled-system" "5.1.12" - "@types/styled-system__css" "5.0.16" - "@types/styled-system__theme-get" "5.0.1" - classnames "2.3.1" - color2k "1.2.4" - deepmerge "4.2.2" - focus-visible "5.2.0" - history "5.0.0" - styled-system "5.1.5" - -"@radix-ui/react-polymorphic@0.0.14": - version "0.0.14" - resolved "https://registry.npmjs.org/@radix-ui/react-polymorphic/-/react-polymorphic-0.0.14.tgz" - integrity sha512-9nsMZEDU3LeIUeHJrpkkhZVxu/9Fc7P2g2I3WR+uA9mTbNC3hGaabi0dV6wg0CfHb+m4nSs1pejbE/5no3MJTA== - -"@react-aria/ssr@3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.1.0.tgz" - integrity sha512-RxqQKmE8sO7TGdrcSlHTcVzMP450hqowtBSd2bBS9oPlcokVkaGq28c3Rwa8ty5ctw4EBCjXqjP7xdcKMGDzug== +"@primer/octicons-react@^17.7.0": + version "17.10.0" + resolved "https://registry.yarnpkg.com/@primer/octicons-react/-/octicons-react-17.10.0.tgz#69753f8b6977cccb733e791c2ffc31c8f09cbfcb" + integrity sha512-6uJeWWPrReHNlGLlsp4bL2rmUr1mmlaKfFNTAkVnzi2Nnp8MmLhGhtdWAktXfFUOll1JF4AacrEK3j91Xq99UQ== + +"@primer/primitives@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@primer/primitives/-/primitives-7.10.0.tgz#de0d9648d484184442583564f02d6600b872fa5f" + integrity sha512-DdLHq21e93R9qDHyRuRpytBLY0Up9IwNWMOUgPNW6lRSng4N4+IdUlLS3Ekbasmxfs8Z8vKS8aezeYovQ5qsxQ== + +"@primer/react@^35.15.1": + version "35.16.0" + resolved "https://registry.yarnpkg.com/@primer/react/-/react-35.16.0.tgz#cb625f36e3d3e92b0fc15e5c7645ec34d170011b" + integrity sha512-vNm4DXagnWaPVzfJqxOJJb3tJm4MAN9upOMtnE/BmFp5jx+e8N0+EQHzpfb1ngcVrKHQCVP3qA+Ry2iKSGDEJg== + dependencies: + "@github/combobox-nav" "^2.1.5" + "@github/markdown-toolbar-element" "^2.1.0" + "@github/paste-markdown" "^1.4.0" + "@github/relative-time-element" "4.1.2" + "@lit-labs/react" "1.0.9" + "@primer/behaviors" "1.3.1" + "@primer/octicons-react" "^17.7.0" + "@primer/primitives" "7.10.0" + "@react-aria/ssr" "^3.1.0" + "@styled-system/css" "^5.1.5" + "@styled-system/props" "^5.1.5" + "@styled-system/theme-get" "^5.1.2" + "@types/styled-components" "^5.1.11" + "@types/styled-system" "^5.1.12" + "@types/styled-system__css" "^5.0.16" + "@types/styled-system__theme-get" "^5.0.1" + classnames "^2.3.1" + color2k "^1.2.4" + deepmerge "^4.2.2" + focus-visible "^5.2.0" + fzy.js "0.4.1" + history "^5.0.0" + react-intersection-observer "9.4.1" + styled-system "^5.1.5" + +"@react-aria/ssr@^3.1.0": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.4.1.tgz#79e8bb621487e8f52890c917d3c734f448ba95e7" + integrity sha512-NmhoilMDyIfQiOSdQgxpVH2tC2u85Y0mVijtBNbI9kcDYLEiW/r6vKYVKtkyU+C4qobXhGMPfZ70PTc0lysSVA== dependencies: - "@babel/runtime" "^7.6.2" + "@swc/helpers" "^0.4.14" -"@rollup/browser@^3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@rollup/browser/-/browser-3.8.1.tgz" - integrity sha512-PGcy4fw7+ENgNoaJRX7K2Is61goyWw+eyw5B5AeuXXpQLmjpk5NpiUKDZV9HgcdXY8iHo/PlnEjAamzYiginhQ== +"@rollup/browser@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@rollup/browser/-/browser-3.9.0.tgz#2da0f376cfac71063c93f9d87b82b1c946361966" + integrity sha512-lHk1lyLu5Ns95FayPc3hyoRrvkpPoy3MWPuokFsKlemGSGZQCOVe6LVhHHoRr5SJQU0Z6OtuqQEbhhZkKFctWQ== "@rollup/plugin-typescript@^10.0.1": version "10.0.1" @@ -682,7 +708,7 @@ dependencies: object-assign "^4.1.1" -"@styled-system/css@5.1.5", "@styled-system/css@^5.1.5": +"@styled-system/css@^5.1.5": version "5.1.5" resolved "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz" integrity sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A== @@ -715,9 +741,9 @@ dependencies: "@styled-system/core" "^5.1.2" -"@styled-system/props@5.1.5": +"@styled-system/props@^5.1.5": version "5.1.5" - resolved "https://registry.npmjs.org/@styled-system/props/-/props-5.1.5.tgz" + resolved "https://registry.yarnpkg.com/@styled-system/props/-/props-5.1.5.tgz#f50bf40e8fc8393726f06cbcd096a39a7d779ce4" integrity sha512-FXhbzq2KueZpGaHxaDm8dowIEWqIMcgsKs6tBl6Y6S0njG9vC8dBMI6WSLDnzMoSqIX3nSKHmOmpzpoihdDewg== dependencies: styled-system "^5.1.5" @@ -736,9 +762,9 @@ dependencies: "@styled-system/core" "^5.1.2" -"@styled-system/theme-get@5.1.2": +"@styled-system/theme-get@^5.1.2": version "5.1.2" - resolved "https://registry.npmjs.org/@styled-system/theme-get/-/theme-get-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/@styled-system/theme-get/-/theme-get-5.1.2.tgz#b40a00a44da63b7a6ed85f73f737c4defecd6049" integrity sha512-afAYdRqrKfNIbVgmn/2Qet1HabxmpRnzhFwttbGr6F/mJ4RDS/Cmn+KHwHvNXangQsWw/5TfjpWV+rgcqqIcJQ== dependencies: "@styled-system/core" "^5.1.2" @@ -758,17 +784,24 @@ "@styled-system/core" "^5.1.2" "@styled-system/css" "^5.1.5" -"@tanstack/query-core@4.19.1": - version "4.19.1" - resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.19.1.tgz" - integrity sha512-Zp0aIose5C8skBzqbVFGk9HJsPtUhRVDVNWIqVzFbGQQgYSeLZMd3Sdb4+EnA5wl1J7X+bre2PJGnQg9x/zHOA== +"@swc/helpers@^0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== + dependencies: + tslib "^2.4.0" -"@tanstack/react-query@^4.19.1": - version "4.19.1" - resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.19.1.tgz" - integrity sha512-5dvHvmc0vrWI03AJugzvKfirxCyCLe+qawrWFCXdu8t7dklIhJ7D5ZhgTypv7mMtIpdHPcECtCiT/+V74wCn2A== +"@tanstack/query-core@4.20.4": + version "4.20.4" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.20.4.tgz#1f7975a2db26a8bc2f382bad8a44cd422c846b17" + integrity sha512-lhLtGVNJDsJ/DyZXrLzekDEywQqRVykgBqTmkv0La32a/RleILXy6JMLBb7UmS3QCatg/F/0N9/5b0i5j6IKcA== + +"@tanstack/react-query@^4.20.4": + version "4.20.4" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.20.4.tgz#562b34fb919adea884eccaba2b5be50e8ba7fb16" + integrity sha512-SJRxx13k/csb9lXAJfycgVA1N/yU/h3bvRNWP0+aHMfMjmbyX82FdoAcckDBbOdEyAupvb0byelNHNeypCFSyA== dependencies: - "@tanstack/query-core" "4.19.1" + "@tanstack/query-core" "4.20.4" use-sync-external-store "^1.2.0" "@types/estree@^1.0.0": @@ -808,33 +841,33 @@ resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== -"@types/styled-components@5.1.11": - version "5.1.11" - resolved "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.11.tgz" - integrity sha512-u8g3bSw9KUiZY+S++gh+LlURGraqBe3MC5I5dygrNjGDHWWQfsmZZRTJ9K9oHU2CqWtxChWmJkDI/gp+TZPQMw== +"@types/styled-components@^5.1.11": + version "5.1.26" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.26.tgz#5627e6812ee96d755028a98dae61d28e57c233af" + integrity sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw== dependencies: "@types/hoist-non-react-statics" "*" "@types/react" "*" csstype "^3.0.2" -"@types/styled-system@5.1.12": - version "5.1.12" - resolved "https://registry.npmjs.org/@types/styled-system/-/styled-system-5.1.12.tgz" - integrity sha512-7x4BYKKfK9QewfsFC2x5r9BK/OrfX+JF/1P21jKPMHruawDw9gvG7bTZgTVk6YkzDO2JUlsk4i8hdiAepAhD0g== +"@types/styled-system@^5.1.12": + version "5.1.15" + resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.15.tgz#075f969cc028a895dba916c07708e2fe828d7077" + integrity sha512-1uls4wipZn8FtYFZ7upRVFDoEeOXTQTs2zuyOZPn02T6rjIxtvj2P2lG5qsxXHhKuKsu3thveCZrtaeLE/ibLg== dependencies: csstype "^3.0.2" -"@types/styled-system__css@5.0.16": - version "5.0.16" - resolved "https://registry.npmjs.org/@types/styled-system__css/-/styled-system__css-5.0.16.tgz" - integrity sha512-Cji5miCIpR27m8yzH6y3cLU6106N4GVyPgUhBQ4nL7VxgoeAtRdAriKdGTnRgJzSpT3HyB7h5G//cDWOl0M1jQ== +"@types/styled-system__css@^5.0.16": + version "5.0.17" + resolved "https://registry.yarnpkg.com/@types/styled-system__css/-/styled-system__css-5.0.17.tgz#ce6778f896f401e15cdbf77091e4eea112a60343" + integrity sha512-QF67UqeDdigjurmckNPCwkYjZriX270ghPiA6f3GqJG6jg7E4hcq7eGtdYh/DNivMz8sklBfT8y7r5brkCr7QA== dependencies: csstype "^3.0.2" -"@types/styled-system__theme-get@5.0.1": - version "5.0.1" - resolved "https://registry.npmjs.org/@types/styled-system__theme-get/-/styled-system__theme-get-5.0.1.tgz" - integrity sha512-+i4VZ5wuYKMU8oKPmUlzc9r2RhpSNOK061Khtrr7X0sOQEcIyhUtrDusuMkp5ZR3D05Xopn3zybTPyUSQkKGAA== +"@types/styled-system__theme-get@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@types/styled-system__theme-get/-/styled-system__theme-get-5.0.2.tgz#ebd5bb465f1aaa24c729ebb09fdfa6ead01d2106" + integrity sha512-tvGRyzADAn2qQ8Z/fw9YOBTL1EttDQ0zrmHq/N+/K/9tF1l2lsZ9334hls1zie32FCxjPJEhzzXVHxKwqXslog== "@vitejs/plugin-react@^2.0.1": version "2.0.1" @@ -1101,14 +1134,9 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -classnames@2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== - -classnames@^2.2.6: +classnames@^2.2.6, classnames@^2.3.1: version "2.3.2" - resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== clean-git-ref@^2.0.1: @@ -1140,10 +1168,10 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color2k@1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/color2k/-/color2k-1.2.4.tgz" - integrity sha512-DiwdBwc0BryPFFXoCrW8XQGXl2rEtMToODybxZjKnN5IJXt/tV/FsN02pCK/b7KcWvJEioz3c74lQSmayFvS4Q== +color2k@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/color2k/-/color2k-1.2.5.tgz#3d8f08d213170f781fb6270424454dd3c0197b02" + integrity sha512-G39qNMGyM/fhl8hcy1YqpfXzQ810zSGyiJAgdMFlreCI7Hpwu3Jpu4tuBM/Oxu1Bek1FwyaBbtrtdkTr4HDhLA== commondir@^1.0.1: version "1.0.1" @@ -1292,9 +1320,9 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -deepmerge@4.2.2: +deepmerge@^4.2.2: version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== depd@2.0.0: @@ -1582,10 +1610,10 @@ esbuild-sunos-64@0.14.54: resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== -esbuild-wasm@^0.16.11: - version "0.16.11" - resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.16.11.tgz#dab620fc7fae1c6138ec573cf081899c9a2d7b27" - integrity sha512-9nfwruEYcmtVCu5kPg47OejFe57Rq45s+KpRC08P4PUfhkVOPLKHRP6j4lNR+AxZTv38pL7tAGQcRWzWjxAzZw== +esbuild-wasm@^0.16.12: + version "0.16.12" + resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.16.12.tgz#6a3bd09d797b7fcd6f226c2d6faba241efa98978" + integrity sha512-Vc+C9dLocMqwcgTG0HO5b6MKgcoJS/y8Y6IwQbFKu6zj+ZmsJYqEBT+KNfxe0gES/je0GbyDU4VawlcYCXYrDQ== esbuild-windows-32@0.14.49: version "0.14.49" @@ -1779,9 +1807,9 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" -focus-visible@5.2.0: +focus-visible@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/focus-visible/-/focus-visible-5.2.0.tgz#3a9e41fccf587bd25dcc2ef045508284f0a4d6b3" integrity sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ== forwarded@0.2.0: @@ -1818,6 +1846,11 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +fzy.js@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/fzy.js/-/fzy.js-0.4.1.tgz#695bf87cc0bbdda9cbcf22bc318a74c4aca6b758" + integrity sha512-4sPVXf+9oGhzg2tYzgWe4hgAY0wEbkqeuKVEgdnqX8S8VcLosQsDjb0jV+f5uoQlf8INWId1w0IGoufAoik1TA== + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" @@ -1888,10 +1921,10 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -history@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/history/-/history-5.0.0.tgz" - integrity sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg== +history@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== dependencies: "@babel/runtime" "^7.7.6" @@ -2538,6 +2571,11 @@ react-error-boundary@^3.1.4: dependencies: "@babel/runtime" "^7.12.5" +react-intersection-observer@9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.4.1.tgz#4ccb21e16acd0b9cf5b28d275af7055bef878f6b" + integrity sha512-IXpIsPe6BleFOEHKzKh5UjwRUaz/JYS0lT/HPsupWEQou2hDqjhLMStc5zyE3eQVT4Fk3FufM8Fw33qW1uyeiw== + react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" @@ -2859,7 +2897,7 @@ styled-components@^5.3.6: shallowequal "^1.1.0" supports-color "^5.5.0" -styled-system@5.1.5, styled-system@^5.1.5: +styled-system@^5.1.5: version "5.1.5" resolved "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz" integrity sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A== From bbecfa9a6a9cd710a168417191c9f50ec3e4d569 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Fri, 30 Dec 2022 11:52:37 +0100 Subject: [PATCH 05/12] Reorder files Signed-off-by: Alexis Rico --- blocks.config.json | 4 ++-- {src/blocks => blocks}/diff-block/Block.css | 0 {src/blocks => blocks}/diff-block/Block.tsx | 0 {src/blocks => blocks}/diff-block/index.tsx | 0 {src/blocks => blocks}/test-block/Block.css | 0 {src/blocks => blocks}/test-block/Block.tsx | 22 +++++++++++--------- {src/blocks => blocks}/test-block/index.tsx | 0 {src/components => components}/Button.tsx | 0 package.json | 1 + tsconfig.json | 2 +- {src/utils => utils}/base64.ts | 0 {src/utils => utils}/fs.ts | 0 {src/utils => utils}/loadBuffer.ts | 0 {src/utils => utils}/loadProcess.ts | 0 {src/utils => utils}/path.ts | 0 {src/utils => utils}/types.ts | 0 {src/utils => utils}/useBundler.ts | 0 {src/utils => utils}/useGitHubData.tsx | 0 {src/utils => utils}/useGitRepo.tsx | 0 {src/utils => utils}/useLocalStorageState.ts | 0 yarn.lock | 5 +++++ 21 files changed, 21 insertions(+), 13 deletions(-) rename {src/blocks => blocks}/diff-block/Block.css (100%) rename {src/blocks => blocks}/diff-block/Block.tsx (100%) rename {src/blocks => blocks}/diff-block/index.tsx (100%) rename {src/blocks => blocks}/test-block/Block.css (100%) rename {src/blocks => blocks}/test-block/Block.tsx (54%) rename {src/blocks => blocks}/test-block/index.tsx (100%) rename {src/components => components}/Button.tsx (100%) rename {src/utils => utils}/base64.ts (100%) rename {src/utils => utils}/fs.ts (100%) rename {src/utils => utils}/loadBuffer.ts (100%) rename {src/utils => utils}/loadProcess.ts (100%) rename {src/utils => utils}/path.ts (100%) rename {src/utils => utils}/types.ts (100%) rename {src/utils => utils}/useBundler.ts (100%) rename {src/utils => utils}/useGitHubData.tsx (100%) rename {src/utils => utils}/useGitRepo.tsx (100%) rename {src/utils => utils}/useLocalStorageState.ts (100%) diff --git a/blocks.config.json b/blocks.config.json index 697a75c..6cbd1f3 100644 --- a/blocks.config.json +++ b/blocks.config.json @@ -4,7 +4,7 @@ "id": "diff-block", "title": "Diff Block", "description": "A diff block", - "entry": "src/blocks/diff-block/index.tsx", + "entry": "blocks/diff-block/index.tsx", "matches": ["*"] }, { @@ -12,7 +12,7 @@ "id": "test-block", "title": "Test Block", "description": "A test block", - "entry": "src/blocks/test-block/index.tsx", + "entry": "blocks/test-block/index.tsx", "matches": ["*"] } ] diff --git a/src/blocks/diff-block/Block.css b/blocks/diff-block/Block.css similarity index 100% rename from src/blocks/diff-block/Block.css rename to blocks/diff-block/Block.css diff --git a/src/blocks/diff-block/Block.tsx b/blocks/diff-block/Block.tsx similarity index 100% rename from src/blocks/diff-block/Block.tsx rename to blocks/diff-block/Block.tsx diff --git a/src/blocks/diff-block/index.tsx b/blocks/diff-block/index.tsx similarity index 100% rename from src/blocks/diff-block/index.tsx rename to blocks/diff-block/index.tsx diff --git a/src/blocks/test-block/Block.css b/blocks/test-block/Block.css similarity index 100% rename from src/blocks/test-block/Block.css rename to blocks/test-block/Block.css diff --git a/src/blocks/test-block/Block.tsx b/blocks/test-block/Block.tsx similarity index 54% rename from src/blocks/test-block/Block.tsx rename to blocks/test-block/Block.tsx index 437e45e..b72da2d 100644 --- a/src/blocks/test-block/Block.tsx +++ b/blocks/test-block/Block.tsx @@ -1,8 +1,7 @@ import { FileBlockProps } from '@githubnext/blocks'; import { Box } from '@primer/react'; +import { Panel, PanelGroup, PanelResizeHandle } from 'react-resizable-panels'; import styled from 'styled-components'; -import { useBundler } from '../../utils/useBundler'; -import { useFS, useFetchOrCloneRepo } from '../../utils/useGitRepo'; import './Block.css'; export function TestBlock(props: FileBlockProps) { @@ -12,14 +11,17 @@ export function TestBlock(props: FileBlockProps) { const url = `https://github.com/${owner}/${repo}`; const dir = `/git/${owner}/${repo}`; - const fs = useFS(); - const { isLoading: cloning } = useFetchOrCloneRepo(url, dir, sha); - - const { data } = useBundler({ fs, baseDir: dir, code: originalContent }, { enabled: !cloning }); - - console.log({ cloning, data, originalContent }); - - return ; + return ( + + + + + + + {originalContent} + + + ); } const Container = styled(Box)` diff --git a/src/blocks/test-block/index.tsx b/blocks/test-block/index.tsx similarity index 100% rename from src/blocks/test-block/index.tsx rename to blocks/test-block/index.tsx diff --git a/src/components/Button.tsx b/components/Button.tsx similarity index 100% rename from src/components/Button.tsx rename to components/Button.tsx diff --git a/package.json b/package.json index 41133f7..2aa189b 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "react": "^18.2.0", "react-diff-viewer": "^3.1.1", "react-dom": "^18.2.0", + "react-resizable-panels": "^0.0.23", "rollup-plugin-esbuild": "^5.0.0", "rollup-plugin-import-cdn": "^0.2.2", "rollup-plugin-typescript2": "^0.34.1", diff --git a/tsconfig.json b/tsconfig.json index 8dc3320..472d725 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "./node_modules/@githubnext/blocks/tsconfig.json", - "include": ["src", "src/utils"] + "include": ["blocks", "components", "utils"] } diff --git a/src/utils/base64.ts b/utils/base64.ts similarity index 100% rename from src/utils/base64.ts rename to utils/base64.ts diff --git a/src/utils/fs.ts b/utils/fs.ts similarity index 100% rename from src/utils/fs.ts rename to utils/fs.ts diff --git a/src/utils/loadBuffer.ts b/utils/loadBuffer.ts similarity index 100% rename from src/utils/loadBuffer.ts rename to utils/loadBuffer.ts diff --git a/src/utils/loadProcess.ts b/utils/loadProcess.ts similarity index 100% rename from src/utils/loadProcess.ts rename to utils/loadProcess.ts diff --git a/src/utils/path.ts b/utils/path.ts similarity index 100% rename from src/utils/path.ts rename to utils/path.ts diff --git a/src/utils/types.ts b/utils/types.ts similarity index 100% rename from src/utils/types.ts rename to utils/types.ts diff --git a/src/utils/useBundler.ts b/utils/useBundler.ts similarity index 100% rename from src/utils/useBundler.ts rename to utils/useBundler.ts diff --git a/src/utils/useGitHubData.tsx b/utils/useGitHubData.tsx similarity index 100% rename from src/utils/useGitHubData.tsx rename to utils/useGitHubData.tsx diff --git a/src/utils/useGitRepo.tsx b/utils/useGitRepo.tsx similarity index 100% rename from src/utils/useGitRepo.tsx rename to utils/useGitRepo.tsx diff --git a/src/utils/useLocalStorageState.ts b/utils/useLocalStorageState.ts similarity index 100% rename from src/utils/useLocalStorageState.ts rename to utils/useLocalStorageState.ts diff --git a/yarn.lock b/yarn.lock index 0810b14..9da0d43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2595,6 +2595,11 @@ react-refresh@^0.14.0: resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== +react-resizable-panels@^0.0.23: + version "0.0.23" + resolved "https://registry.yarnpkg.com/react-resizable-panels/-/react-resizable-panels-0.0.23.tgz#416cde555df4bd8bb75ee39a8236ff09b45e7576" + integrity sha512-5uu+B9Zl81/01H0JyMjHr493at20EZ09+NOnt5P7+m8MPThefaU4D5vzT4rC9nJXDBSIkYOk1bk0HK/EmKi30A== + react@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" From 77f53c1feb308b9a68ab706dfba258e08df07fb0 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Fri, 30 Dec 2022 12:34:39 +0100 Subject: [PATCH 06/12] Clean-up Signed-off-by: Alexis Rico --- blocks/test-block/Block.tsx | 13 ++++++++++--- blocks/test-block/index.tsx | 4 ++-- utils/fs.ts | 18 +++++++++++------- utils/useBundler.ts | 20 +++++--------------- utils/useGitRepo.tsx | 25 +++++++++++++++++++++++-- 5 files changed, 51 insertions(+), 29 deletions(-) diff --git a/blocks/test-block/Block.tsx b/blocks/test-block/Block.tsx index b72da2d..b0302e7 100644 --- a/blocks/test-block/Block.tsx +++ b/blocks/test-block/Block.tsx @@ -3,14 +3,21 @@ import { Box } from '@primer/react'; import { Panel, PanelGroup, PanelResizeHandle } from 'react-resizable-panels'; import styled from 'styled-components'; import './Block.css'; +import { useFetchOrCloneRepo, useFile } from '../../utils/useGitRepo'; export function TestBlock(props: FileBlockProps) { - const { context, originalContent } = props; - const { owner, repo, sha } = context; + const { + context: { owner, repo, sha, path } + } = props; const url = `https://github.com/${owner}/${repo}`; const dir = `/git/${owner}/${repo}`; + const { isLoading } = useFetchOrCloneRepo(url, dir, sha); + const { data } = useFile(`${dir}/${path}`, { enabled: !isLoading }); + + console.log('data', data, `${dir}/${path}`); + return ( @@ -18,7 +25,7 @@ export function TestBlock(props: FileBlockProps) { - {originalContent} + {data} ); diff --git a/blocks/test-block/index.tsx b/blocks/test-block/index.tsx index e9abbae..b2abca8 100644 --- a/blocks/test-block/index.tsx +++ b/blocks/test-block/index.tsx @@ -1,8 +1,8 @@ import { FileBlockProps } from '@githubnext/blocks'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { TestBlock } from './Block'; -import { GitRepoProvider } from '../utils/useGitRepo'; -import '../utils/loadProcess'; +import { GitRepoProvider } from '../../utils/useGitRepo'; +import '../../utils/loadProcess'; const queryClient = new QueryClient(); diff --git a/utils/fs.ts b/utils/fs.ts index fb212c1..0aaf2d9 100644 --- a/utils/fs.ts +++ b/utils/fs.ts @@ -1,7 +1,11 @@ -export type FS = { - readFileSync: (path: string, encoding: string) => string; - writeFileSync: (path: string, data: string, encoding: string) => void; - existsSync: (path: string) => boolean; - mkdirSync: (path: string) => void; - readdirSync: (path: string) => string[]; -}; +import { FsClient } from 'isomorphic-git'; + +export function readFile(fs: FsClient, path: string) { + return new Promise((resolve, reject) => { + // @ts-ignore + fs.readFile(path, (err, data) => { + if (err) reject(err); + else resolve(data.toString()); + }); + }); +} diff --git a/utils/useBundler.ts b/utils/useBundler.ts index af82475..36b6999 100644 --- a/utils/useBundler.ts +++ b/utils/useBundler.ts @@ -2,13 +2,13 @@ import './loadProcess'; import { UseQueryOptions, useQuery } from '@tanstack/react-query'; import { Plugin, build, initialize } from 'esbuild-wasm'; +import { FsClient } from 'isomorphic-git'; +import packageJson from '../package.json'; +import { readFile } from './fs'; import { Path } from './path'; -import { FS } from './fs'; - -import packageJson from '../../package.json'; type UseBundlerOptions = { - fs: FS; + fs: FsClient; code: string; baseDir?: string; }; @@ -18,7 +18,7 @@ const virtualFs = ({ baseDir = '/', files = {} }: { - fs: FS; + fs: FsClient; baseDir?: string; files?: Record; }): Plugin => ({ @@ -68,16 +68,6 @@ const virtualFs = ({ } }); -function readFile(fs: FS, path: string) { - return new Promise((resolve, reject) => { - // @ts-ignore - fs.readFile(path, (err, data) => { - if (err) reject(err); - else resolve(data.toString()); - }); - }); -} - const getLoader = (ext: string) => ext === '.ts' ? 'ts' : ext === '.tsx' ? 'tsx' : ext === '.js' ? 'js' : ext === '.jsx' ? 'jsx' : 'default'; diff --git a/utils/useGitRepo.tsx b/utils/useGitRepo.tsx index ea088a2..9c12362 100644 --- a/utils/useGitRepo.tsx +++ b/utils/useGitRepo.tsx @@ -13,7 +13,7 @@ import git, { CallbackFsClient, FsClient } from 'isomorphic-git'; import http from 'isomorphic-git/http/web'; import { createContext, useContext, useEffect, useState } from 'react'; import { Values } from './types'; -import { FS } from './fs'; +import { readFile } from './fs'; const GitContext = createContext(null); @@ -109,7 +109,28 @@ export function useFS() { throw new Error('useFS must be used within a GitRepoProvider'); } - return context.fs as unknown as FS; + return context.fs; +} + +export function useFile(path: string, queryOptions?: UseQueryOptions) { + const context = useContext(GitContext); + if (!context) { + throw new Error('useFile must be used within a GitRepoProvider'); + } + + const { fs } = context; + + return useQuery( + ['fs', 'readFile', path], + async () => { + try { + return await readFile(fs, path); + } catch (e) { + return null; + } + }, + queryOptions as any + ); } export function useFetchOrCloneRepo(url: string, dir: string, sha: string) { From 584ef0ec73551668d7abcbe3f03442a5946f9a66 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Fri, 30 Dec 2022 12:38:11 +0100 Subject: [PATCH 07/12] Add IDE block Signed-off-by: Alexis Rico --- blocks.config.json | 8 + blocks/ide-block/Block.css | 3 + blocks/ide-block/Block.tsx | 357 ++++++++++++++++++++++++++++++++ blocks/ide-block/index.tsx | 13 ++ package.json | 8 +- yarn.lock | 406 ++++++++++++++++++++++++++++++++++++- 6 files changed, 787 insertions(+), 8 deletions(-) create mode 100644 blocks/ide-block/Block.css create mode 100644 blocks/ide-block/Block.tsx create mode 100644 blocks/ide-block/index.tsx diff --git a/blocks.config.json b/blocks.config.json index 6cbd1f3..d449cfa 100644 --- a/blocks.config.json +++ b/blocks.config.json @@ -14,5 +14,13 @@ "description": "A test block", "entry": "blocks/test-block/index.tsx", "matches": ["*"] + }, + { + "type": "file", + "id": "ide-block", + "title": "IDE Block", + "description": "A IDE block", + "entry": "blocks/ide-block/index.tsx", + "matches": ["*"] } ] diff --git a/blocks/ide-block/Block.css b/blocks/ide-block/Block.css new file mode 100644 index 0000000..8ee7ba5 --- /dev/null +++ b/blocks/ide-block/Block.css @@ -0,0 +1,3 @@ +pre { + background: papayawhip; +} diff --git a/blocks/ide-block/Block.tsx b/blocks/ide-block/Block.tsx new file mode 100644 index 0000000..7f5f31c --- /dev/null +++ b/blocks/ide-block/Block.tsx @@ -0,0 +1,357 @@ +import './index.css'; + +import { FileBlockProps, FileContext, getLanguageFromFilename } from '@githubnext/blocks'; +import './index.css'; +import Editor, { useMonaco, Monaco } from '@monaco-editor/react'; +import { CancellationToken, editor, IMarkdownString, languages, Position, Uri, IRange } from 'monaco-editor'; +import { useEffect } from 'react'; +import { LsifReader, UriTransformer } from '@ionide/lsif-reader'; +import * as lsp from 'vscode-languageserver-types'; + +let getDirName = (file: string) => { + let parts = file.split('/'); + parts.pop(); + return parts.join('/'); +}; + +let pathJoin = (...parts: string[]) => { + let separator = '/'; + let np = parts.map((p) => (p.startsWith(separator) ? p.substring(1) : p)); + return np.join(separator); +}; + +let DEBUG = true; +let logger = DEBUG ? console.log : () => {}; + +const rawUrl = 'https://raw.githubusercontent.com'; +const getUrl = (repo: string, file: string, branch: string) => `${rawUrl}${repo}/${branch}/${file}`; +let lsifReader = new LsifReader(); + +let workspaceRoot = () => { + let wr = lsifReader.getWorkspaceRoot(); + if (wr) { + return wr.endsWith('.toml') ? getDirName(wr) : wr; + } + return undefined; +}; + +const hoverProvider: languages.HoverProvider = { + provideHover: ( + model: editor.ITextModel, + position: Position, + token: any + ): languages.ProviderResult => { + logger('hover', model.uri, position); + let result = lsifReader.hover(model.uri.toString(true), { + line: position.lineNumber - 1, + character: position.column - 1 + }); + if (!result || !result.contents || !result.range) { + return; + } + logger('hover result', result); + + let contents: IMarkdownString[]; + if (typeof result.contents === 'string') { + contents = [{ value: result.contents }]; + } else if ('kind' in result.contents || 'value' in result.contents) { + contents = [{ value: result.contents.value }]; + } else { + contents = result.contents.map((c) => (typeof c === 'string' ? { value: c } : { value: c.value })); + } + + const range = { + startLineNumber: result.range.start.line, + startColumn: result.range.start.character, + endLineNumber: result.range.end.line, + endColumn: result.range.end.character + }; + return { + range, + contents: contents + }; + } +}; + +let mapLocation = (modelUri: Uri, workspaceRoot: string | undefined, l: lsp.Location): languages.Location => { + let range = { + startLineNumber: l.range.start.line + 1, + startColumn: l.range.start.character + 1, + endLineNumber: l.range.end.line + 1, + endColumn: l.range.end.character + 1 + }; + let uri = + workspaceRoot === undefined + ? modelUri + : l.uri.startsWith(workspaceRoot) + ? Uri.file(l.uri.substring(workspaceRoot.length)) + : modelUri; + + return { uri: uri, range: range }; +}; + +let mapRange = (l: any): IRange => { + return { + startLineNumber: l.range.start.line + 1, + startColumn: l.range.start.character + 1, + endLineNumber: l.range.end.line + 1, + endColumn: l.range.end.character + 1 + }; +}; + +let mapDocumentSymbol = (s: any): languages.DocumentSymbol => { + let ds: languages.DocumentSymbol = { + name: s.name, + detail: s.detail, + kind: s.kind, + tags: s.tags, + range: mapRange(s.range), + selectionRange: mapRange(s.selectionRange) + }; + return ds; +}; + +let definitionProvider: languages.DefinitionProvider = { + provideDefinition: ( + model: editor.ITextModel, + position: Position, + token: any + ): languages.ProviderResult => { + let result = lsifReader.definitions(model.uri.toString(true), { + line: position.lineNumber - 1, + character: position.column - 1 + }); + logger('Hover res', result); + if (!result) { + return; + } + + let wr = workspaceRoot(); + + let locations = + result instanceof Array ? result.map((l) => mapLocation(model.uri, wr, l)) : [mapLocation(model.uri, wr, result)]; + + logger('definitionProvider', locations); + return locations; + } +}; + +let documentSymbolProvider: languages.DocumentSymbolProvider = { + provideDocumentSymbols: ( + model: editor.ITextModel, + token: CancellationToken + ): languages.ProviderResult => { + logger('provideDocumentSymbols'); + let symbols = lsifReader.documentSymbols(model.uri.toString(true)); + logger(symbols); + if (!symbols) { + return; + } + + let result = symbols.map((s) => { + return mapDocumentSymbol(s); + }); + + return result; + } +}; + +let referencesProvider: languages.ReferenceProvider = { + provideReferences: ( + model: editor.ITextModel, + position: Position, + context: languages.ReferenceContext, + token: any + ): languages.ProviderResult => { + logger('provideReferences', context); + let result = lsifReader.references( + model.uri.toString(true), + { + line: position.lineNumber - 1, + character: position.column - 1 + }, + context + ); + if (!result) { + return; + } + + let wr = workspaceRoot(); + + let locations = + result instanceof Array ? result.map((l) => mapLocation(model.uri, wr, l)) : [mapLocation(model.uri, wr, result)]; + + logger('REF locations', locations); + return locations; + } +}; + +let highlightProvider: languages.DocumentHighlightProvider = { + provideDocumentHighlights: ( + model: editor.ITextModel, + position: Position, + token: any + ): languages.ProviderResult => { + let result = lsifReader.references( + model.uri.toString(true), + { + line: position.lineNumber - 1, + character: position.column - 1 + }, + { includeDeclaration: true } + ); + if (!result) { + return; + } + + let wr = workspaceRoot(); + let locations = + result instanceof Array ? result.map((l) => mapLocation(model.uri, wr, l)) : [mapLocation(model.uri, wr, result)]; + return locations.map((l) => { + return { + range: l.range, + kind: languages.DocumentHighlightKind.Text + }; + }); + } +}; + +let transformerFactory = (context: FileContext): UriTransformer => { + return { + toDatabase: (_uri) => { + logger('toDatabase', _uri); + let wr = workspaceRoot(); + if (!wr) { + return _uri; + } + let uri = Uri.parse(_uri); + let result = pathJoin(wr, uri.path); + logger('toDatabase', result); + return result; + }, + fromDatabase: (uri) => { + return uri; + } + }; +}; + +let beforeMountHandler = async (monaco: Monaco, context: FileContext) => { + const indexUrl = getUrl('/' + context.owner + '/' + context.repo, 'index.lsif', 'lsif-index'); + let res = await fetch(indexUrl); + let text = await res.text(); + lsifReader.load(text, (wr) => transformerFactory(context)); +}; + +let inited = false; + +export function IDEBlock(props: FileBlockProps) { + const { context, content, metadata, onUpdateMetadata } = props; + const language = Boolean(context.path) + ? context.path.endsWith('.rs') + ? 'rust' + : context.path.endsWith('.cs') + ? 'csharp' + : getLanguageFromFilename(context.path).toLowerCase() + : 'N/A'; + + const monaco: Monaco | null = useMonaco(); + + useEffect(() => { + if (monaco && !inited) { + monaco.languages.registerHoverProvider('*', hoverProvider); + monaco.languages.registerDefinitionProvider('*', definitionProvider); + monaco.languages.registerReferenceProvider('*', referencesProvider); + monaco.languages.registerDocumentSymbolProvider('*', documentSymbolProvider); + monaco.languages.registerDocumentHighlightProvider('*', highlightProvider); + inited = true; + } + }, [monaco]); + + return ( + { + return await beforeMountHandler(monaco, context); + }} + onMount={(e, monaco) => { + logger('onMount', e); + + const editorService = (e as any)._codeEditorService; + const openEditorBase = editorService.openCodeEditor.bind(editorService); + + editorService.openCodeEditor = async (input: any, source: any) => { + const result = await openEditorBase(input, source); + if (result === null) { + logger('Open definition for:', input); + let uri = input.resource as Uri; + + //navigate to input selection on given model + let navigate = (model: editor.ITextModel) => { + e.revealRangeInCenterIfOutsideViewport( + { + startLineNumber: input.options.selection.startLineNumber, + endLineNumber: input.options.selection.endLineNumber, + startColumn: input.options.selection.startColumn, + endColumn: input.options.selection.endColumn + }, + editor.ScrollType.Smooth + ); + let word = model.getWordAtPosition({ + lineNumber: input.options.selection.startLineNumber, + column: input.options.selection.startColumn + }); + if (word) { + e.setSelection( + { + startLineNumber: input.options.selection.startLineNumber, + endLineNumber: input.options.selection.endLineNumber, + startColumn: word.startColumn, + endColumn: word.endColumn + }, + source + ); + } else { + e.setSelection({ + startLineNumber: input.options.selection.startLineNumber, + endLineNumber: input.options.selection.endLineNumber, + startColumn: input.options.selection.startColumn, + endColumn: input.options.selection.endColumn + }), + source; + } + }; + + //Blocks navigation forces reload, I don't think we want that + // let path = uri.path.startsWith("/") + // ? uri.path.substring(1) + // : uri.path; + // props.onNavigateToPath(path); + let model = monaco.editor.getModel(uri); + if (model) { + e.setModel(model); + navigate(model); + } else { + let url = getUrl( + '/' + context.owner + '/' + context.repo, + uri.path, + 'main' //TODO: Context doesn't have branch + ); + let res = await fetch(url); + let text = await res.text(); + let model = monaco.editor.createModel(text, language, uri); + e.setModel(model); + navigate(model); + } + } + return result; // always return the base result + }; + }} + /> + ); +} diff --git a/blocks/ide-block/index.tsx b/blocks/ide-block/index.tsx new file mode 100644 index 0000000..7a5df33 --- /dev/null +++ b/blocks/ide-block/index.tsx @@ -0,0 +1,13 @@ +import { FileBlockProps } from '@githubnext/blocks'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { IDEBlock } from './Block'; + +const queryClient = new QueryClient(); + +export default function (props: FileBlockProps) { + return ( + + + + ); +} diff --git a/package.json b/package.json index 2aa189b..4a87dc9 100644 --- a/package.json +++ b/package.json @@ -8,16 +8,21 @@ }, "dependencies": { "@githubnext/blocks": "^2.3.4", + "@ionide/lsif-reader": "^0.1.2", "@isomorphic-git/cors-proxy": "^2.7.1", "@isomorphic-git/lightning-fs": "^4.6.0", + "@monaco-editor/react": "^4.4.6", "@rollup/browser": "^3.9.0", "@rollup/plugin-typescript": "^10.0.1", "@rollup/plugin-virtual": "^3.0.1", "@tanstack/react-query": "^4.20.4", + "@typescript/vfs": "^1.4.0", "browserfs": "^1.4.3", "buffer": "^6.0.3", "esbuild-wasm": "^0.16.12", "isomorphic-git": "^1.21.0", + "lsif-tsc": "^0.6.0-next.21", + "monaco-editor": "^0.34.1", "react": "^18.2.0", "react-diff-viewer": "^3.1.1", "react-dom": "^18.2.0", @@ -27,6 +32,7 @@ "rollup-plugin-typescript2": "^0.34.1", "rollup-plugin-virtual-fs": "^4.0.1-alpha.0", "styled-components": "^5.3.6", - "typescript": "^4.9.4" + "typescript": "^4.9.4", + "vscode-languageserver-types": "^3.17.2" } } diff --git a/yarn.lock b/yarn.lock index 9da0d43..cce3cb0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -480,6 +480,14 @@ twind "^0.16.17" vite "^3.0.0" +"@ionide/lsif-reader@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@ionide/lsif-reader/-/lsif-reader-0.1.2.tgz#e9d698aff5efc6681d8548f7e6e373686970d570" + integrity sha512-YaK48+9S3NUpQB1E/MWoyLNzrbwCzas8WKVNlCJ/CoiU/dqvllOc+5TUQ9YxilymAKWY6Bj3OoWFfj7vg9OJYQ== + dependencies: + lsif-protocol "^0.5.3" + vscode-languageserver-types "^3.16.0" + "@isomorphic-git/cors-proxy@^2.7.1": version "2.7.1" resolved "https://registry.npmjs.org/@isomorphic-git/cors-proxy/-/cors-proxy-2.7.1.tgz" @@ -576,6 +584,21 @@ hoist-non-react-statics "^3.3.1" react-is "^16.12.0" +"@monaco-editor/loader@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.3.2.tgz#04effbb87052d19cd7d3c9d81c0635490f9bb6d8" + integrity sha512-BTDbpHl3e47r3AAtpfVFTlAi7WXv4UQ/xZmz8atKl4q7epQV5e7+JbigFDViWF71VBi4IIBdcWP57Hj+OWuc9g== + dependencies: + state-local "^1.0.6" + +"@monaco-editor/react@^4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.4.6.tgz#8ae500b0edf85276d860ed702e7056c316548218" + integrity sha512-Gr3uz3LYf33wlFE3eRnta4RxP5FSNxiIV9ENn2D2/rN8KgGAD8ecvcITRtsbbyuOuNkwbuHYxfeaz2Vr+CtyFA== + dependencies: + "@monaco-editor/loader" "^1.3.2" + prop-types "^15.7.2" + "@octokit/openapi-types@^12.11.0": version "12.11.0" resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz" @@ -680,6 +703,11 @@ estree-walker "^2.0.2" picomatch "^2.3.1" +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + "@styled-system/background@^5.1.2": version "5.1.2" resolved "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz" @@ -791,6 +819,13 @@ dependencies: tslib "^2.4.0" +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + "@tanstack/query-core@4.20.4": version "4.20.4" resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.20.4.tgz#1f7975a2db26a8bc2f382bad8a44cd422c846b17" @@ -869,6 +904,13 @@ resolved "https://registry.yarnpkg.com/@types/styled-system__theme-get/-/styled-system__theme-get-5.0.2.tgz#ebd5bb465f1aaa24c729ebb09fdfa6ead01d2106" integrity sha512-tvGRyzADAn2qQ8Z/fw9YOBTL1EttDQ0zrmHq/N+/K/9tF1l2lsZ9334hls1zie32FCxjPJEhzzXVHxKwqXslog== +"@typescript/vfs@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@typescript/vfs/-/vfs-1.4.0.tgz#2d22985c7666c9d4ce26eb025405e6f156aa32b0" + integrity sha512-Pood7yv5YWMIX+yCHo176OnF8WUlKGImFG7XlsuH14Zb1YN5+dYD3uUtS7lqZtsH7tAveNUi2NzdpQCN0yRbaw== + dependencies: + debug "^4.1.1" + "@vitejs/plugin-react@^2.0.1": version "2.0.1" resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.0.1.tgz" @@ -890,6 +932,11 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -897,7 +944,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -1079,6 +1126,19 @@ bytes@3.1.2: resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + call-bind@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" @@ -1144,6 +1204,22 @@ clean-git-ref@^2.0.1: resolved "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz" integrity sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" @@ -1306,13 +1382,20 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@^4.1.0, debug@^4.3.4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" @@ -1320,11 +1403,21 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" @@ -1395,6 +1488,11 @@ dotenv@^16.0.1: resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz" integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + ee-first@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" @@ -1405,6 +1503,11 @@ electron-to-chromium@^1.4.118: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz" integrity sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emotion@^10.0.14: version "10.0.27" resolved "https://registry.npmjs.org/emotion/-/emotion-10.0.27.tgz" @@ -1418,6 +1521,13 @@ encodeurl@~1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + entities@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" @@ -1856,6 +1966,11 @@ gensync@^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== +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-intrinsic@^1.0.2: version "1.1.1" resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" @@ -1865,6 +1980,20 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.1" +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + git-config-path@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/git-config-path/-/git-config-path-2.0.0.tgz" @@ -1894,6 +2023,23 @@ globals@^11.1.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" @@ -1945,6 +2091,11 @@ htmlparser2@^6.0.0: domutils "^2.5.2" entities "^2.0.0" +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + http-errors@1.7.3: version "1.7.3" resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz" @@ -2005,7 +2156,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.5: +ini@^1.3.5, ini@~1.3.0: version "1.3.8" resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -2039,6 +2190,11 @@ is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -2100,6 +2256,11 @@ jsesc@^2.5.1: resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" @@ -2134,6 +2295,20 @@ just-once@1.1.0: resolved "https://registry.npmjs.org/just-once/-/just-once-1.1.0.tgz" integrity sha512-+rZVpl+6VyTilK7vB/svlMPil4pxqIJZkbnN7DKZTOzyXfun6ZiFeq2Pk4EtCEHZ0VU4EkdFzG8ZK5F3PErcDw== +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +latest-version@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" @@ -2163,6 +2338,16 @@ loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2170,6 +2355,32 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lsif-protocol@0.6.0-next.7: + version "0.6.0-next.7" + resolved "https://registry.yarnpkg.com/lsif-protocol/-/lsif-protocol-0.6.0-next.7.tgz#f507a535cf515d90d96dd1a6ba2e0440e6700376" + integrity sha512-P67czn1sCa4EhEFlRJWabieHB2poIuRHRO06mR5lLsTk0HqMrbM9McJaXlAJwOMylaxZ0HPpHrT9ij9BA4tzyw== + dependencies: + vscode-languageserver-protocol "^3.16.0" + +lsif-protocol@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/lsif-protocol/-/lsif-protocol-0.5.3.tgz#233279e8c6fa7801eeb85549319e3933cb1bc7ad" + integrity sha512-zBSB9ixK44jmLiUv8Nwl9bsd/6KFozLML+rXmTU3zqfBmX7QBa6jmvkmzq+0RbUnSNJVOETw1SAOnLnEYePO4Q== + dependencies: + vscode-languageserver-protocol "^3.16.0" + +lsif-tsc@^0.6.0-next.21: + version "0.6.0-next.21" + resolved "https://registry.yarnpkg.com/lsif-tsc/-/lsif-tsc-0.6.0-next.21.tgz#f2b8387faf44d9a6b56a8e5eceaaade5b2f536a4" + integrity sha512-aBEdh2/aZD3osloqS3nQYR/KV6qv1jMbBKPNZ2DwP4Thwm5+kwlwVPehcUlqZXBeR5l3YTTIxOgCG/bOL51ZKA== + dependencies: + latest-version "^5.1.0" + lsif-protocol "0.6.0-next.7" + typescript "https://github.com/dbaeumer/TypeScript/releases/download/4.5.2-lsif.1/lsif-typescript-4.5.2-lsif.1.tgz" + uuid "^8.3.2" + vscode-uri "^3.0.2" + yargs "^17.2.1" + magic-string@^0.26.2: version "0.26.2" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz" @@ -2248,6 +2459,11 @@ mime@1.6.0: resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" @@ -2260,7 +2476,7 @@ minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.7" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== @@ -2277,6 +2493,11 @@ minimisted@^2.0.0: dependencies: minimist "^1.2.5" +monaco-editor@^0.34.1: + version "0.34.1" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.34.1.tgz#1b75c4ad6bc4c1f9da656d740d98e0b850a22f87" + integrity sha512-FKc80TyiMaruhJKKPz5SpJPIjL+dflGvz4CpuThaPMc94AyN7SeC9HQ8hrvaxX7EyHdJcUY5i4D0gNyJj1vSZQ== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -2331,6 +2552,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -2353,13 +2579,18 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -2379,6 +2610,16 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + pako@^1.0.10, pako@^1.0.4: version "1.0.11" resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" @@ -2490,12 +2731,17 @@ postcss@^8.4.14: picocolors "^1.0.0" source-map-js "^1.0.2" +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + prettier@^2.6.2: version "2.6.2" resolved "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz" integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== -prop-types@^15.6.2: +prop-types@^15.6.2, prop-types@^15.7.2: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -2512,6 +2758,14 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + qs@6.10.3: version "6.10.3" resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" @@ -2544,6 +2798,16 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" +rc@1.2.8, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + react-diff-viewer@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/react-diff-viewer/-/react-diff-viewer-3.1.1.tgz" @@ -2628,11 +2892,30 @@ regenerator-runtime@^0.13.4: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +registry-auth-token@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" + integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== + dependencies: + rc "1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + remove-accents@0.4.2: version "0.4.2" resolved "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz" integrity sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U= +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" @@ -2647,6 +2930,13 @@ resolve@^1.12.0, resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + rimraf@3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" @@ -2722,7 +3012,7 @@ semver@^5.5.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -2848,6 +3138,11 @@ sourcemap-codec@^1.4.8: resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +state-local@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" + integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== + statuses@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" @@ -2858,6 +3153,15 @@ statuses@2.0.1: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + 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" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" @@ -2865,6 +3169,18 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + style-vendorizer@^2.0.0: version "2.2.3" resolved "https://registry.npmjs.org/style-vendorizer/-/style-vendorizer-2.2.3.tgz" @@ -2945,6 +3261,11 @@ to-fast-properties@^2.0.0: resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -2999,6 +3320,10 @@ typescript@^4.9.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== +"typescript@https://github.com/dbaeumer/TypeScript/releases/download/4.5.2-lsif.1/lsif-typescript-4.5.2-lsif.1.tgz": + version "4.5.2-lsif.1" + resolved "https://github.com/dbaeumer/TypeScript/releases/download/4.5.2-lsif.1/lsif-typescript-4.5.2-lsif.1.tgz#b8b867d0d388827347be7017d42a56b169b1cd8f" + universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -3017,6 +3342,13 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + use-sync-external-store@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" @@ -3032,6 +3364,11 @@ utils-merge@1.0.1: resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + vary@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" @@ -3049,6 +3386,29 @@ vite@^3.0.0: optionalDependencies: fsevents "~2.3.2" +vscode-jsonrpc@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz#f239ed2cd6004021b6550af9fd9d3e47eee3cac9" + integrity sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ== + +vscode-languageserver-protocol@^3.16.0: + version "3.17.2" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz#beaa46aea06ed061576586c5e11368a9afc1d378" + integrity sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg== + dependencies: + vscode-jsonrpc "8.0.2" + vscode-languageserver-types "3.17.2" + +vscode-languageserver-types@3.17.2, vscode-languageserver-types@^3.16.0, vscode-languageserver-types@^3.17.2: + version "3.17.2" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" + integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== + +vscode-uri@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.7.tgz#6d19fef387ee6b46c479e5fb00870e15e58c1eb8" + integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" @@ -3076,11 +3436,25 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -3090,3 +3464,21 @@ yaml@^1.7.2: version "1.10.2" resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.2.1: + version "17.6.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" From c9cfa7dd7992b02c5c76ec7e90cb9adb0d37e185 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Fri, 30 Dec 2022 12:39:59 +0100 Subject: [PATCH 08/12] Fix import Signed-off-by: Alexis Rico --- blocks/ide-block/Block.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/blocks/ide-block/Block.tsx b/blocks/ide-block/Block.tsx index 7f5f31c..6796984 100644 --- a/blocks/ide-block/Block.tsx +++ b/blocks/ide-block/Block.tsx @@ -1,7 +1,6 @@ -import './index.css'; +import './Block.css'; import { FileBlockProps, FileContext, getLanguageFromFilename } from '@githubnext/blocks'; -import './index.css'; import Editor, { useMonaco, Monaco } from '@monaco-editor/react'; import { CancellationToken, editor, IMarkdownString, languages, Position, Uri, IRange } from 'monaco-editor'; import { useEffect } from 'react'; From 70404d74ec33b51654b73d53308dc2d6a0ded278 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Fri, 30 Dec 2022 13:09:31 +0100 Subject: [PATCH 09/12] Add CDN loading Signed-off-by: Alexis Rico --- blocks/test-block/Block.tsx | 18 +++--- package.json | 1 + utils/cdn.ts | 113 ++++++++++++++++++++++++++++++++++++ utils/useBundler.ts | 28 ++++++--- yarn.lock | 18 ++++++ 5 files changed, 163 insertions(+), 15 deletions(-) create mode 100644 utils/cdn.ts diff --git a/blocks/test-block/Block.tsx b/blocks/test-block/Block.tsx index b0302e7..f15133b 100644 --- a/blocks/test-block/Block.tsx +++ b/blocks/test-block/Block.tsx @@ -3,7 +3,8 @@ import { Box } from '@primer/react'; import { Panel, PanelGroup, PanelResizeHandle } from 'react-resizable-panels'; import styled from 'styled-components'; import './Block.css'; -import { useFetchOrCloneRepo, useFile } from '../../utils/useGitRepo'; +import { useFS, useFetchOrCloneRepo, useFile } from '../../utils/useGitRepo'; +import { useBundler } from '../../utils/useBundler'; export function TestBlock(props: FileBlockProps) { const { @@ -13,19 +14,20 @@ export function TestBlock(props: FileBlockProps) { const url = `https://github.com/${owner}/${repo}`; const dir = `/git/${owner}/${repo}`; + const fs = useFS(); const { isLoading } = useFetchOrCloneRepo(url, dir, sha); - const { data } = useFile(`${dir}/${path}`, { enabled: !isLoading }); - - console.log('data', data, `${dir}/${path}`); + const { data: fileContents } = useFile(`${dir}/${path}`, { enabled: !isLoading }); + const { data: bundlerOutput, error } = useBundler( + { fs, baseDir: dir, code: fileContents ?? '' }, + { enabled: !!fileContents } + ); return ( - - - + {fileContents} - {data} + {bundlerOutput ?? JSON.stringify(error, null, 4)} ); diff --git a/package.json b/package.json index 4a87dc9..ed03847 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "rollup-plugin-virtual-fs": "^4.0.1-alpha.0", "styled-components": "^5.3.6", "typescript": "^4.9.4", + "url": "^0.11.0", "vscode-languageserver-types": "^3.17.2" } } diff --git a/utils/cdn.ts b/utils/cdn.ts new file mode 100644 index 0000000..3553fe9 --- /dev/null +++ b/utils/cdn.ts @@ -0,0 +1,113 @@ +import { init, parse } from 'es-module-lexer'; +import url from 'url'; + +export type AvailableCDNs = 'skypack'; + +export type ResolveOptions = { + priority?: Array string)>; + versions?: Record; + fetchImpl: FetchImpl; +}; + +export interface Dependency { + name: string; + url: string; + main: string; +} + +export type FetchImpl = ( + url: string, + init?: { body?: string; headers?: Record; method?: string } +) => Promise<{ + ok: boolean; + text(): Promise; + url: string; +}>; + +const isUrl = (value: string) => /^(http(s){0,1}:){0,1}\/\//.test(value); + +const parseCDN: Record string> = { + skypack: (key, version) => { + const versionTag = version ? `@${version}` : ''; + return `https://cdn.skypack.dev/${key}${versionTag}`; + } +}; + +function resolveDependencyUrls(key: string, options: ResolveOptions): string[] { + if (key.startsWith('/') || key.startsWith('file://') || key.startsWith('.')) return []; + + if (isUrl(key)) return [key]; + + const priorities = options.priority ?? ['skypack']; + const version = options.versions?.[key]; + + return priorities.map((cdn) => { + if (typeof cdn === 'string') return parseCDN[cdn](key, version); + + return cdn(key); + }); +} + +async function resolveDependency(name: string, options: ResolveOptions): Promise { + const urls = resolveDependencyUrls(name, options); + if (urls.length === 0) return null; + + const { fetchImpl } = options; + + for await (const url of urls) { + try { + const response = await fetchImpl(url); + const main = await response.text(); + + return { name, url: response.url, main }; + } catch (error) { + console.debug(`Error fetching ${name}`, error); + continue; + } + } + + console.warn(`[rollup-plugin-import-cdn] Could not resolve dependency ${name}`); + + return null; +} + +export async function getDependency(key: string, options: ResolveOptions) { + const dependency = await resolveDependency(key, options); + if (!dependency) return; + + await init; + + const [imports] = parse(dependency.main); + + let position = 0; + + return imports + .map(({ s, e }) => { + const string = dependency.main.slice(s, e); + + // We don't support dynamic imports on variables, ignore them + const variable = dependency.main.slice(s - 1, e + 1); + if (variable.startsWith('(') && variable.endsWith(')')) { + return undefined; + } + + return !isUrl(string) ? { string, start: s, end: e } : undefined; + }) + .reduce((code, data) => { + if (!data) return code; + + const resolvedUrl = url.resolve(dependency.url, data.string); + + const s = data.start + position; + const e = data.end + position; + const str = resolvedUrl.split(''); + const before = code.slice(0, s); + const middle = code.slice(s, e); + const after = code.slice(e); + const lMiddle = middle.length; + const lStr = str.length; + position += lStr - lMiddle; + return [...before, ...str, ...after]; + }, dependency.main.split('')) + .join(''); +} diff --git a/utils/useBundler.ts b/utils/useBundler.ts index 36b6999..66a57e2 100644 --- a/utils/useBundler.ts +++ b/utils/useBundler.ts @@ -6,6 +6,7 @@ import { FsClient } from 'isomorphic-git'; import packageJson from '../package.json'; import { readFile } from './fs'; import { Path } from './path'; +import { getDependency } from './cdn'; type UseBundlerOptions = { fs: FsClient; @@ -39,20 +40,33 @@ const virtualFs = ({ return { path }; } case 'import-statement': { - const dirname = Path.dirname(args.importer); - const path = Path.join(dirname, args.path); - - return { path }; + if (args.path.startsWith('.')) { + const dirname = Path.dirname(args.importer); + const path = Path.join(dirname, args.path); + + return { path }; + } else { + return { path: args.path, namespace: 'cdn' }; + } + } + default: { + throw new Error(`Unknown resolve kind: ${args.kind}`); } } - - throw new Error(`Unknown resolve kind: ${args.kind}`); }); - // TODO: Add CDN loading, fully test relative imports in fs build.onLoad({ filter: /.*/ }, async (args) => { console.log('onLoad', args); + if (args.namespace === 'cdn') { + console.log('loading from cdn', args.path); + + const contents = await getDependency(args.path, { fetchImpl: fetch }); + const loader = getLoader(args.path); + + return { contents, loader }; + } + const extensions = Path.extname(args.path) ? [Path.extname(args.path)] : ['.ts', '.tsx', '.js', '.jsx']; for (const ext of extensions) { diff --git a/yarn.lock b/yarn.lock index cce3cb0..921abe1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2766,6 +2766,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== + qs@6.10.3: version "6.10.3" resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" @@ -2773,6 +2778,11 @@ qs@6.10.3: dependencies: side-channel "^1.0.4" +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" @@ -3349,6 +3359,14 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== + dependencies: + punycode "1.3.2" + querystring "0.2.0" + use-sync-external-store@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" From 17f2b4c81350ab40f33c0b09aa72e5a9af82ff24 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Fri, 30 Dec 2022 13:11:09 +0100 Subject: [PATCH 10/12] Remove console logs Signed-off-by: Alexis Rico --- utils/cdn.ts | 1 + utils/useBundler.ts | 7 ------- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/utils/cdn.ts b/utils/cdn.ts index 3553fe9..a45230c 100644 --- a/utils/cdn.ts +++ b/utils/cdn.ts @@ -1,4 +1,5 @@ import { init, parse } from 'es-module-lexer'; +// @ts-ignore import url from 'url'; export type AvailableCDNs = 'skypack'; diff --git a/utils/useBundler.ts b/utils/useBundler.ts index 66a57e2..9c641bb 100644 --- a/utils/useBundler.ts +++ b/utils/useBundler.ts @@ -25,14 +25,11 @@ const virtualFs = ({ }): Plugin => ({ name: 'virtual-fs', setup: (build) => { - console.log('setup', { baseDir, files }); const vfs = new Map( Object.entries(files).map(([path, contents]) => [normalizeName(Path.join(baseDir, path)), contents]) ); build.onResolve({ filter: /.*/ }, (args) => { - console.log('onResolve', args); - switch (args.kind) { case 'entry-point': { const path = Path.join(baseDir, normalizeName(entryPoint)); @@ -56,11 +53,7 @@ const virtualFs = ({ }); build.onLoad({ filter: /.*/ }, async (args) => { - console.log('onLoad', args); - if (args.namespace === 'cdn') { - console.log('loading from cdn', args.path); - const contents = await getDependency(args.path, { fetchImpl: fetch }); const loader = getLoader(args.path); From 4635d8a436c5e5aa67a44dc74a160da07010734e Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Fri, 30 Dec 2022 13:15:17 +0100 Subject: [PATCH 11/12] Add new hooks folder Signed-off-by: Alexis Rico --- blocks/diff-block/Block.tsx | 4 ++-- blocks/ide-block/Block.tsx | 9 ++++----- blocks/test-block/Block.tsx | 4 ++-- {utils => hooks}/useBundler.ts | 8 ++++---- {utils => hooks}/useGitHubData.tsx | 0 {utils => hooks}/useGitRepo.tsx | 0 {utils => hooks}/useLocalStorageState.ts | 0 tsconfig.json | 2 +- 8 files changed, 13 insertions(+), 14 deletions(-) rename {utils => hooks}/useBundler.ts (95%) rename {utils => hooks}/useGitHubData.tsx (100%) rename {utils => hooks}/useGitRepo.tsx (100%) rename {utils => hooks}/useLocalStorageState.ts (100%) diff --git a/blocks/diff-block/Block.tsx b/blocks/diff-block/Block.tsx index 7a80a81..3ef4b77 100644 --- a/blocks/diff-block/Block.tsx +++ b/blocks/diff-block/Block.tsx @@ -5,8 +5,8 @@ import styled from 'styled-components'; import './Block.css'; import { Button } from '../../components/Button'; import { decode } from '../../utils/base64'; -import { useGitHubData } from '../../utils/useGitHubData'; -import { useLocalStorageState } from '../../utils/useLocalStorageState'; +import { useGitHubData } from '../../hooks/useGitHubData'; +import { useLocalStorageState } from '../../hooks/useLocalStorageState'; export function DiffBlock(props: FileBlockProps) { const { context, originalContent } = props; diff --git a/blocks/ide-block/Block.tsx b/blocks/ide-block/Block.tsx index 6796984..38e69aa 100644 --- a/blocks/ide-block/Block.tsx +++ b/blocks/ide-block/Block.tsx @@ -1,11 +1,10 @@ -import './Block.css'; - import { FileBlockProps, FileContext, getLanguageFromFilename } from '@githubnext/blocks'; -import Editor, { useMonaco, Monaco } from '@monaco-editor/react'; -import { CancellationToken, editor, IMarkdownString, languages, Position, Uri, IRange } from 'monaco-editor'; -import { useEffect } from 'react'; import { LsifReader, UriTransformer } from '@ionide/lsif-reader'; +import Editor, { Monaco, useMonaco } from '@monaco-editor/react'; +import { CancellationToken, IMarkdownString, IRange, Position, Uri, editor, languages } from 'monaco-editor'; +import { useEffect } from 'react'; import * as lsp from 'vscode-languageserver-types'; +import './Block.css'; let getDirName = (file: string) => { let parts = file.split('/'); diff --git a/blocks/test-block/Block.tsx b/blocks/test-block/Block.tsx index f15133b..c14dc95 100644 --- a/blocks/test-block/Block.tsx +++ b/blocks/test-block/Block.tsx @@ -3,8 +3,8 @@ import { Box } from '@primer/react'; import { Panel, PanelGroup, PanelResizeHandle } from 'react-resizable-panels'; import styled from 'styled-components'; import './Block.css'; -import { useFS, useFetchOrCloneRepo, useFile } from '../../utils/useGitRepo'; -import { useBundler } from '../../utils/useBundler'; +import { useFS, useFetchOrCloneRepo, useFile } from '../../hooks/useGitRepo'; +import { useBundler } from '../../hooks/useBundler'; export function TestBlock(props: FileBlockProps) { const { diff --git a/utils/useBundler.ts b/hooks/useBundler.ts similarity index 95% rename from utils/useBundler.ts rename to hooks/useBundler.ts index 9c641bb..18e40d0 100644 --- a/utils/useBundler.ts +++ b/hooks/useBundler.ts @@ -1,12 +1,12 @@ -import './loadProcess'; +import '../utils/loadProcess'; import { UseQueryOptions, useQuery } from '@tanstack/react-query'; import { Plugin, build, initialize } from 'esbuild-wasm'; import { FsClient } from 'isomorphic-git'; import packageJson from '../package.json'; -import { readFile } from './fs'; -import { Path } from './path'; -import { getDependency } from './cdn'; +import { readFile } from '../utils/fs'; +import { Path } from '../utils/path'; +import { getDependency } from '../utils/cdn'; type UseBundlerOptions = { fs: FsClient; diff --git a/utils/useGitHubData.tsx b/hooks/useGitHubData.tsx similarity index 100% rename from utils/useGitHubData.tsx rename to hooks/useGitHubData.tsx diff --git a/utils/useGitRepo.tsx b/hooks/useGitRepo.tsx similarity index 100% rename from utils/useGitRepo.tsx rename to hooks/useGitRepo.tsx diff --git a/utils/useLocalStorageState.ts b/hooks/useLocalStorageState.ts similarity index 100% rename from utils/useLocalStorageState.ts rename to hooks/useLocalStorageState.ts diff --git a/tsconfig.json b/tsconfig.json index 472d725..d874111 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "./node_modules/@githubnext/blocks/tsconfig.json", - "include": ["blocks", "components", "utils"] + "include": ["blocks", "components", "utils", "hooks/useBundler.ts"] } From 13290c94ba1e14abeb9ab6fa2889296749b9e1d9 Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Fri, 30 Dec 2022 13:16:14 +0100 Subject: [PATCH 12/12] Update md Signed-off-by: Alexis Rico --- LICENSE.txt | 2 +- README.md | 44 +------------------------------------------- package.json | 2 +- 3 files changed, 3 insertions(+), 45 deletions(-) diff --git a/LICENSE.txt b/LICENSE.txt index 6cb44c3..d214c9f 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright 2022 GitHub and contributors +Copyright 2022 Alexis Rico Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/README.md b/README.md index 515866a..12cf64c 100644 --- a/README.md +++ b/README.md @@ -1,43 +1 @@ -# GitHub Blocks Template - -Use this repository as a starter template for building your own Blocks. -## Quickstart - -> 🛑 Currently, you must be flagged into the [GitHub Blocks Technical Preview](https://blocks.githubnext.com) in order to develop blocks. There is no "offline" development mode at this time. - -Fork this repo using the `Use this template` button above: - -!["Use this template" button](https://user-images.githubusercontent.com/8978670/144893319-5d45ab5c-12c0-42b4-99f8-97f658deb03b.png) - -Then, clone _your_ repo (not [this one!](https://github.com/githubnext/blocks-template)) and get ready for action: - -```bash -yarn # install dependencies -yarn start # start the dev server -# Or use npm, pnpm, you know the drill -``` - -When you visit [localhost:4000](https://localhost:4000) in your browser, you'll be -redirected to the Blocks app, but your locally-developed blocks will appear in the block picker: - -Block picker - -This template includes one example File Block and one Folder Block. The dev server supports hot reloading, so make some changes, and see what they do! - -## Under the hood - -Currently, Blocks are [React](https://reactjs.org/) components. They have a well-defined contract with their surroundings, and receive a [fixed set of props](TODO) when they are instantiated. They are developed in [TypeScript](https://www.typescriptlang.org/), and bundled with [Vite](https://vitejs.dev/). - -## More Info - -Visit [githubnext/blocks](https://blocks.githubnext.com/githubnext/blocks) for a full tutorial, documentation, and examples. - -You should also join us in our discord! There's a [#blocks channel](https://discord.com/channels/735557230698692749/1039950186136469535) where you can connect with us and other folks who are building Blocks: - -> 👋 https://discord.gg/githubnext -## License - -MIT - -✌️ ❤️ -_GitHub Next_ +# SferaDev's GitHub Blocks diff --git a/package.json b/package.json index ed03847..9737c1d 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "custom-block-template", + "name": "sferadev-blocks", "version": "0.0.0", "license": "MIT", "scripts": {