├── .gitignore ├── LICENSE ├── README.md ├── _transformer_rules ├── 001-replace-className-with-class.toml ├── 002-replace-useState-with-createSignal.toml ├── 003-replace-react-import-with-solid-js.toml ├── README.md └── transformers.js ├── docs ├── .nojekyll ├── assets │ ├── img │ │ └── react2solid-hero.png │ ├── index.95e4ee6a.js │ ├── index.f42cc39e.css │ └── reactjs-solidjs-libs-alternatives.csv └── index.html ├── index.html ├── logo.png ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public └── assets │ ├── img │ └── react2solid-hero.png │ └── reactjs-solidjs-libs-alternatives.csv ├── src ├── App.tsx ├── components │ ├── JqInput.tsx │ ├── ReactAstEditor.tsx │ ├── ReactCodeEditor.tsx │ ├── SolidAstEditor.tsx │ └── SolidCodeEditor.tsx ├── index.css ├── index.tsx ├── lib │ ├── csv.ts │ ├── jqAsyncChain.ts │ └── jsonStringifyEscape.ts ├── pages │ ├── about.tsx │ ├── builder.tsx │ ├── cli.tsx │ ├── converter.tsx │ ├── error404.tsx │ ├── home.tsx │ ├── libs-alternatives.tsx │ ├── migration-guide.tsx │ └── test-cases.tsx └── routes.ts ├── tailwind.config.js ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 R. Rajesh Jeba Anbiah 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | React to Solid Converter, ReactJS to SolidJS Converter, ReactJS to SolidJS Transpiler 2 | 3 | # ReactJS to SolidJS Converter aka Transpiler 4 | 5 | SolidJS is the framework known for its performance (based on the [js framework benchmark](https://github.com/krausest/js-framework-benchmark) project). react2solid is an attempt to create a React to Solid code converter. 6 | 7 | This project has 5 sub-projects or modules: 8 | 9 | 1. Language agnostic React to Solid transformer rules and test cases 10 | 1. ReactJS to SolidJS transpiler - JavaScript frontend 11 | 1. React to Solid converter - CLI version, for batch conversion 12 | 1. React.js to Solid.js transformer rules builder - Web UI 13 | 1. Automatic ReactJS to SolidJS migration guide - from the transformer rules 14 | 15 | ## Demo 16 | 17 | [ReactJS to SolidJS Converter & Utilities](https://rrjanbiah.github.io/react2solid/) 18 | 19 | ## Status 20 | 21 | Started with swc, JMESPath and Rust in mind, but had to switch to the Babel, jq and SolidJS due to multiple challenges (such as [1](https://github.com/swc-project/swc/discussions/4241), [2](https://github.com/rrjanbiah/react2solid/issues/6), [3](https://github.com/rrjanbiah/react2solid/issues/8)). Now, an MVP is ready without CLI. 22 | 23 | ## Architecture / Approach 24 | 25 | 1. Idea is to avoid hardcoding of parser rules 26 | 1. Create language agnostic transpiler rules using `jq` selectors and also keep test case scripts along with that 27 | 1. Using Babel, get AST for the ReactJS code 28 | 1. Apply `jq` selection on the AST 29 | 1. Convert the AST to JavaScript/SolidJS 30 | 1. For string transformer, it is merely string replace over the code (no AST conversion) 31 | 32 | 33 | ## Acknowledgments 34 | 35 | * `schwartzworld` of Hacker News for suggesting SolidJS hackathon 36 | * @ryansolid for creating SolidJS and the awesome community (especially Discord) 37 | 38 | 39 | ## Roadmap 40 | 41 | - [ ] v0.0.1 42 | - [x] Basic folder structure and naming conventions for the transform rules 43 | - [x] ReactJS to SolidJS transpiler - JavaScript frontend 44 | - [x] Builder UI (partly) 45 | - [x] Automatic migration guide generation 46 | - [x] ReactJS to SolidJS libraries alternatives (MVP, not handled in code) 47 | - [ ] v0.0.2 48 | - [ ] Refactor for code duplication and TOML structure 49 | - [ ] v0.0.3 50 | - [ ] Rust-based converter. Switch to swc? 51 | 52 | ## Contributing 53 | 54 | * Feel free to post any issues or suggestions 55 | * Submit your transform rules using the builder (TODO. Till then feel free to submit PR) 56 | 57 | 58 | ## Support / Sponsor 59 | 60 | **Hire Me**, **Recommend Me** for any remote/freelancer opportunity 61 | 62 | Contact Email: rrjanbiah-at-Y!com 63 | 64 | Twitter: [@rrjanbiah](https://twitter.com/rrjanbiah) (DM open) 65 | -------------------------------------------------------------------------------- /_transformer_rules/001-replace-className-with-class.toml: -------------------------------------------------------------------------------- 1 | [rule] 2 | transformer.0.string.search = 'className' 3 | transformer.0.string.replace = 'class' 4 | 5 | 6 | # rule human description i18n 7 | [languages] 8 | 9 | [languages.en] 10 | title = 'In JSX, replace `className` with `class`' 11 | description = ''' 12 | Unlike in React, SolidJS doesn't need the weird `className` for the CSS styling. So, we can use the normal CSS `class` itself. 13 | ''' 14 | 15 | 16 | [testcases] 17 | 18 | [testcases.0] 19 | test = 'className in style attribute gets replaced' 20 | 21 | input = ''' 22 | const element = ( 23 |

24 | Hello, world! 25 |

26 | ); 27 | ''' 28 | # Expected output 29 | output = ''' 30 | const element =

31 | Hello, world! 32 |

; 33 | ''' 34 | 35 | [testcases.1] 36 | test = 'className in other parts are not affected' 37 | 38 | input = ''' 39 | let className = 'menu'; 40 | ''' 41 | # Expected output 42 | output = ''' 43 | let className = 'menu'; 44 | ''' 45 | 46 | 47 | [meta] 48 | author = "@rrjanbiah" # GitHub username 49 | # references 50 | credits.0 = "https://www.youtube.com/watch?v=wu6HvLoi9VQ" 51 | -------------------------------------------------------------------------------- /_transformer_rules/002-replace-useState-with-createSignal.toml: -------------------------------------------------------------------------------- 1 | [rule] 2 | transformer.0.string.search = 'useState' 3 | transformer.0.string.replace = 'createSignal' 4 | 5 | 6 | # rule human description i18n 7 | [languages] 8 | 9 | [languages.en] 10 | title = 'Replace `useState` with `createSignal`' 11 | description = ''' 12 | `createSignal` is the SolidJS equivalent of React `useState` 13 | ''' 14 | 15 | 16 | [testcases] 17 | 18 | [testcases.0] 19 | test = 'useState gets replaced with createSignal' 20 | 21 | input = ''' 22 | const [count, setCount] = useState(0); 23 | ''' 24 | # Expected output 25 | output = ''' 26 | const [count, setCount] = createSignal(0); 27 | ''' 28 | 29 | 30 | [meta] 31 | author = "@rrjanbiah" # GitHub username 32 | # references 33 | credits.0 = "https://www.youtube.com/watch?v=wu6HvLoi9VQ" 34 | -------------------------------------------------------------------------------- /_transformer_rules/003-replace-react-import-with-solid-js.toml: -------------------------------------------------------------------------------- 1 | [rule] 2 | transformer.0.jq = 'walk(if type == "object" and .value == "react" then .value |= "solid-js" else . end)' 3 | 4 | 5 | # rule human description i18n 6 | [languages] 7 | 8 | [languages.en] 9 | title = 'Replace `react` import with `solid-js`' 10 | description = ''' 11 | Replace the `react` library in import with `solid-js` 12 | ''' 13 | 14 | 15 | [testcases] 16 | 17 | [testcases.0] 18 | test = 'react gets replaced with solid-js in import' 19 | 20 | input = ''' 21 | import React, { useState } from 'react'; 22 | ''' 23 | # Expected output 24 | output = ''' 25 | import React, { useState } from "solid-js"; 26 | ''' 27 | 28 | 29 | [meta] 30 | author = "@rrjanbiah" # GitHub username 31 | # references 32 | credits.0 = "https://www.youtube.com/watch?v=wu6HvLoi9VQ" 33 | -------------------------------------------------------------------------------- /_transformer_rules/README.md: -------------------------------------------------------------------------------- 1 | Language agnostic React to Solid code transformation rule, human readable description along with test cases (aka, sample use cases) are stored in `toml` files. 2 | 3 | File name convention: `%03x-slug.toml` (hexadecimal serial number in 3-digit, accompanied with the slug) 4 | 5 | TODO: Define filename length 6 | 7 | `reactjs-solidjs-libs-alternatives.csv` - SolidJS alternatives libraries for ReactJS in CSV 8 | -------------------------------------------------------------------------------- /_transformer_rules/transformers.js: -------------------------------------------------------------------------------- 1 | // TOML to JSON converted rules 2 | // TODO: Find better approach 3 | 4 | export function transformersJson() { 5 | return [{ 6 | "languages": { 7 | "en": { 8 | "description": "Unlike in React, SolidJS doesn't need the weird `className` for the CSS styling. So, we can use the normal CSS `class` itself.\n", 9 | "title": "In JSX, replace `className` with `class`" 10 | } 11 | }, 12 | "meta": { 13 | "author": "@rrjanbiah", 14 | "credits": [ 15 | "https://www.youtube.com/watch?v=wu6HvLoi9VQ" 16 | ] 17 | }, 18 | "rule": { 19 | "transformer": [ 20 | { 21 | "string": { 22 | "replace": "class", 23 | "search": "className" 24 | } 25 | } 26 | ] 27 | }, 28 | "testcases": [ 29 | { 30 | "input": "const element = (\n

\n Hello, world!\n

\n);\n", 31 | "output": "const element = (\n

\n Hello, world!\n

\n);\n", 32 | "test": "className in style attribute gets replaced" 33 | }, 34 | { 35 | "input": "let className = 'menu';\n", 36 | "output": "let className = 'menu';\n", 37 | "test": "className in other parts are not affected" 38 | } 39 | ] 40 | }, 41 | { 42 | "languages": { 43 | "en": { 44 | "description": "`createSignal` is the SolidJS equivalent of React `useState`\n", 45 | "title": "Replace `useState` with `createSignal`" 46 | } 47 | }, 48 | "meta": { 49 | "author": "@rrjanbiah", 50 | "credits": { 51 | "0": "https://www.youtube.com/watch?v=wu6HvLoi9VQ" 52 | } 53 | }, 54 | "rule": { 55 | "transformer": [ 56 | { 57 | "string": { 58 | "replace": "createSignal", 59 | "search": "useState" 60 | } 61 | } 62 | ] 63 | }, 64 | "testcases": [ 65 | { 66 | "input": "const [count, setCount] = useState(0);\n", 67 | "output": "const [count, setCount] = createSignal(0);\n", 68 | "test": "useState gets replaced with createSignal" 69 | } 70 | ] 71 | }, 72 | { 73 | "languages": { 74 | "en": { 75 | "description": "Replace the `react` library in import with `solid-js`\n", 76 | "title": "Replace `react` import with `solid-js`" 77 | } 78 | }, 79 | "meta": { 80 | "author": "@rrjanbiah", 81 | "credits": [ 82 | "https://www.youtube.com/watch?v=wu6HvLoi9VQ" 83 | ] 84 | }, 85 | "rule": { 86 | "transformer": [ 87 | { 88 | "jq": "walk(if type == \"object\" and .value == \"react\" then .value |= \"solid-js\" else . end)" 89 | } 90 | ] 91 | }, 92 | "testcases": [ 93 | { 94 | "input": "import React, { useState } from 'react';\n", 95 | "output": "import React, { useState } from \"solid-js\";", 96 | "test": "react gets replaced with solid-js in import" 97 | } 98 | ] 99 | }] 100 | } 101 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrjanbiah/react2solid/8a3839d29d6394b1899066be4d9146f87dbe99e0/docs/.nojekyll -------------------------------------------------------------------------------- /docs/assets/img/react2solid-hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrjanbiah/react2solid/8a3839d29d6394b1899066be4d9146f87dbe99e0/docs/assets/img/react2solid-hero.png -------------------------------------------------------------------------------- /docs/assets/index.f42cc39e.css: -------------------------------------------------------------------------------- 1 | *,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.relative{position:relative}.m-0{margin:0}.m-2{margin:.5rem}.-m-2{margin:-.5rem}.-m-4{margin:-1rem}.mx-auto{margin-left:auto;margin-right:auto}.-my-8{margin-top:-2rem;margin-bottom:-2rem}.mb-4{margin-bottom:1rem}.ml-3{margin-left:.75rem}.mr-5{margin-right:1.25rem}.mt-4{margin-top:1rem}.ml-2{margin-left:.5rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mb-6{margin-bottom:1.5rem}.mb-2{margin-bottom:.5rem}.mt-10{margin-top:2.5rem}.mb-12{margin-bottom:3rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-8{margin-bottom:2rem}.mt-6{margin-top:1.5rem}.mb-3{margin-bottom:.75rem}.mr-3{margin-right:.75rem}.mt-3{margin-top:.75rem}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.h-10{height:2.5rem}.h-5{height:1.25rem}.h-4{height:1rem}.h-screen{height:100vh}.h-1{height:.25rem}.h-12{height:3rem}.h-32{height:8rem}.h-16{height:4rem}.h-2{height:.5rem}.h-full{height:100%}.h-8{height:2rem}.h-6{height:1.5rem}.w-10{width:2.5rem}.w-5{width:1.25rem}.w-4{width:1rem}.w-full{width:100%}.w-20{width:5rem}.w-12{width:3rem}.w-1\/2{width:50%}.w-16{width:4rem}.w-2{width:.5rem}.w-5\/6{width:83.333333%}.w-8{width:2rem}.w-6{width:1.5rem}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.table-auto{table-layout:auto}.resize-none{resize:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.divide-y-2>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(2px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(2px * var(--tw-divide-y-reverse))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(243 244 246 / var(--tw-divide-opacity))}.overflow-auto{overflow:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.border-0{border-width:0px}.border{border-width:1px}.border-2{border-width:2px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0px}.border-t-2{border-top-width:2px}.border-solid{border-style:solid}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity))}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.bg-opacity-50{--tw-bg-opacity: .5}.bg-clip-padding{background-clip:padding-box}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-5{padding:1.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-8{padding:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-24{padding-top:6rem;padding-bottom:6rem}.pl-4{padding-left:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-bold{font-weight:700}.font-semibold{font-weight:600}.leading-relaxed{line-height:1.625}.leading-8{line-height:2rem}.leading-6{line-height:1.5rem}.tracking-widest{letter-spacing:.1em}.tracking-wider{letter-spacing:.05em}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-indigo-500{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:border-indigo-500:hover{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.hover\:bg-indigo-600:hover{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.hover\:text-indigo-500:hover{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity))}.focus\:border-blue-600:focus{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity))}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.focus\:text-gray-700:focus{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-indigo-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity))}@media (min-width: 640px){.sm\:ml-4{margin-left:1rem}.sm\:mt-0{margin-top:0}.sm\:ml-auto{margin-left:auto}.sm\:w-auto{width:auto}.sm\:w-1\/2{width:50%}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:border-l-2{border-left-width:2px}.sm\:border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.sm\:py-2{padding-top:.5rem;padding-bottom:.5rem}.sm\:pl-4{padding-left:1rem}.sm\:pr-16{padding-right:4rem}.sm\:text-left{text-align:left}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width: 768px){.md\:mb-0{margin-bottom:0}.md\:mr-auto{margin-right:auto}.md\:ml-4{margin-left:1rem}.md\:mt-0{margin-top:0}.md\:mb-2{margin-bottom:.5rem}.md\:w-2\/3{width:66.666667%}.md\:w-1\/12{width:8.333333%}.md\:w-3\/6{width:50%}.md\:w-1\/3{width:33.333333%}.md\:w-1\/2{width:50%}.md\:w-64{width:16rem}.md\:flex-grow{flex-grow:1}.md\:flex-row{flex-direction:row}.md\:flex-nowrap{flex-wrap:nowrap}.md\:justify-start{justify-content:flex-start}.md\:border-l{border-left-width:1px}.md\:border-gray-400{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity))}.md\:py-1{padding-top:.25rem;padding-bottom:.25rem}.md\:pl-4{padding-left:1rem}}@media (min-width: 1024px){.lg\:mb-0{margin-bottom:0}.lg\:w-2\/3{width:66.666667%}.lg\:w-1\/2{width:50%}.lg\:w-2\/6{width:33.333333%}} 2 | -------------------------------------------------------------------------------- /docs/assets/reactjs-solidjs-libs-alternatives.csv: -------------------------------------------------------------------------------- 1 | Keywords,ReactJS Lib,ReactJS Lib URL,SolidJS Lib,SolidJS Lib URL,API Match Score 2 | "meta,title,head,SEO",next/head,https://nextjs.org/docs/api-reference/next/head,solid-meta,https://github.com/solidjs/solid-meta,90 3 | "virtualized,window,performance",react-virtualized,https://bvaughn.github.io/react-virtualized/,solid-virtual-container,https://github.com/minht11/solid-virtual-container,50 4 | "virtualized,window,performance",react-window,https://github.com/bvaughn/react-window,solid-windowed,https://github.com/titoBouzout/solid-windowed,40 5 | markdown,remark-react,https://github.com/remarkjs/remark-react,solid-marked,https://github.com/LXSMNSYC/solid-marked,40 6 | "table,sort,pagination",sb-react-table,https://github.com/steelbrain/react-table,solid-simple-table,https://github.com/aminya/solid-simple-table,90 7 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | ReactJS to SolidJS Converter & Utilities 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | ReactJS to SolidJS Converter & Utilities 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrjanbiah/react2solid/8a3839d29d6394b1899066be4d9146f87dbe99e0/logo.png -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react2solid", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@ampproject/remapping": { 8 | "version": "2.1.2", 9 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", 10 | "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", 11 | "dev": true, 12 | "requires": { 13 | "@jridgewell/trace-mapping": "^0.3.0" 14 | } 15 | }, 16 | "@babel/code-frame": { 17 | "version": "7.16.7", 18 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", 19 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", 20 | "requires": { 21 | "@babel/highlight": "^7.16.7" 22 | } 23 | }, 24 | "@babel/compat-data": { 25 | "version": "7.17.7", 26 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", 27 | "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", 28 | "dev": true 29 | }, 30 | "@babel/core": { 31 | "version": "7.17.9", 32 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", 33 | "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", 34 | "dev": true, 35 | "requires": { 36 | "@ampproject/remapping": "^2.1.0", 37 | "@babel/code-frame": "^7.16.7", 38 | "@babel/generator": "^7.17.9", 39 | "@babel/helper-compilation-targets": "^7.17.7", 40 | "@babel/helper-module-transforms": "^7.17.7", 41 | "@babel/helpers": "^7.17.9", 42 | "@babel/parser": "^7.17.9", 43 | "@babel/template": "^7.16.7", 44 | "@babel/traverse": "^7.17.9", 45 | "@babel/types": "^7.17.0", 46 | "convert-source-map": "^1.7.0", 47 | "debug": "^4.1.0", 48 | "gensync": "^1.0.0-beta.2", 49 | "json5": "^2.2.1", 50 | "semver": "^6.3.0" 51 | } 52 | }, 53 | "@babel/generator": { 54 | "version": "7.17.9", 55 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", 56 | "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", 57 | "requires": { 58 | "@babel/types": "^7.17.0", 59 | "jsesc": "^2.5.1", 60 | "source-map": "^0.5.0" 61 | } 62 | }, 63 | "@babel/helper-annotate-as-pure": { 64 | "version": "7.16.7", 65 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", 66 | "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", 67 | "dev": true, 68 | "requires": { 69 | "@babel/types": "^7.16.7" 70 | } 71 | }, 72 | "@babel/helper-compilation-targets": { 73 | "version": "7.17.7", 74 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", 75 | "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", 76 | "dev": true, 77 | "requires": { 78 | "@babel/compat-data": "^7.17.7", 79 | "@babel/helper-validator-option": "^7.16.7", 80 | "browserslist": "^4.17.5", 81 | "semver": "^6.3.0" 82 | } 83 | }, 84 | "@babel/helper-create-class-features-plugin": { 85 | "version": "7.17.9", 86 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", 87 | "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", 88 | "dev": true, 89 | "requires": { 90 | "@babel/helper-annotate-as-pure": "^7.16.7", 91 | "@babel/helper-environment-visitor": "^7.16.7", 92 | "@babel/helper-function-name": "^7.17.9", 93 | "@babel/helper-member-expression-to-functions": "^7.17.7", 94 | "@babel/helper-optimise-call-expression": "^7.16.7", 95 | "@babel/helper-replace-supers": "^7.16.7", 96 | "@babel/helper-split-export-declaration": "^7.16.7" 97 | } 98 | }, 99 | "@babel/helper-environment-visitor": { 100 | "version": "7.16.7", 101 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", 102 | "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", 103 | "requires": { 104 | "@babel/types": "^7.16.7" 105 | } 106 | }, 107 | "@babel/helper-function-name": { 108 | "version": "7.17.9", 109 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", 110 | "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", 111 | "requires": { 112 | "@babel/template": "^7.16.7", 113 | "@babel/types": "^7.17.0" 114 | } 115 | }, 116 | "@babel/helper-hoist-variables": { 117 | "version": "7.16.7", 118 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", 119 | "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", 120 | "requires": { 121 | "@babel/types": "^7.16.7" 122 | } 123 | }, 124 | "@babel/helper-member-expression-to-functions": { 125 | "version": "7.17.7", 126 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", 127 | "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", 128 | "dev": true, 129 | "requires": { 130 | "@babel/types": "^7.17.0" 131 | } 132 | }, 133 | "@babel/helper-module-imports": { 134 | "version": "7.16.7", 135 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", 136 | "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", 137 | "dev": true, 138 | "requires": { 139 | "@babel/types": "^7.16.7" 140 | } 141 | }, 142 | "@babel/helper-module-transforms": { 143 | "version": "7.17.7", 144 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", 145 | "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", 146 | "dev": true, 147 | "requires": { 148 | "@babel/helper-environment-visitor": "^7.16.7", 149 | "@babel/helper-module-imports": "^7.16.7", 150 | "@babel/helper-simple-access": "^7.17.7", 151 | "@babel/helper-split-export-declaration": "^7.16.7", 152 | "@babel/helper-validator-identifier": "^7.16.7", 153 | "@babel/template": "^7.16.7", 154 | "@babel/traverse": "^7.17.3", 155 | "@babel/types": "^7.17.0" 156 | } 157 | }, 158 | "@babel/helper-optimise-call-expression": { 159 | "version": "7.16.7", 160 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", 161 | "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", 162 | "dev": true, 163 | "requires": { 164 | "@babel/types": "^7.16.7" 165 | } 166 | }, 167 | "@babel/helper-plugin-utils": { 168 | "version": "7.16.7", 169 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", 170 | "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", 171 | "dev": true 172 | }, 173 | "@babel/helper-replace-supers": { 174 | "version": "7.16.7", 175 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", 176 | "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", 177 | "dev": true, 178 | "requires": { 179 | "@babel/helper-environment-visitor": "^7.16.7", 180 | "@babel/helper-member-expression-to-functions": "^7.16.7", 181 | "@babel/helper-optimise-call-expression": "^7.16.7", 182 | "@babel/traverse": "^7.16.7", 183 | "@babel/types": "^7.16.7" 184 | } 185 | }, 186 | "@babel/helper-simple-access": { 187 | "version": "7.17.7", 188 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", 189 | "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", 190 | "dev": true, 191 | "requires": { 192 | "@babel/types": "^7.17.0" 193 | } 194 | }, 195 | "@babel/helper-split-export-declaration": { 196 | "version": "7.16.7", 197 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", 198 | "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", 199 | "requires": { 200 | "@babel/types": "^7.16.7" 201 | } 202 | }, 203 | "@babel/helper-validator-identifier": { 204 | "version": "7.16.7", 205 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", 206 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" 207 | }, 208 | "@babel/helper-validator-option": { 209 | "version": "7.16.7", 210 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", 211 | "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", 212 | "dev": true 213 | }, 214 | "@babel/helpers": { 215 | "version": "7.17.9", 216 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", 217 | "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", 218 | "dev": true, 219 | "requires": { 220 | "@babel/template": "^7.16.7", 221 | "@babel/traverse": "^7.17.9", 222 | "@babel/types": "^7.17.0" 223 | } 224 | }, 225 | "@babel/highlight": { 226 | "version": "7.17.9", 227 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", 228 | "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", 229 | "requires": { 230 | "@babel/helper-validator-identifier": "^7.16.7", 231 | "chalk": "^2.0.0", 232 | "js-tokens": "^4.0.0" 233 | } 234 | }, 235 | "@babel/parser": { 236 | "version": "7.17.9", 237 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", 238 | "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==" 239 | }, 240 | "@babel/plugin-syntax-jsx": { 241 | "version": "7.16.7", 242 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", 243 | "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", 244 | "dev": true, 245 | "requires": { 246 | "@babel/helper-plugin-utils": "^7.16.7" 247 | } 248 | }, 249 | "@babel/plugin-syntax-typescript": { 250 | "version": "7.16.7", 251 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", 252 | "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", 253 | "dev": true, 254 | "requires": { 255 | "@babel/helper-plugin-utils": "^7.16.7" 256 | } 257 | }, 258 | "@babel/plugin-transform-typescript": { 259 | "version": "7.16.8", 260 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", 261 | "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", 262 | "dev": true, 263 | "requires": { 264 | "@babel/helper-create-class-features-plugin": "^7.16.7", 265 | "@babel/helper-plugin-utils": "^7.16.7", 266 | "@babel/plugin-syntax-typescript": "^7.16.7" 267 | } 268 | }, 269 | "@babel/preset-typescript": { 270 | "version": "7.16.7", 271 | "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", 272 | "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", 273 | "dev": true, 274 | "requires": { 275 | "@babel/helper-plugin-utils": "^7.16.7", 276 | "@babel/helper-validator-option": "^7.16.7", 277 | "@babel/plugin-transform-typescript": "^7.16.7" 278 | } 279 | }, 280 | "@babel/template": { 281 | "version": "7.16.7", 282 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", 283 | "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", 284 | "requires": { 285 | "@babel/code-frame": "^7.16.7", 286 | "@babel/parser": "^7.16.7", 287 | "@babel/types": "^7.16.7" 288 | } 289 | }, 290 | "@babel/traverse": { 291 | "version": "7.17.9", 292 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", 293 | "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", 294 | "requires": { 295 | "@babel/code-frame": "^7.16.7", 296 | "@babel/generator": "^7.17.9", 297 | "@babel/helper-environment-visitor": "^7.16.7", 298 | "@babel/helper-function-name": "^7.17.9", 299 | "@babel/helper-hoist-variables": "^7.16.7", 300 | "@babel/helper-split-export-declaration": "^7.16.7", 301 | "@babel/parser": "^7.17.9", 302 | "@babel/types": "^7.17.0", 303 | "debug": "^4.1.0", 304 | "globals": "^11.1.0" 305 | } 306 | }, 307 | "@babel/types": { 308 | "version": "7.17.0", 309 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", 310 | "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", 311 | "requires": { 312 | "@babel/helper-validator-identifier": "^7.16.7", 313 | "to-fast-properties": "^2.0.0" 314 | } 315 | }, 316 | "@esbuild-plugins/node-globals-polyfill": { 317 | "version": "0.1.1", 318 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", 319 | "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==" 320 | }, 321 | "@esbuild-plugins/node-modules-polyfill": { 322 | "version": "0.1.4", 323 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", 324 | "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", 325 | "dev": true, 326 | "requires": { 327 | "escape-string-regexp": "^4.0.0", 328 | "rollup-plugin-node-polyfills": "^0.2.1" 329 | }, 330 | "dependencies": { 331 | "escape-string-regexp": { 332 | "version": "4.0.0", 333 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 334 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 335 | "dev": true 336 | } 337 | } 338 | }, 339 | "@jridgewell/resolve-uri": { 340 | "version": "3.0.5", 341 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", 342 | "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", 343 | "dev": true 344 | }, 345 | "@jridgewell/sourcemap-codec": { 346 | "version": "1.4.11", 347 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", 348 | "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", 349 | "dev": true 350 | }, 351 | "@jridgewell/trace-mapping": { 352 | "version": "0.3.4", 353 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", 354 | "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", 355 | "dev": true, 356 | "requires": { 357 | "@jridgewell/resolve-uri": "^3.0.3", 358 | "@jridgewell/sourcemap-codec": "^1.4.10" 359 | } 360 | }, 361 | "@nodelib/fs.scandir": { 362 | "version": "2.1.5", 363 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 364 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 365 | "dev": true, 366 | "requires": { 367 | "@nodelib/fs.stat": "2.0.5", 368 | "run-parallel": "^1.1.9" 369 | } 370 | }, 371 | "@nodelib/fs.stat": { 372 | "version": "2.0.5", 373 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 374 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 375 | "dev": true 376 | }, 377 | "@nodelib/fs.walk": { 378 | "version": "1.2.8", 379 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 380 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 381 | "dev": true, 382 | "requires": { 383 | "@nodelib/fs.scandir": "2.1.5", 384 | "fastq": "^1.6.0" 385 | } 386 | }, 387 | "@types/babel__generator": { 388 | "version": "7.6.4", 389 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", 390 | "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", 391 | "dev": true, 392 | "requires": { 393 | "@babel/types": "^7.0.0" 394 | } 395 | }, 396 | "@types/babel__traverse": { 397 | "version": "7.14.2", 398 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", 399 | "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", 400 | "dev": true, 401 | "requires": { 402 | "@babel/types": "^7.3.0" 403 | } 404 | }, 405 | "@types/parse-json": { 406 | "version": "4.0.0", 407 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", 408 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", 409 | "dev": true 410 | }, 411 | "acorn": { 412 | "version": "7.4.1", 413 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 414 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 415 | "dev": true 416 | }, 417 | "acorn-node": { 418 | "version": "1.8.2", 419 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 420 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 421 | "dev": true, 422 | "requires": { 423 | "acorn": "^7.0.0", 424 | "acorn-walk": "^7.0.0", 425 | "xtend": "^4.0.2" 426 | } 427 | }, 428 | "acorn-walk": { 429 | "version": "7.2.0", 430 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 431 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 432 | "dev": true 433 | }, 434 | "ansi-styles": { 435 | "version": "3.2.1", 436 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 437 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 438 | "requires": { 439 | "color-convert": "^1.9.0" 440 | } 441 | }, 442 | "anymatch": { 443 | "version": "3.1.2", 444 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 445 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 446 | "dev": true, 447 | "requires": { 448 | "normalize-path": "^3.0.0", 449 | "picomatch": "^2.0.4" 450 | } 451 | }, 452 | "arg": { 453 | "version": "5.0.1", 454 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", 455 | "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", 456 | "dev": true 457 | }, 458 | "autoprefixer": { 459 | "version": "10.4.4", 460 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz", 461 | "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==", 462 | "dev": true, 463 | "requires": { 464 | "browserslist": "^4.20.2", 465 | "caniuse-lite": "^1.0.30001317", 466 | "fraction.js": "^4.2.0", 467 | "normalize-range": "^0.1.2", 468 | "picocolors": "^1.0.0", 469 | "postcss-value-parser": "^4.2.0" 470 | } 471 | }, 472 | "babel-plugin-jsx-dom-expressions": { 473 | "version": "0.32.11", 474 | "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.32.11.tgz", 475 | "integrity": "sha512-hytqY33SGW6B3obSLt8K5X510UwtNkTktCCWgwba+QOOV0CowDFiqeL+0ru895FLacFaYANHFTu1y76dg3GVtw==", 476 | "dev": true, 477 | "requires": { 478 | "@babel/helper-module-imports": "7.16.0", 479 | "@babel/plugin-syntax-jsx": "^7.16.5", 480 | "@babel/types": "^7.16.0", 481 | "html-entities": "2.3.2" 482 | }, 483 | "dependencies": { 484 | "@babel/helper-module-imports": { 485 | "version": "7.16.0", 486 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", 487 | "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", 488 | "dev": true, 489 | "requires": { 490 | "@babel/types": "^7.16.0" 491 | } 492 | } 493 | } 494 | }, 495 | "babel-preset-solid": { 496 | "version": "1.3.13", 497 | "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.3.13.tgz", 498 | "integrity": "sha512-MZnmsceI9yiHlwwFCSALTJhadk2eea/+2UP4ec4jkPZFR+XRKTLoIwRkrBh7uLtvHF+3lHGyUaXtZukOmmUwhA==", 499 | "dev": true, 500 | "requires": { 501 | "babel-plugin-jsx-dom-expressions": "^0.32.11" 502 | } 503 | }, 504 | "base64-js": { 505 | "version": "1.5.1", 506 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 507 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 508 | }, 509 | "binary-extensions": { 510 | "version": "2.2.0", 511 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 512 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 513 | "dev": true 514 | }, 515 | "braces": { 516 | "version": "3.0.2", 517 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 518 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 519 | "dev": true, 520 | "requires": { 521 | "fill-range": "^7.0.1" 522 | } 523 | }, 524 | "browserslist": { 525 | "version": "4.20.2", 526 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", 527 | "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", 528 | "dev": true, 529 | "requires": { 530 | "caniuse-lite": "^1.0.30001317", 531 | "electron-to-chromium": "^1.4.84", 532 | "escalade": "^3.1.1", 533 | "node-releases": "^2.0.2", 534 | "picocolors": "^1.0.0" 535 | } 536 | }, 537 | "buffer": { 538 | "version": "6.0.3", 539 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 540 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 541 | "requires": { 542 | "base64-js": "^1.3.1", 543 | "ieee754": "^1.2.1" 544 | } 545 | }, 546 | "callsites": { 547 | "version": "3.1.0", 548 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 549 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 550 | "dev": true 551 | }, 552 | "camelcase-css": { 553 | "version": "2.0.1", 554 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 555 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 556 | "dev": true 557 | }, 558 | "caniuse-lite": { 559 | "version": "1.0.30001327", 560 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz", 561 | "integrity": "sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w==", 562 | "dev": true 563 | }, 564 | "chalk": { 565 | "version": "2.4.2", 566 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 567 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 568 | "requires": { 569 | "ansi-styles": "^3.2.1", 570 | "escape-string-regexp": "^1.0.5", 571 | "supports-color": "^5.3.0" 572 | } 573 | }, 574 | "chokidar": { 575 | "version": "3.5.3", 576 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 577 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 578 | "dev": true, 579 | "requires": { 580 | "anymatch": "~3.1.2", 581 | "braces": "~3.0.2", 582 | "fsevents": "~2.3.2", 583 | "glob-parent": "~5.1.2", 584 | "is-binary-path": "~2.1.0", 585 | "is-glob": "~4.0.1", 586 | "normalize-path": "~3.0.0", 587 | "readdirp": "~3.6.0" 588 | }, 589 | "dependencies": { 590 | "glob-parent": { 591 | "version": "5.1.2", 592 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 593 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 594 | "dev": true, 595 | "requires": { 596 | "is-glob": "^4.0.1" 597 | } 598 | } 599 | } 600 | }, 601 | "color-convert": { 602 | "version": "1.9.3", 603 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 604 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 605 | "requires": { 606 | "color-name": "1.1.3" 607 | } 608 | }, 609 | "color-name": { 610 | "version": "1.1.3", 611 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 612 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 613 | }, 614 | "convert-source-map": { 615 | "version": "1.8.0", 616 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", 617 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", 618 | "dev": true, 619 | "requires": { 620 | "safe-buffer": "~5.1.1" 621 | } 622 | }, 623 | "cosmiconfig": { 624 | "version": "7.0.1", 625 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", 626 | "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", 627 | "dev": true, 628 | "requires": { 629 | "@types/parse-json": "^4.0.0", 630 | "import-fresh": "^3.2.1", 631 | "parse-json": "^5.0.0", 632 | "path-type": "^4.0.0", 633 | "yaml": "^1.10.0" 634 | } 635 | }, 636 | "cssesc": { 637 | "version": "3.0.0", 638 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 639 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 640 | "dev": true 641 | }, 642 | "debug": { 643 | "version": "4.3.4", 644 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 645 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 646 | "requires": { 647 | "ms": "2.1.2" 648 | } 649 | }, 650 | "defined": { 651 | "version": "1.0.0", 652 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 653 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 654 | "dev": true 655 | }, 656 | "detective": { 657 | "version": "5.2.0", 658 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", 659 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", 660 | "dev": true, 661 | "requires": { 662 | "acorn-node": "^1.6.1", 663 | "defined": "^1.0.0", 664 | "minimist": "^1.1.1" 665 | } 666 | }, 667 | "didyoumean": { 668 | "version": "1.2.2", 669 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 670 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 671 | "dev": true 672 | }, 673 | "dlv": { 674 | "version": "1.1.3", 675 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 676 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 677 | "dev": true 678 | }, 679 | "electron-to-chromium": { 680 | "version": "1.4.106", 681 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz", 682 | "integrity": "sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==", 683 | "dev": true 684 | }, 685 | "error-ex": { 686 | "version": "1.3.2", 687 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 688 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 689 | "dev": true, 690 | "requires": { 691 | "is-arrayish": "^0.2.1" 692 | } 693 | }, 694 | "esbuild": { 695 | "version": "0.14.34", 696 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.34.tgz", 697 | "integrity": "sha512-QIWdPT/gFF6hCaf4m7kP0cJ+JIuFkdHibI7vVFvu3eJS1HpVmYHWDulyN5WXwbRA0SX/7ZDaJ/1DH8SdY9xOJg==", 698 | "dev": true, 699 | "requires": { 700 | "esbuild-android-64": "0.14.34", 701 | "esbuild-android-arm64": "0.14.34", 702 | "esbuild-darwin-64": "0.14.34", 703 | "esbuild-darwin-arm64": "0.14.34", 704 | "esbuild-freebsd-64": "0.14.34", 705 | "esbuild-freebsd-arm64": "0.14.34", 706 | "esbuild-linux-32": "0.14.34", 707 | "esbuild-linux-64": "0.14.34", 708 | "esbuild-linux-arm": "0.14.34", 709 | "esbuild-linux-arm64": "0.14.34", 710 | "esbuild-linux-mips64le": "0.14.34", 711 | "esbuild-linux-ppc64le": "0.14.34", 712 | "esbuild-linux-riscv64": "0.14.34", 713 | "esbuild-linux-s390x": "0.14.34", 714 | "esbuild-netbsd-64": "0.14.34", 715 | "esbuild-openbsd-64": "0.14.34", 716 | "esbuild-sunos-64": "0.14.34", 717 | "esbuild-windows-32": "0.14.34", 718 | "esbuild-windows-64": "0.14.34", 719 | "esbuild-windows-arm64": "0.14.34" 720 | } 721 | }, 722 | "esbuild-android-64": { 723 | "version": "0.14.34", 724 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.34.tgz", 725 | "integrity": "sha512-XfxcfJqmMYsT/LXqrptzFxmaR3GWzXHDLdFNIhm6S00zPaQF1TBBWm+9t0RZ6LRR7iwH57DPjaOeW20vMqI4Yw==", 726 | "dev": true, 727 | "optional": true 728 | }, 729 | "esbuild-android-arm64": { 730 | "version": "0.14.34", 731 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.34.tgz", 732 | "integrity": "sha512-T02+NXTmSRL1Mc6puz+R9CB54rSPICkXKq6+tw8B6vxZFnCPzbJxgwIX4kcluz9p8nYBjF3+lSilTGWb7+Xgew==", 733 | "dev": true, 734 | "optional": true 735 | }, 736 | "esbuild-darwin-64": { 737 | "version": "0.14.34", 738 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.34.tgz", 739 | "integrity": "sha512-pLRip2Bh4Ng7Bf6AMgCrSp3pPe/qZyf11h5Qo2mOfJqLWzSVjxrXW+CFRJfrOVP7TCnh/gmZSM2AFdCPB72vtw==", 740 | "dev": true, 741 | "optional": true 742 | }, 743 | "esbuild-darwin-arm64": { 744 | "version": "0.14.34", 745 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.34.tgz", 746 | "integrity": "sha512-vpidSJEBxx6lf1NWgXC+DCmGqesJuZ5Y8aQVVsaoO4i8tRXbXb0whChRvop/zd3nfNM4dIl5EXAky0knRX5I6w==", 747 | "dev": true, 748 | "optional": true 749 | }, 750 | "esbuild-freebsd-64": { 751 | "version": "0.14.34", 752 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.34.tgz", 753 | "integrity": "sha512-m0HBjePhe0hAQJgtMRMNV9kMgIyV4/qSnzPx42kRMQBcPhgjAq1JRu4Il26czC+9FgpMbFkUktb07f/Lwnc6CA==", 754 | "dev": true, 755 | "optional": true 756 | }, 757 | "esbuild-freebsd-arm64": { 758 | "version": "0.14.34", 759 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.34.tgz", 760 | "integrity": "sha512-cpRc2B94L1KvMPPYB4D6G39jLqpKlD3noAMY4/e86iXXXkhUYJJEtTuyNFTa9JRpWM0xCAp4mxjHjoIiLuoCLA==", 761 | "dev": true, 762 | "optional": true 763 | }, 764 | "esbuild-linux-32": { 765 | "version": "0.14.34", 766 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.34.tgz", 767 | "integrity": "sha512-8nQaEaoW7MH/K/RlozJa+lE1ejHIr8fuPIHhc513UebRav7HtXgQvxHQ6VZRUkWtep23M6dd7UqhwO1tMOfzQQ==", 768 | "dev": true, 769 | "optional": true 770 | }, 771 | "esbuild-linux-64": { 772 | "version": "0.14.34", 773 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.34.tgz", 774 | "integrity": "sha512-Y3of4qQoLLlAgf042MlrY1P+7PnN9zWj8nVtw9XQG5hcLOZLz7IKpU35oeu7n4wvyaZHwvQqDJ93gRLqdJekcQ==", 775 | "dev": true, 776 | "optional": true 777 | }, 778 | "esbuild-linux-arm": { 779 | "version": "0.14.34", 780 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.34.tgz", 781 | "integrity": "sha512-9lpq1NcJqssAF7alCO6zL3gvBVVt/lKw4oetUM7OgNnRX0OWpB+ZIO9FwCrSj/dMdmgDhPLf+119zB8QxSMmAg==", 782 | "dev": true, 783 | "optional": true 784 | }, 785 | "esbuild-linux-arm64": { 786 | "version": "0.14.34", 787 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.34.tgz", 788 | "integrity": "sha512-IlWaGtj9ir7+Nrume1DGcyzBDlK8GcnJq0ANKwcI9pVw8tqr+6GD0eqyF9SF1mR8UmAp+odrx1H5NdR2cHdFHA==", 789 | "dev": true, 790 | "optional": true 791 | }, 792 | "esbuild-linux-mips64le": { 793 | "version": "0.14.34", 794 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.34.tgz", 795 | "integrity": "sha512-k3or+01Rska1AjUyNjA4buEwB51eyN/xPQAoOx1CjzAQC3l8rpjUDw55kXyL63O/1MUi4ISvtNtl8gLwdyEcxw==", 796 | "dev": true, 797 | "optional": true 798 | }, 799 | "esbuild-linux-ppc64le": { 800 | "version": "0.14.34", 801 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.34.tgz", 802 | "integrity": "sha512-+qxb8M9FfM2CJaVU7GgYpJOHM1ngQOx+/VrtBjb4C8oVqaPcESCeg2anjl+HRZy8VpYc71q/iBYausPPbJ+Keg==", 803 | "dev": true, 804 | "optional": true 805 | }, 806 | "esbuild-linux-riscv64": { 807 | "version": "0.14.34", 808 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.34.tgz", 809 | "integrity": "sha512-Y717ltBdQ5j5sZIHdy1DV9kieo0wMip0dCmVSTceowCPYSn1Cg33Kd6981+F/3b9FDMzNWldZFOBRILViENZSA==", 810 | "dev": true, 811 | "optional": true 812 | }, 813 | "esbuild-linux-s390x": { 814 | "version": "0.14.34", 815 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.34.tgz", 816 | "integrity": "sha512-bDDgYO4LhL4+zPs+WcBkXph+AQoPcQRTv18FzZS0WhjfH8TZx2QqlVPGhmhZ6WidrY+jKthUqO6UhGyIb4MpmA==", 817 | "dev": true, 818 | "optional": true 819 | }, 820 | "esbuild-netbsd-64": { 821 | "version": "0.14.34", 822 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.34.tgz", 823 | "integrity": "sha512-cfaFGXdRt0+vHsjNPyF0POM4BVSHPSbhLPe8mppDc7GDDxjIl08mV1Zou14oDWMp/XZMjYN1kWYRSfftiD0vvQ==", 824 | "dev": true, 825 | "optional": true 826 | }, 827 | "esbuild-openbsd-64": { 828 | "version": "0.14.34", 829 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.34.tgz", 830 | "integrity": "sha512-vmy9DxXVnRiI14s8GKuYBtess+EVcDALkbpTqd5jw4XITutIzyB7n4x0Tj5utAkKsgZJB22lLWGekr0ABnSLow==", 831 | "dev": true, 832 | "optional": true 833 | }, 834 | "esbuild-sunos-64": { 835 | "version": "0.14.34", 836 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.34.tgz", 837 | "integrity": "sha512-eNPVatNET1F7tRMhii7goL/eptfxc0ALRjrj9SPFNqp0zmxrehBFD6BaP3R4LjMn6DbMO0jOAnTLFKr8NqcJAA==", 838 | "dev": true, 839 | "optional": true 840 | }, 841 | "esbuild-windows-32": { 842 | "version": "0.14.34", 843 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.34.tgz", 844 | "integrity": "sha512-EFhpXyHEcnqWYe2rAHFd8dRw8wkrd9U+9oqcyoEL84GbanAYjiiIjBZsnR8kl0sCQ5w6bLpk7vCEIA2VS32Vcg==", 845 | "dev": true, 846 | "optional": true 847 | }, 848 | "esbuild-windows-64": { 849 | "version": "0.14.34", 850 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.34.tgz", 851 | "integrity": "sha512-a8fbl8Ky7PxNEjf1aJmtxdDZj32/hC7S1OcA2ckEpCJRTjiKslI9vAdPpSjrKIWhws4Galpaawy0nB7fjHYf5Q==", 852 | "dev": true, 853 | "optional": true 854 | }, 855 | "esbuild-windows-arm64": { 856 | "version": "0.14.34", 857 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.34.tgz", 858 | "integrity": "sha512-EYvmKbSa2B3sPnpC28UEu9jBK5atGV4BaVRE7CYGUci2Hlz4AvtV/LML+TcDMT6gBgibnN2gcltWclab3UutMg==", 859 | "dev": true, 860 | "optional": true 861 | }, 862 | "escalade": { 863 | "version": "3.1.1", 864 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 865 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 866 | "dev": true 867 | }, 868 | "escape-string-regexp": { 869 | "version": "1.0.5", 870 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 871 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 872 | }, 873 | "estree-walker": { 874 | "version": "0.6.1", 875 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 876 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 877 | "dev": true 878 | }, 879 | "fast-glob": { 880 | "version": "3.2.11", 881 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 882 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 883 | "dev": true, 884 | "requires": { 885 | "@nodelib/fs.stat": "^2.0.2", 886 | "@nodelib/fs.walk": "^1.2.3", 887 | "glob-parent": "^5.1.2", 888 | "merge2": "^1.3.0", 889 | "micromatch": "^4.0.4" 890 | }, 891 | "dependencies": { 892 | "glob-parent": { 893 | "version": "5.1.2", 894 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 895 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 896 | "dev": true, 897 | "requires": { 898 | "is-glob": "^4.0.1" 899 | } 900 | } 901 | } 902 | }, 903 | "fastq": { 904 | "version": "1.13.0", 905 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 906 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 907 | "dev": true, 908 | "requires": { 909 | "reusify": "^1.0.4" 910 | } 911 | }, 912 | "fill-range": { 913 | "version": "7.0.1", 914 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 915 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 916 | "dev": true, 917 | "requires": { 918 | "to-regex-range": "^5.0.1" 919 | } 920 | }, 921 | "fraction.js": { 922 | "version": "4.2.0", 923 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", 924 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", 925 | "dev": true 926 | }, 927 | "fsevents": { 928 | "version": "2.3.2", 929 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 930 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 931 | "dev": true, 932 | "optional": true 933 | }, 934 | "function-bind": { 935 | "version": "1.1.1", 936 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 937 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 938 | "dev": true 939 | }, 940 | "gensync": { 941 | "version": "1.0.0-beta.2", 942 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 943 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 944 | "dev": true 945 | }, 946 | "glob-parent": { 947 | "version": "6.0.2", 948 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 949 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 950 | "dev": true, 951 | "requires": { 952 | "is-glob": "^4.0.3" 953 | } 954 | }, 955 | "globals": { 956 | "version": "11.12.0", 957 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 958 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" 959 | }, 960 | "has": { 961 | "version": "1.0.3", 962 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 963 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 964 | "dev": true, 965 | "requires": { 966 | "function-bind": "^1.1.1" 967 | } 968 | }, 969 | "has-flag": { 970 | "version": "3.0.0", 971 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 972 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 973 | }, 974 | "html-entities": { 975 | "version": "2.3.2", 976 | "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", 977 | "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", 978 | "dev": true 979 | }, 980 | "ieee754": { 981 | "version": "1.2.1", 982 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 983 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 984 | }, 985 | "import-fresh": { 986 | "version": "3.3.0", 987 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 988 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 989 | "dev": true, 990 | "requires": { 991 | "parent-module": "^1.0.0", 992 | "resolve-from": "^4.0.0" 993 | } 994 | }, 995 | "is-arrayish": { 996 | "version": "0.2.1", 997 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 998 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 999 | "dev": true 1000 | }, 1001 | "is-binary-path": { 1002 | "version": "2.1.0", 1003 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1004 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1005 | "dev": true, 1006 | "requires": { 1007 | "binary-extensions": "^2.0.0" 1008 | } 1009 | }, 1010 | "is-core-module": { 1011 | "version": "2.8.1", 1012 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 1013 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 1014 | "dev": true, 1015 | "requires": { 1016 | "has": "^1.0.3" 1017 | } 1018 | }, 1019 | "is-extglob": { 1020 | "version": "2.1.1", 1021 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1022 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1023 | "dev": true 1024 | }, 1025 | "is-glob": { 1026 | "version": "4.0.3", 1027 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1028 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1029 | "dev": true, 1030 | "requires": { 1031 | "is-extglob": "^2.1.1" 1032 | } 1033 | }, 1034 | "is-number": { 1035 | "version": "7.0.0", 1036 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1037 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1038 | "dev": true 1039 | }, 1040 | "is-what": { 1041 | "version": "4.1.7", 1042 | "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.7.tgz", 1043 | "integrity": "sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==", 1044 | "dev": true 1045 | }, 1046 | "jq-web": { 1047 | "version": "0.5.1", 1048 | "resolved": "https://registry.npmjs.org/jq-web/-/jq-web-0.5.1.tgz", 1049 | "integrity": "sha512-3Fa3E6g3U1O1j46ljy0EM10yRr4txzILga8J7bqOG8F89gZ6Lilz82WG9z6TItWpYEO0YGa4W8yFGj+NMM1xqQ==" 1050 | }, 1051 | "js-tokens": { 1052 | "version": "4.0.0", 1053 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1054 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1055 | }, 1056 | "jsesc": { 1057 | "version": "2.5.2", 1058 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1059 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" 1060 | }, 1061 | "json-parse-even-better-errors": { 1062 | "version": "2.3.1", 1063 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1064 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1065 | "dev": true 1066 | }, 1067 | "json5": { 1068 | "version": "2.2.1", 1069 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", 1070 | "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", 1071 | "dev": true 1072 | }, 1073 | "lilconfig": { 1074 | "version": "2.0.5", 1075 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", 1076 | "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", 1077 | "dev": true 1078 | }, 1079 | "lines-and-columns": { 1080 | "version": "1.2.4", 1081 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1082 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1083 | "dev": true 1084 | }, 1085 | "magic-string": { 1086 | "version": "0.25.9", 1087 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 1088 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 1089 | "dev": true, 1090 | "requires": { 1091 | "sourcemap-codec": "^1.4.8" 1092 | } 1093 | }, 1094 | "merge-anything": { 1095 | "version": "5.0.2", 1096 | "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.0.2.tgz", 1097 | "integrity": "sha512-POPQBWkBC0vxdgzRJ2Mkj4+2NTKbvkHo93ih+jGDhNMLzIw+rYKjO7949hOQM2X7DxMHH1uoUkwWFLIzImw7gA==", 1098 | "dev": true, 1099 | "requires": { 1100 | "is-what": "^4.1.6", 1101 | "ts-toolbelt": "^9.6.0" 1102 | } 1103 | }, 1104 | "merge2": { 1105 | "version": "1.4.1", 1106 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1107 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1108 | "dev": true 1109 | }, 1110 | "micromatch": { 1111 | "version": "4.0.5", 1112 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1113 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1114 | "dev": true, 1115 | "requires": { 1116 | "braces": "^3.0.2", 1117 | "picomatch": "^2.3.1" 1118 | } 1119 | }, 1120 | "minimist": { 1121 | "version": "1.2.6", 1122 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1123 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 1124 | "dev": true 1125 | }, 1126 | "ms": { 1127 | "version": "2.1.2", 1128 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1129 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1130 | }, 1131 | "nanoid": { 1132 | "version": "3.3.2", 1133 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz", 1134 | "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==", 1135 | "dev": true 1136 | }, 1137 | "node-releases": { 1138 | "version": "2.0.2", 1139 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", 1140 | "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", 1141 | "dev": true 1142 | }, 1143 | "normalize-path": { 1144 | "version": "3.0.0", 1145 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1146 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1147 | "dev": true 1148 | }, 1149 | "normalize-range": { 1150 | "version": "0.1.2", 1151 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 1152 | "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", 1153 | "dev": true 1154 | }, 1155 | "object-hash": { 1156 | "version": "2.2.0", 1157 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", 1158 | "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", 1159 | "dev": true 1160 | }, 1161 | "parent-module": { 1162 | "version": "1.0.1", 1163 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1164 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1165 | "dev": true, 1166 | "requires": { 1167 | "callsites": "^3.0.0" 1168 | } 1169 | }, 1170 | "parse-json": { 1171 | "version": "5.2.0", 1172 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1173 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1174 | "dev": true, 1175 | "requires": { 1176 | "@babel/code-frame": "^7.0.0", 1177 | "error-ex": "^1.3.1", 1178 | "json-parse-even-better-errors": "^2.3.0", 1179 | "lines-and-columns": "^1.1.6" 1180 | } 1181 | }, 1182 | "path-parse": { 1183 | "version": "1.0.7", 1184 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1185 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1186 | "dev": true 1187 | }, 1188 | "path-type": { 1189 | "version": "4.0.0", 1190 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1191 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1192 | "dev": true 1193 | }, 1194 | "picocolors": { 1195 | "version": "1.0.0", 1196 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1197 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1198 | "dev": true 1199 | }, 1200 | "picomatch": { 1201 | "version": "2.3.1", 1202 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1203 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1204 | "dev": true 1205 | }, 1206 | "postcss": { 1207 | "version": "8.4.12", 1208 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", 1209 | "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", 1210 | "dev": true, 1211 | "requires": { 1212 | "nanoid": "^3.3.1", 1213 | "picocolors": "^1.0.0", 1214 | "source-map-js": "^1.0.2" 1215 | } 1216 | }, 1217 | "postcss-js": { 1218 | "version": "4.0.0", 1219 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 1220 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 1221 | "dev": true, 1222 | "requires": { 1223 | "camelcase-css": "^2.0.1" 1224 | } 1225 | }, 1226 | "postcss-load-config": { 1227 | "version": "3.1.4", 1228 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 1229 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 1230 | "dev": true, 1231 | "requires": { 1232 | "lilconfig": "^2.0.5", 1233 | "yaml": "^1.10.2" 1234 | } 1235 | }, 1236 | "postcss-nested": { 1237 | "version": "5.0.6", 1238 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", 1239 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", 1240 | "dev": true, 1241 | "requires": { 1242 | "postcss-selector-parser": "^6.0.6" 1243 | } 1244 | }, 1245 | "postcss-selector-parser": { 1246 | "version": "6.0.10", 1247 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 1248 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 1249 | "dev": true, 1250 | "requires": { 1251 | "cssesc": "^3.0.0", 1252 | "util-deprecate": "^1.0.2" 1253 | } 1254 | }, 1255 | "postcss-value-parser": { 1256 | "version": "4.2.0", 1257 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1258 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 1259 | "dev": true 1260 | }, 1261 | "queue-microtask": { 1262 | "version": "1.2.3", 1263 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1264 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1265 | "dev": true 1266 | }, 1267 | "quick-lru": { 1268 | "version": "5.1.1", 1269 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1270 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1271 | "dev": true 1272 | }, 1273 | "readdirp": { 1274 | "version": "3.6.0", 1275 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1276 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1277 | "dev": true, 1278 | "requires": { 1279 | "picomatch": "^2.2.1" 1280 | } 1281 | }, 1282 | "resolve": { 1283 | "version": "1.22.0", 1284 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 1285 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 1286 | "dev": true, 1287 | "requires": { 1288 | "is-core-module": "^2.8.1", 1289 | "path-parse": "^1.0.7", 1290 | "supports-preserve-symlinks-flag": "^1.0.0" 1291 | } 1292 | }, 1293 | "resolve-from": { 1294 | "version": "4.0.0", 1295 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1296 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1297 | "dev": true 1298 | }, 1299 | "reusify": { 1300 | "version": "1.0.4", 1301 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1302 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1303 | "dev": true 1304 | }, 1305 | "rollup": { 1306 | "version": "2.70.1", 1307 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", 1308 | "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", 1309 | "dev": true, 1310 | "requires": { 1311 | "fsevents": "~2.3.2" 1312 | } 1313 | }, 1314 | "rollup-plugin-inject": { 1315 | "version": "3.0.2", 1316 | "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", 1317 | "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", 1318 | "dev": true, 1319 | "requires": { 1320 | "estree-walker": "^0.6.1", 1321 | "magic-string": "^0.25.3", 1322 | "rollup-pluginutils": "^2.8.1" 1323 | } 1324 | }, 1325 | "rollup-plugin-node-polyfills": { 1326 | "version": "0.2.1", 1327 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", 1328 | "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", 1329 | "dev": true, 1330 | "requires": { 1331 | "rollup-plugin-inject": "^3.0.0" 1332 | } 1333 | }, 1334 | "rollup-pluginutils": { 1335 | "version": "2.8.2", 1336 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1337 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1338 | "dev": true, 1339 | "requires": { 1340 | "estree-walker": "^0.6.1" 1341 | } 1342 | }, 1343 | "run-parallel": { 1344 | "version": "1.2.0", 1345 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1346 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1347 | "dev": true, 1348 | "requires": { 1349 | "queue-microtask": "^1.2.2" 1350 | } 1351 | }, 1352 | "safe-buffer": { 1353 | "version": "5.1.2", 1354 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1355 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1356 | "dev": true 1357 | }, 1358 | "semver": { 1359 | "version": "6.3.0", 1360 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1361 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1362 | "dev": true 1363 | }, 1364 | "solid-app-router": { 1365 | "version": "0.3.2", 1366 | "resolved": "https://registry.npmjs.org/solid-app-router/-/solid-app-router-0.3.2.tgz", 1367 | "integrity": "sha512-zh6Ui87xy23JUxrH0z1xAROJPpiuxa3JRx9jP2qqjr07q2EKQOjn9BrmTFvQd/azQWzLjSMU+hN2fy6kLh5Bdw==" 1368 | }, 1369 | "solid-js": { 1370 | "version": "1.3.14", 1371 | "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.3.14.tgz", 1372 | "integrity": "sha512-eSLm3DTTAWvFnPJT4/PuHC1TAGSNF/aFG+dyuVRPfPepT7wV2SXllA1gf9gr5kBpuloqFxzLcqXy6B9VLSgCkQ==" 1373 | }, 1374 | "solid-meta": { 1375 | "version": "0.27.3", 1376 | "resolved": "https://registry.npmjs.org/solid-meta/-/solid-meta-0.27.3.tgz", 1377 | "integrity": "sha512-XaVv0EPkoPvufzUOIMn4yOzZFnJvQPVBlpZFLc9zTFTUnb+cq/zuoWr0Sa0fEntodfVPe5j6NfvXwGE6pHQo+w==" 1378 | }, 1379 | "solid-refresh": { 1380 | "version": "0.4.0", 1381 | "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.4.0.tgz", 1382 | "integrity": "sha512-5XCUz845n/sHPzKK2i2G2EeV61tAmzv6SqzqhXcPaYhrgzVy7nKTQaBpKK8InKrriq9Z2JFF/mguIU00t/73xw==", 1383 | "dev": true, 1384 | "requires": { 1385 | "@babel/generator": "^7.16.0", 1386 | "@babel/helper-module-imports": "^7.16.0", 1387 | "@babel/types": "^7.16.0" 1388 | } 1389 | }, 1390 | "source-map": { 1391 | "version": "0.5.7", 1392 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1393 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 1394 | }, 1395 | "source-map-js": { 1396 | "version": "1.0.2", 1397 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1398 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1399 | "dev": true 1400 | }, 1401 | "sourcemap-codec": { 1402 | "version": "1.4.8", 1403 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1404 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1405 | "dev": true 1406 | }, 1407 | "supports-color": { 1408 | "version": "5.5.0", 1409 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1410 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1411 | "requires": { 1412 | "has-flag": "^3.0.0" 1413 | } 1414 | }, 1415 | "supports-preserve-symlinks-flag": { 1416 | "version": "1.0.0", 1417 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1418 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1419 | "dev": true 1420 | }, 1421 | "tailwindcss": { 1422 | "version": "3.0.23", 1423 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.23.tgz", 1424 | "integrity": "sha512-+OZOV9ubyQ6oI2BXEhzw4HrqvgcARY38xv3zKcjnWtMIZstEsXdI9xftd1iB7+RbOnj2HOEzkA0OyB5BaSxPQA==", 1425 | "dev": true, 1426 | "requires": { 1427 | "arg": "^5.0.1", 1428 | "chalk": "^4.1.2", 1429 | "chokidar": "^3.5.3", 1430 | "color-name": "^1.1.4", 1431 | "cosmiconfig": "^7.0.1", 1432 | "detective": "^5.2.0", 1433 | "didyoumean": "^1.2.2", 1434 | "dlv": "^1.1.3", 1435 | "fast-glob": "^3.2.11", 1436 | "glob-parent": "^6.0.2", 1437 | "is-glob": "^4.0.3", 1438 | "normalize-path": "^3.0.0", 1439 | "object-hash": "^2.2.0", 1440 | "postcss": "^8.4.6", 1441 | "postcss-js": "^4.0.0", 1442 | "postcss-load-config": "^3.1.0", 1443 | "postcss-nested": "5.0.6", 1444 | "postcss-selector-parser": "^6.0.9", 1445 | "postcss-value-parser": "^4.2.0", 1446 | "quick-lru": "^5.1.1", 1447 | "resolve": "^1.22.0" 1448 | }, 1449 | "dependencies": { 1450 | "ansi-styles": { 1451 | "version": "4.3.0", 1452 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1453 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1454 | "dev": true, 1455 | "requires": { 1456 | "color-convert": "^2.0.1" 1457 | } 1458 | }, 1459 | "chalk": { 1460 | "version": "4.1.2", 1461 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1462 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1463 | "dev": true, 1464 | "requires": { 1465 | "ansi-styles": "^4.1.0", 1466 | "supports-color": "^7.1.0" 1467 | } 1468 | }, 1469 | "color-convert": { 1470 | "version": "2.0.1", 1471 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1472 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1473 | "dev": true, 1474 | "requires": { 1475 | "color-name": "~1.1.4" 1476 | } 1477 | }, 1478 | "color-name": { 1479 | "version": "1.1.4", 1480 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1481 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1482 | "dev": true 1483 | }, 1484 | "has-flag": { 1485 | "version": "4.0.0", 1486 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1487 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1488 | "dev": true 1489 | }, 1490 | "supports-color": { 1491 | "version": "7.2.0", 1492 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1493 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1494 | "dev": true, 1495 | "requires": { 1496 | "has-flag": "^4.0.0" 1497 | } 1498 | } 1499 | } 1500 | }, 1501 | "to-fast-properties": { 1502 | "version": "2.0.0", 1503 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1504 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" 1505 | }, 1506 | "to-regex-range": { 1507 | "version": "5.0.1", 1508 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1509 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1510 | "dev": true, 1511 | "requires": { 1512 | "is-number": "^7.0.0" 1513 | } 1514 | }, 1515 | "ts-toolbelt": { 1516 | "version": "9.6.0", 1517 | "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", 1518 | "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", 1519 | "dev": true 1520 | }, 1521 | "typescript": { 1522 | "version": "4.6.3", 1523 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", 1524 | "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", 1525 | "dev": true 1526 | }, 1527 | "util-deprecate": { 1528 | "version": "1.0.2", 1529 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1530 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1531 | "dev": true 1532 | }, 1533 | "vite": { 1534 | "version": "2.9.1", 1535 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz", 1536 | "integrity": "sha512-vSlsSdOYGcYEJfkQ/NeLXgnRv5zZfpAsdztkIrs7AZHV8RCMZQkwjo4DS5BnrYTqoWqLoUe1Cah4aVO4oNNqCQ==", 1537 | "dev": true, 1538 | "requires": { 1539 | "esbuild": "^0.14.27", 1540 | "fsevents": "~2.3.2", 1541 | "postcss": "^8.4.12", 1542 | "resolve": "^1.22.0", 1543 | "rollup": "^2.59.0" 1544 | } 1545 | }, 1546 | "vite-plugin-solid": { 1547 | "version": "2.2.6", 1548 | "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.2.6.tgz", 1549 | "integrity": "sha512-J1RnmqkZZJSNYDW7vZj0giKKHLWGr9tS/gxR70WDSTYfhyXrgukbZdIfSEFbtrsg8ZiQ2t2zXcvkWoeefenqKw==", 1550 | "dev": true, 1551 | "requires": { 1552 | "@babel/core": "^7.16.12", 1553 | "@babel/preset-typescript": "^7.16.7", 1554 | "babel-preset-solid": "^1.3.0", 1555 | "merge-anything": "^5.0.2", 1556 | "solid-js": "^1.3.3", 1557 | "solid-refresh": "^0.4.0", 1558 | "vite": "^2.8.0" 1559 | } 1560 | }, 1561 | "xtend": { 1562 | "version": "4.0.2", 1563 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1564 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1565 | "dev": true 1566 | }, 1567 | "yaml": { 1568 | "version": "1.10.2", 1569 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 1570 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 1571 | "dev": true 1572 | } 1573 | } 1574 | } 1575 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react2solid", 3 | "version": "0.0.1", 4 | "description": "A set of utilities for the React to Solid conversion", 5 | "info": "react2solid has sub projects/modules: 1. Converter web UI, 2. Builder web UI, 3. CLI for batch conversion, 4. Migration guide, 5. Language agnostic transformation rules with test cases.", 6 | "homepage": "https://github.com/rrjanbiah/react2solid", 7 | "contributors": [ 8 | { 9 | "name": "R. Rajesh Jeba Anbiah", 10 | "email": "rrjanbiah-at-Y!com", 11 | "url": "https://twitter.com/rrjanbiah" 12 | } 13 | ], 14 | "keywords": [ 15 | "solidhack", 16 | "best_ecosystem", 17 | "solidjs", 18 | "react", 19 | "reactjs", 20 | "converter", 21 | "transpiler", 22 | "babel", 23 | "code-converter" 24 | ], 25 | "scripts": { 26 | "dev": "vite", 27 | "build": "vite build", 28 | "serve": "vite preview" 29 | }, 30 | "license": "MIT", 31 | "devDependencies": { 32 | "@esbuild-plugins/node-modules-polyfill": "^0.1.4", 33 | "@types/babel__generator": "^7.6.4", 34 | "@types/babel__traverse": "^7.14.2", 35 | "autoprefixer": "^10.4.4", 36 | "postcss": "^8.4.12", 37 | "tailwindcss": "^3.0.23", 38 | "typescript": "^4.6.3", 39 | "vite": "^2.8.6", 40 | "vite-plugin-solid": "^2.2.6" 41 | }, 42 | "dependencies": { 43 | "@babel/generator": "^7.17.9", 44 | "@babel/parser": "^7.17.9", 45 | "@babel/traverse": "^7.17.9", 46 | "@babel/types": "^7.17.0", 47 | "@esbuild-plugins/node-globals-polyfill": "^0.1.1", 48 | "buffer": "^6.0.3", 49 | "jq-web": "^0.5.1", 50 | "solid-app-router": "^0.3.2", 51 | "solid-js": "^1.3.13", 52 | "solid-meta": "^0.27.3" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | solid-js: ^1.3.13 5 | typescript: ^4.6.3 6 | vite: ^2.8.6 7 | vite-plugin-solid: ^2.2.6 8 | vite-plugin-windicss: ^1.8.3 9 | 10 | dependencies: 11 | solid-js: 1.3.13 12 | 13 | devDependencies: 14 | typescript: 4.6.3 15 | vite: 2.8.6 16 | vite-plugin-solid: 2.2.6 17 | vite-plugin-windicss: 1.8.3_vite@2.8.6 18 | 19 | packages: 20 | 21 | /@ampproject/remapping/2.1.2: 22 | resolution: {integrity: sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==} 23 | engines: {node: '>=6.0.0'} 24 | dependencies: 25 | '@jridgewell/trace-mapping': 0.3.4 26 | dev: true 27 | 28 | /@antfu/utils/0.5.0: 29 | resolution: {integrity: sha512-MrAQ/MrPSxbh1bBrmwJjORfJymw4IqSHFBXqvxaga3ZdDM+/zokYF8DjyJpSjY2QmpmgQrajDUBJOWrYeARfzA==} 30 | dev: true 31 | 32 | /@babel/code-frame/7.16.7: 33 | resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} 34 | engines: {node: '>=6.9.0'} 35 | dependencies: 36 | '@babel/highlight': 7.16.10 37 | dev: true 38 | 39 | /@babel/compat-data/7.17.7: 40 | resolution: {integrity: sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==} 41 | engines: {node: '>=6.9.0'} 42 | dev: true 43 | 44 | /@babel/core/7.17.8: 45 | resolution: {integrity: sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==} 46 | engines: {node: '>=6.9.0'} 47 | dependencies: 48 | '@ampproject/remapping': 2.1.2 49 | '@babel/code-frame': 7.16.7 50 | '@babel/generator': 7.17.7 51 | '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.8 52 | '@babel/helper-module-transforms': 7.17.7 53 | '@babel/helpers': 7.17.8 54 | '@babel/parser': 7.17.8 55 | '@babel/template': 7.16.7 56 | '@babel/traverse': 7.17.3 57 | '@babel/types': 7.17.0 58 | convert-source-map: 1.8.0 59 | debug: 4.3.4 60 | gensync: 1.0.0-beta.2 61 | json5: 2.2.1 62 | semver: 6.3.0 63 | transitivePeerDependencies: 64 | - supports-color 65 | dev: true 66 | 67 | /@babel/generator/7.17.7: 68 | resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} 69 | engines: {node: '>=6.9.0'} 70 | dependencies: 71 | '@babel/types': 7.17.0 72 | jsesc: 2.5.2 73 | source-map: 0.5.7 74 | dev: true 75 | 76 | /@babel/helper-annotate-as-pure/7.16.7: 77 | resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} 78 | engines: {node: '>=6.9.0'} 79 | dependencies: 80 | '@babel/types': 7.17.0 81 | dev: true 82 | 83 | /@babel/helper-compilation-targets/7.17.7_@babel+core@7.17.8: 84 | resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} 85 | engines: {node: '>=6.9.0'} 86 | peerDependencies: 87 | '@babel/core': ^7.0.0 88 | dependencies: 89 | '@babel/compat-data': 7.17.7 90 | '@babel/core': 7.17.8 91 | '@babel/helper-validator-option': 7.16.7 92 | browserslist: 4.20.2 93 | semver: 6.3.0 94 | dev: true 95 | 96 | /@babel/helper-create-class-features-plugin/7.17.6_@babel+core@7.17.8: 97 | resolution: {integrity: sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==} 98 | engines: {node: '>=6.9.0'} 99 | peerDependencies: 100 | '@babel/core': ^7.0.0 101 | dependencies: 102 | '@babel/core': 7.17.8 103 | '@babel/helper-annotate-as-pure': 7.16.7 104 | '@babel/helper-environment-visitor': 7.16.7 105 | '@babel/helper-function-name': 7.16.7 106 | '@babel/helper-member-expression-to-functions': 7.17.7 107 | '@babel/helper-optimise-call-expression': 7.16.7 108 | '@babel/helper-replace-supers': 7.16.7 109 | '@babel/helper-split-export-declaration': 7.16.7 110 | transitivePeerDependencies: 111 | - supports-color 112 | dev: true 113 | 114 | /@babel/helper-environment-visitor/7.16.7: 115 | resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} 116 | engines: {node: '>=6.9.0'} 117 | dependencies: 118 | '@babel/types': 7.17.0 119 | dev: true 120 | 121 | /@babel/helper-function-name/7.16.7: 122 | resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==} 123 | engines: {node: '>=6.9.0'} 124 | dependencies: 125 | '@babel/helper-get-function-arity': 7.16.7 126 | '@babel/template': 7.16.7 127 | '@babel/types': 7.17.0 128 | dev: true 129 | 130 | /@babel/helper-get-function-arity/7.16.7: 131 | resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==} 132 | engines: {node: '>=6.9.0'} 133 | dependencies: 134 | '@babel/types': 7.17.0 135 | dev: true 136 | 137 | /@babel/helper-hoist-variables/7.16.7: 138 | resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} 139 | engines: {node: '>=6.9.0'} 140 | dependencies: 141 | '@babel/types': 7.17.0 142 | dev: true 143 | 144 | /@babel/helper-member-expression-to-functions/7.17.7: 145 | resolution: {integrity: sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==} 146 | engines: {node: '>=6.9.0'} 147 | dependencies: 148 | '@babel/types': 7.17.0 149 | dev: true 150 | 151 | /@babel/helper-module-imports/7.16.0: 152 | resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} 153 | engines: {node: '>=6.9.0'} 154 | dependencies: 155 | '@babel/types': 7.17.0 156 | dev: true 157 | 158 | /@babel/helper-module-imports/7.16.7: 159 | resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} 160 | engines: {node: '>=6.9.0'} 161 | dependencies: 162 | '@babel/types': 7.17.0 163 | dev: true 164 | 165 | /@babel/helper-module-transforms/7.17.7: 166 | resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} 167 | engines: {node: '>=6.9.0'} 168 | dependencies: 169 | '@babel/helper-environment-visitor': 7.16.7 170 | '@babel/helper-module-imports': 7.16.7 171 | '@babel/helper-simple-access': 7.17.7 172 | '@babel/helper-split-export-declaration': 7.16.7 173 | '@babel/helper-validator-identifier': 7.16.7 174 | '@babel/template': 7.16.7 175 | '@babel/traverse': 7.17.3 176 | '@babel/types': 7.17.0 177 | transitivePeerDependencies: 178 | - supports-color 179 | dev: true 180 | 181 | /@babel/helper-optimise-call-expression/7.16.7: 182 | resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==} 183 | engines: {node: '>=6.9.0'} 184 | dependencies: 185 | '@babel/types': 7.17.0 186 | dev: true 187 | 188 | /@babel/helper-plugin-utils/7.16.7: 189 | resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} 190 | engines: {node: '>=6.9.0'} 191 | dev: true 192 | 193 | /@babel/helper-replace-supers/7.16.7: 194 | resolution: {integrity: sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==} 195 | engines: {node: '>=6.9.0'} 196 | dependencies: 197 | '@babel/helper-environment-visitor': 7.16.7 198 | '@babel/helper-member-expression-to-functions': 7.17.7 199 | '@babel/helper-optimise-call-expression': 7.16.7 200 | '@babel/traverse': 7.17.3 201 | '@babel/types': 7.17.0 202 | transitivePeerDependencies: 203 | - supports-color 204 | dev: true 205 | 206 | /@babel/helper-simple-access/7.17.7: 207 | resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==} 208 | engines: {node: '>=6.9.0'} 209 | dependencies: 210 | '@babel/types': 7.17.0 211 | dev: true 212 | 213 | /@babel/helper-split-export-declaration/7.16.7: 214 | resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} 215 | engines: {node: '>=6.9.0'} 216 | dependencies: 217 | '@babel/types': 7.17.0 218 | dev: true 219 | 220 | /@babel/helper-validator-identifier/7.16.7: 221 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 222 | engines: {node: '>=6.9.0'} 223 | dev: true 224 | 225 | /@babel/helper-validator-option/7.16.7: 226 | resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} 227 | engines: {node: '>=6.9.0'} 228 | dev: true 229 | 230 | /@babel/helpers/7.17.8: 231 | resolution: {integrity: sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==} 232 | engines: {node: '>=6.9.0'} 233 | dependencies: 234 | '@babel/template': 7.16.7 235 | '@babel/traverse': 7.17.3 236 | '@babel/types': 7.17.0 237 | transitivePeerDependencies: 238 | - supports-color 239 | dev: true 240 | 241 | /@babel/highlight/7.16.10: 242 | resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==} 243 | engines: {node: '>=6.9.0'} 244 | dependencies: 245 | '@babel/helper-validator-identifier': 7.16.7 246 | chalk: 2.4.2 247 | js-tokens: 4.0.0 248 | dev: true 249 | 250 | /@babel/parser/7.17.8: 251 | resolution: {integrity: sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==} 252 | engines: {node: '>=6.0.0'} 253 | hasBin: true 254 | dev: true 255 | 256 | /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.8: 257 | resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} 258 | engines: {node: '>=6.9.0'} 259 | peerDependencies: 260 | '@babel/core': ^7.0.0-0 261 | dependencies: 262 | '@babel/core': 7.17.8 263 | '@babel/helper-plugin-utils': 7.16.7 264 | dev: true 265 | 266 | /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.17.8: 267 | resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} 268 | engines: {node: '>=6.9.0'} 269 | peerDependencies: 270 | '@babel/core': ^7.0.0-0 271 | dependencies: 272 | '@babel/core': 7.17.8 273 | '@babel/helper-plugin-utils': 7.16.7 274 | dev: true 275 | 276 | /@babel/plugin-transform-typescript/7.16.8_@babel+core@7.17.8: 277 | resolution: {integrity: sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==} 278 | engines: {node: '>=6.9.0'} 279 | peerDependencies: 280 | '@babel/core': ^7.0.0-0 281 | dependencies: 282 | '@babel/core': 7.17.8 283 | '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.17.8 284 | '@babel/helper-plugin-utils': 7.16.7 285 | '@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.17.8 286 | transitivePeerDependencies: 287 | - supports-color 288 | dev: true 289 | 290 | /@babel/preset-typescript/7.16.7_@babel+core@7.17.8: 291 | resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} 292 | engines: {node: '>=6.9.0'} 293 | peerDependencies: 294 | '@babel/core': ^7.0.0-0 295 | dependencies: 296 | '@babel/core': 7.17.8 297 | '@babel/helper-plugin-utils': 7.16.7 298 | '@babel/helper-validator-option': 7.16.7 299 | '@babel/plugin-transform-typescript': 7.16.8_@babel+core@7.17.8 300 | transitivePeerDependencies: 301 | - supports-color 302 | dev: true 303 | 304 | /@babel/template/7.16.7: 305 | resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} 306 | engines: {node: '>=6.9.0'} 307 | dependencies: 308 | '@babel/code-frame': 7.16.7 309 | '@babel/parser': 7.17.8 310 | '@babel/types': 7.17.0 311 | dev: true 312 | 313 | /@babel/traverse/7.17.3: 314 | resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} 315 | engines: {node: '>=6.9.0'} 316 | dependencies: 317 | '@babel/code-frame': 7.16.7 318 | '@babel/generator': 7.17.7 319 | '@babel/helper-environment-visitor': 7.16.7 320 | '@babel/helper-function-name': 7.16.7 321 | '@babel/helper-hoist-variables': 7.16.7 322 | '@babel/helper-split-export-declaration': 7.16.7 323 | '@babel/parser': 7.17.8 324 | '@babel/types': 7.17.0 325 | debug: 4.3.4 326 | globals: 11.12.0 327 | transitivePeerDependencies: 328 | - supports-color 329 | dev: true 330 | 331 | /@babel/types/7.17.0: 332 | resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} 333 | engines: {node: '>=6.9.0'} 334 | dependencies: 335 | '@babel/helper-validator-identifier': 7.16.7 336 | to-fast-properties: 2.0.0 337 | dev: true 338 | 339 | /@jridgewell/resolve-uri/3.0.5: 340 | resolution: {integrity: sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==} 341 | engines: {node: '>=6.0.0'} 342 | dev: true 343 | 344 | /@jridgewell/sourcemap-codec/1.4.11: 345 | resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==} 346 | dev: true 347 | 348 | /@jridgewell/trace-mapping/0.3.4: 349 | resolution: {integrity: sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==} 350 | dependencies: 351 | '@jridgewell/resolve-uri': 3.0.5 352 | '@jridgewell/sourcemap-codec': 1.4.11 353 | dev: true 354 | 355 | /@nodelib/fs.scandir/2.1.5: 356 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 357 | engines: {node: '>= 8'} 358 | dependencies: 359 | '@nodelib/fs.stat': 2.0.5 360 | run-parallel: 1.2.0 361 | dev: true 362 | 363 | /@nodelib/fs.stat/2.0.5: 364 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 365 | engines: {node: '>= 8'} 366 | dev: true 367 | 368 | /@nodelib/fs.walk/1.2.8: 369 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 370 | engines: {node: '>= 8'} 371 | dependencies: 372 | '@nodelib/fs.scandir': 2.1.5 373 | fastq: 1.13.0 374 | dev: true 375 | 376 | /@windicss/config/1.8.3: 377 | resolution: {integrity: sha512-1fvfZhRD7WfV/Xh6uIAYKIdbQWrwEgSdkFlHiLPzMDS44KjwNZILDzLAz9Y2W5H2K4MLGgGMnzGS89ECyjc0Ww==} 378 | dependencies: 379 | debug: 4.3.4 380 | jiti: 1.13.0 381 | windicss: 3.5.1 382 | transitivePeerDependencies: 383 | - supports-color 384 | dev: true 385 | 386 | /@windicss/plugin-utils/1.8.3: 387 | resolution: {integrity: sha512-emlMeDt73uNV1ZofLTDogcxqL9aZ5uIRYkjeHlrWiaDozFbX6Jc+a6eRo9Ieaar3JUryl6AnecTPHAiFDl4IXg==} 388 | dependencies: 389 | '@antfu/utils': 0.5.0 390 | '@windicss/config': 1.8.3 391 | debug: 4.3.4 392 | fast-glob: 3.2.11 393 | magic-string: 0.25.9 394 | micromatch: 4.0.5 395 | windicss: 3.5.1 396 | transitivePeerDependencies: 397 | - supports-color 398 | dev: true 399 | 400 | /ansi-styles/3.2.1: 401 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 402 | engines: {node: '>=4'} 403 | dependencies: 404 | color-convert: 1.9.3 405 | dev: true 406 | 407 | /babel-plugin-jsx-dom-expressions/0.32.11_@babel+core@7.17.8: 408 | resolution: {integrity: sha512-hytqY33SGW6B3obSLt8K5X510UwtNkTktCCWgwba+QOOV0CowDFiqeL+0ru895FLacFaYANHFTu1y76dg3GVtw==} 409 | dependencies: 410 | '@babel/helper-module-imports': 7.16.0 411 | '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.8 412 | '@babel/types': 7.17.0 413 | html-entities: 2.3.2 414 | transitivePeerDependencies: 415 | - '@babel/core' 416 | dev: true 417 | 418 | /babel-preset-solid/1.3.13_@babel+core@7.17.8: 419 | resolution: {integrity: sha512-MZnmsceI9yiHlwwFCSALTJhadk2eea/+2UP4ec4jkPZFR+XRKTLoIwRkrBh7uLtvHF+3lHGyUaXtZukOmmUwhA==} 420 | dependencies: 421 | babel-plugin-jsx-dom-expressions: 0.32.11_@babel+core@7.17.8 422 | transitivePeerDependencies: 423 | - '@babel/core' 424 | dev: true 425 | 426 | /braces/3.0.2: 427 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 428 | engines: {node: '>=8'} 429 | dependencies: 430 | fill-range: 7.0.1 431 | dev: true 432 | 433 | /browserslist/4.20.2: 434 | resolution: {integrity: sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==} 435 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 436 | hasBin: true 437 | dependencies: 438 | caniuse-lite: 1.0.30001320 439 | electron-to-chromium: 1.4.93 440 | escalade: 3.1.1 441 | node-releases: 2.0.2 442 | picocolors: 1.0.0 443 | dev: true 444 | 445 | /caniuse-lite/1.0.30001320: 446 | resolution: {integrity: sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==} 447 | dev: true 448 | 449 | /chalk/2.4.2: 450 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 451 | engines: {node: '>=4'} 452 | dependencies: 453 | ansi-styles: 3.2.1 454 | escape-string-regexp: 1.0.5 455 | supports-color: 5.5.0 456 | dev: true 457 | 458 | /color-convert/1.9.3: 459 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 460 | dependencies: 461 | color-name: 1.1.3 462 | dev: true 463 | 464 | /color-name/1.1.3: 465 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} 466 | dev: true 467 | 468 | /convert-source-map/1.8.0: 469 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} 470 | dependencies: 471 | safe-buffer: 5.1.2 472 | dev: true 473 | 474 | /debug/4.3.4: 475 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 476 | engines: {node: '>=6.0'} 477 | peerDependencies: 478 | supports-color: '*' 479 | peerDependenciesMeta: 480 | supports-color: 481 | optional: true 482 | dependencies: 483 | ms: 2.1.2 484 | dev: true 485 | 486 | /electron-to-chromium/1.4.93: 487 | resolution: {integrity: sha512-ywq9Pc5Gwwpv7NG767CtoU8xF3aAUQJjH9//Wy3MBCg4w5JSLbJUq2L8IsCdzPMjvSgxuue9WcVaTOyyxCL0aQ==} 488 | dev: true 489 | 490 | /esbuild-android-64/0.14.27: 491 | resolution: {integrity: sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==} 492 | engines: {node: '>=12'} 493 | cpu: [x64] 494 | os: [android] 495 | requiresBuild: true 496 | dev: true 497 | optional: true 498 | 499 | /esbuild-android-arm64/0.14.27: 500 | resolution: {integrity: sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==} 501 | engines: {node: '>=12'} 502 | cpu: [arm64] 503 | os: [android] 504 | requiresBuild: true 505 | dev: true 506 | optional: true 507 | 508 | /esbuild-darwin-64/0.14.27: 509 | resolution: {integrity: sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==} 510 | engines: {node: '>=12'} 511 | cpu: [x64] 512 | os: [darwin] 513 | requiresBuild: true 514 | dev: true 515 | optional: true 516 | 517 | /esbuild-darwin-arm64/0.14.27: 518 | resolution: {integrity: sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==} 519 | engines: {node: '>=12'} 520 | cpu: [arm64] 521 | os: [darwin] 522 | requiresBuild: true 523 | dev: true 524 | optional: true 525 | 526 | /esbuild-freebsd-64/0.14.27: 527 | resolution: {integrity: sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==} 528 | engines: {node: '>=12'} 529 | cpu: [x64] 530 | os: [freebsd] 531 | requiresBuild: true 532 | dev: true 533 | optional: true 534 | 535 | /esbuild-freebsd-arm64/0.14.27: 536 | resolution: {integrity: sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==} 537 | engines: {node: '>=12'} 538 | cpu: [arm64] 539 | os: [freebsd] 540 | requiresBuild: true 541 | dev: true 542 | optional: true 543 | 544 | /esbuild-linux-32/0.14.27: 545 | resolution: {integrity: sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==} 546 | engines: {node: '>=12'} 547 | cpu: [ia32] 548 | os: [linux] 549 | requiresBuild: true 550 | dev: true 551 | optional: true 552 | 553 | /esbuild-linux-64/0.14.27: 554 | resolution: {integrity: sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==} 555 | engines: {node: '>=12'} 556 | cpu: [x64] 557 | os: [linux] 558 | requiresBuild: true 559 | dev: true 560 | optional: true 561 | 562 | /esbuild-linux-arm/0.14.27: 563 | resolution: {integrity: sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==} 564 | engines: {node: '>=12'} 565 | cpu: [arm] 566 | os: [linux] 567 | requiresBuild: true 568 | dev: true 569 | optional: true 570 | 571 | /esbuild-linux-arm64/0.14.27: 572 | resolution: {integrity: sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==} 573 | engines: {node: '>=12'} 574 | cpu: [arm64] 575 | os: [linux] 576 | requiresBuild: true 577 | dev: true 578 | optional: true 579 | 580 | /esbuild-linux-mips64le/0.14.27: 581 | resolution: {integrity: sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==} 582 | engines: {node: '>=12'} 583 | cpu: [mips64el] 584 | os: [linux] 585 | requiresBuild: true 586 | dev: true 587 | optional: true 588 | 589 | /esbuild-linux-ppc64le/0.14.27: 590 | resolution: {integrity: sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==} 591 | engines: {node: '>=12'} 592 | cpu: [ppc64] 593 | os: [linux] 594 | requiresBuild: true 595 | dev: true 596 | optional: true 597 | 598 | /esbuild-linux-riscv64/0.14.27: 599 | resolution: {integrity: sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==} 600 | engines: {node: '>=12'} 601 | cpu: [riscv64] 602 | os: [linux] 603 | requiresBuild: true 604 | dev: true 605 | optional: true 606 | 607 | /esbuild-linux-s390x/0.14.27: 608 | resolution: {integrity: sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==} 609 | engines: {node: '>=12'} 610 | cpu: [s390x] 611 | os: [linux] 612 | requiresBuild: true 613 | dev: true 614 | optional: true 615 | 616 | /esbuild-netbsd-64/0.14.27: 617 | resolution: {integrity: sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==} 618 | engines: {node: '>=12'} 619 | cpu: [x64] 620 | os: [netbsd] 621 | requiresBuild: true 622 | dev: true 623 | optional: true 624 | 625 | /esbuild-openbsd-64/0.14.27: 626 | resolution: {integrity: sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==} 627 | engines: {node: '>=12'} 628 | cpu: [x64] 629 | os: [openbsd] 630 | requiresBuild: true 631 | dev: true 632 | optional: true 633 | 634 | /esbuild-sunos-64/0.14.27: 635 | resolution: {integrity: sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==} 636 | engines: {node: '>=12'} 637 | cpu: [x64] 638 | os: [sunos] 639 | requiresBuild: true 640 | dev: true 641 | optional: true 642 | 643 | /esbuild-windows-32/0.14.27: 644 | resolution: {integrity: sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==} 645 | engines: {node: '>=12'} 646 | cpu: [ia32] 647 | os: [win32] 648 | requiresBuild: true 649 | dev: true 650 | optional: true 651 | 652 | /esbuild-windows-64/0.14.27: 653 | resolution: {integrity: sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==} 654 | engines: {node: '>=12'} 655 | cpu: [x64] 656 | os: [win32] 657 | requiresBuild: true 658 | dev: true 659 | optional: true 660 | 661 | /esbuild-windows-arm64/0.14.27: 662 | resolution: {integrity: sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==} 663 | engines: {node: '>=12'} 664 | cpu: [arm64] 665 | os: [win32] 666 | requiresBuild: true 667 | dev: true 668 | optional: true 669 | 670 | /esbuild/0.14.27: 671 | resolution: {integrity: sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==} 672 | engines: {node: '>=12'} 673 | hasBin: true 674 | requiresBuild: true 675 | optionalDependencies: 676 | esbuild-android-64: 0.14.27 677 | esbuild-android-arm64: 0.14.27 678 | esbuild-darwin-64: 0.14.27 679 | esbuild-darwin-arm64: 0.14.27 680 | esbuild-freebsd-64: 0.14.27 681 | esbuild-freebsd-arm64: 0.14.27 682 | esbuild-linux-32: 0.14.27 683 | esbuild-linux-64: 0.14.27 684 | esbuild-linux-arm: 0.14.27 685 | esbuild-linux-arm64: 0.14.27 686 | esbuild-linux-mips64le: 0.14.27 687 | esbuild-linux-ppc64le: 0.14.27 688 | esbuild-linux-riscv64: 0.14.27 689 | esbuild-linux-s390x: 0.14.27 690 | esbuild-netbsd-64: 0.14.27 691 | esbuild-openbsd-64: 0.14.27 692 | esbuild-sunos-64: 0.14.27 693 | esbuild-windows-32: 0.14.27 694 | esbuild-windows-64: 0.14.27 695 | esbuild-windows-arm64: 0.14.27 696 | dev: true 697 | 698 | /escalade/3.1.1: 699 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 700 | engines: {node: '>=6'} 701 | dev: true 702 | 703 | /escape-string-regexp/1.0.5: 704 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} 705 | engines: {node: '>=0.8.0'} 706 | dev: true 707 | 708 | /fast-glob/3.2.11: 709 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 710 | engines: {node: '>=8.6.0'} 711 | dependencies: 712 | '@nodelib/fs.stat': 2.0.5 713 | '@nodelib/fs.walk': 1.2.8 714 | glob-parent: 5.1.2 715 | merge2: 1.4.1 716 | micromatch: 4.0.5 717 | dev: true 718 | 719 | /fastq/1.13.0: 720 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 721 | dependencies: 722 | reusify: 1.0.4 723 | dev: true 724 | 725 | /fill-range/7.0.1: 726 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 727 | engines: {node: '>=8'} 728 | dependencies: 729 | to-regex-range: 5.0.1 730 | dev: true 731 | 732 | /fsevents/2.3.2: 733 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 734 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 735 | os: [darwin] 736 | requiresBuild: true 737 | dev: true 738 | optional: true 739 | 740 | /function-bind/1.1.1: 741 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 742 | dev: true 743 | 744 | /gensync/1.0.0-beta.2: 745 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 746 | engines: {node: '>=6.9.0'} 747 | dev: true 748 | 749 | /glob-parent/5.1.2: 750 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 751 | engines: {node: '>= 6'} 752 | dependencies: 753 | is-glob: 4.0.3 754 | dev: true 755 | 756 | /globals/11.12.0: 757 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 758 | engines: {node: '>=4'} 759 | dev: true 760 | 761 | /has-flag/3.0.0: 762 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} 763 | engines: {node: '>=4'} 764 | dev: true 765 | 766 | /has/1.0.3: 767 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 768 | engines: {node: '>= 0.4.0'} 769 | dependencies: 770 | function-bind: 1.1.1 771 | dev: true 772 | 773 | /html-entities/2.3.2: 774 | resolution: {integrity: sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==} 775 | dev: true 776 | 777 | /is-core-module/2.8.1: 778 | resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} 779 | dependencies: 780 | has: 1.0.3 781 | dev: true 782 | 783 | /is-extglob/2.1.1: 784 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 785 | engines: {node: '>=0.10.0'} 786 | dev: true 787 | 788 | /is-glob/4.0.3: 789 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 790 | engines: {node: '>=0.10.0'} 791 | dependencies: 792 | is-extglob: 2.1.1 793 | dev: true 794 | 795 | /is-number/7.0.0: 796 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 797 | engines: {node: '>=0.12.0'} 798 | dev: true 799 | 800 | /is-what/4.1.7: 801 | resolution: {integrity: sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==} 802 | engines: {node: '>=12.13'} 803 | dev: true 804 | 805 | /jiti/1.13.0: 806 | resolution: {integrity: sha512-/n9mNxZj/HDSrincJ6RP+L+yXbpnB8FybySBa+IjIaoH9FIxBbrbRT5XUbe8R7zuVM2AQqNMNDDqz0bzx3znOQ==} 807 | hasBin: true 808 | dev: true 809 | 810 | /js-tokens/4.0.0: 811 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 812 | dev: true 813 | 814 | /jsesc/2.5.2: 815 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 816 | engines: {node: '>=4'} 817 | hasBin: true 818 | dev: true 819 | 820 | /json5/2.2.1: 821 | resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} 822 | engines: {node: '>=6'} 823 | hasBin: true 824 | dev: true 825 | 826 | /kolorist/1.5.1: 827 | resolution: {integrity: sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==} 828 | dev: true 829 | 830 | /magic-string/0.25.9: 831 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 832 | dependencies: 833 | sourcemap-codec: 1.4.8 834 | dev: true 835 | 836 | /merge-anything/5.0.2: 837 | resolution: {integrity: sha512-POPQBWkBC0vxdgzRJ2Mkj4+2NTKbvkHo93ih+jGDhNMLzIw+rYKjO7949hOQM2X7DxMHH1uoUkwWFLIzImw7gA==} 838 | engines: {node: '>=12.13'} 839 | dependencies: 840 | is-what: 4.1.7 841 | ts-toolbelt: 9.6.0 842 | dev: true 843 | 844 | /merge2/1.4.1: 845 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 846 | engines: {node: '>= 8'} 847 | dev: true 848 | 849 | /micromatch/4.0.5: 850 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 851 | engines: {node: '>=8.6'} 852 | dependencies: 853 | braces: 3.0.2 854 | picomatch: 2.3.1 855 | dev: true 856 | 857 | /ms/2.1.2: 858 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 859 | dev: true 860 | 861 | /nanoid/3.3.1: 862 | resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} 863 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 864 | hasBin: true 865 | dev: true 866 | 867 | /node-releases/2.0.2: 868 | resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} 869 | dev: true 870 | 871 | /path-parse/1.0.7: 872 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 873 | dev: true 874 | 875 | /picocolors/1.0.0: 876 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 877 | dev: true 878 | 879 | /picomatch/2.3.1: 880 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 881 | engines: {node: '>=8.6'} 882 | dev: true 883 | 884 | /postcss/8.4.12: 885 | resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} 886 | engines: {node: ^10 || ^12 || >=14} 887 | dependencies: 888 | nanoid: 3.3.1 889 | picocolors: 1.0.0 890 | source-map-js: 1.0.2 891 | dev: true 892 | 893 | /queue-microtask/1.2.3: 894 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 895 | dev: true 896 | 897 | /resolve/1.22.0: 898 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 899 | hasBin: true 900 | dependencies: 901 | is-core-module: 2.8.1 902 | path-parse: 1.0.7 903 | supports-preserve-symlinks-flag: 1.0.0 904 | dev: true 905 | 906 | /reusify/1.0.4: 907 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 908 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 909 | dev: true 910 | 911 | /rollup/2.70.1: 912 | resolution: {integrity: sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==} 913 | engines: {node: '>=10.0.0'} 914 | hasBin: true 915 | optionalDependencies: 916 | fsevents: 2.3.2 917 | dev: true 918 | 919 | /run-parallel/1.2.0: 920 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 921 | dependencies: 922 | queue-microtask: 1.2.3 923 | dev: true 924 | 925 | /safe-buffer/5.1.2: 926 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 927 | dev: true 928 | 929 | /semver/6.3.0: 930 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 931 | hasBin: true 932 | dev: true 933 | 934 | /solid-js/1.3.13: 935 | resolution: {integrity: sha512-1EBEIW9u2yqT5QNjFdvz/tMAoKsDdaRA2Jbgykd2Dt13Ia0D4mV+BFvPkOaseSyu7DsMKS23+ZZofV8BVKmpuQ==} 936 | 937 | /solid-refresh/0.4.0_solid-js@1.3.13: 938 | resolution: {integrity: sha512-5XCUz845n/sHPzKK2i2G2EeV61tAmzv6SqzqhXcPaYhrgzVy7nKTQaBpKK8InKrriq9Z2JFF/mguIU00t/73xw==} 939 | peerDependencies: 940 | solid-js: ^1.3.0 941 | dependencies: 942 | '@babel/generator': 7.17.7 943 | '@babel/helper-module-imports': 7.16.7 944 | '@babel/types': 7.17.0 945 | solid-js: 1.3.13 946 | dev: true 947 | 948 | /source-map-js/1.0.2: 949 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 950 | engines: {node: '>=0.10.0'} 951 | dev: true 952 | 953 | /source-map/0.5.7: 954 | resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} 955 | engines: {node: '>=0.10.0'} 956 | dev: true 957 | 958 | /sourcemap-codec/1.4.8: 959 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 960 | dev: true 961 | 962 | /supports-color/5.5.0: 963 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 964 | engines: {node: '>=4'} 965 | dependencies: 966 | has-flag: 3.0.0 967 | dev: true 968 | 969 | /supports-preserve-symlinks-flag/1.0.0: 970 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 971 | engines: {node: '>= 0.4'} 972 | dev: true 973 | 974 | /to-fast-properties/2.0.0: 975 | resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} 976 | engines: {node: '>=4'} 977 | dev: true 978 | 979 | /to-regex-range/5.0.1: 980 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 981 | engines: {node: '>=8.0'} 982 | dependencies: 983 | is-number: 7.0.0 984 | dev: true 985 | 986 | /ts-toolbelt/9.6.0: 987 | resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} 988 | dev: true 989 | 990 | /typescript/4.6.3: 991 | resolution: {integrity: sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==} 992 | engines: {node: '>=4.2.0'} 993 | hasBin: true 994 | dev: true 995 | 996 | /vite-plugin-solid/2.2.6: 997 | resolution: {integrity: sha512-J1RnmqkZZJSNYDW7vZj0giKKHLWGr9tS/gxR70WDSTYfhyXrgukbZdIfSEFbtrsg8ZiQ2t2zXcvkWoeefenqKw==} 998 | dependencies: 999 | '@babel/core': 7.17.8 1000 | '@babel/preset-typescript': 7.16.7_@babel+core@7.17.8 1001 | babel-preset-solid: 1.3.13_@babel+core@7.17.8 1002 | merge-anything: 5.0.2 1003 | solid-js: 1.3.13 1004 | solid-refresh: 0.4.0_solid-js@1.3.13 1005 | vite: 2.8.6 1006 | transitivePeerDependencies: 1007 | - less 1008 | - sass 1009 | - stylus 1010 | - supports-color 1011 | dev: true 1012 | 1013 | /vite-plugin-windicss/1.8.3_vite@2.8.6: 1014 | resolution: {integrity: sha512-RIw2GD6H6cKNE8wZXVOBs4L1uTicVS0FaAkeqXvy1oyuXLC4SXmvnzEuoK0+qFuWJjW0ECNwE8eU+ZZhzNQKUg==} 1015 | peerDependencies: 1016 | vite: ^2.0.1 1017 | dependencies: 1018 | '@windicss/plugin-utils': 1.8.3 1019 | debug: 4.3.4 1020 | kolorist: 1.5.1 1021 | vite: 2.8.6 1022 | windicss: 3.5.1 1023 | transitivePeerDependencies: 1024 | - supports-color 1025 | dev: true 1026 | 1027 | /vite/2.8.6: 1028 | resolution: {integrity: sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug==} 1029 | engines: {node: '>=12.2.0'} 1030 | hasBin: true 1031 | peerDependencies: 1032 | less: '*' 1033 | sass: '*' 1034 | stylus: '*' 1035 | peerDependenciesMeta: 1036 | less: 1037 | optional: true 1038 | sass: 1039 | optional: true 1040 | stylus: 1041 | optional: true 1042 | dependencies: 1043 | esbuild: 0.14.27 1044 | postcss: 8.4.12 1045 | resolve: 1.22.0 1046 | rollup: 2.70.1 1047 | optionalDependencies: 1048 | fsevents: 2.3.2 1049 | dev: true 1050 | 1051 | /windicss/3.5.1: 1052 | resolution: {integrity: sha512-E1hYZATcZFci/XhGS0sJAMRxULjnK+glNukE78Ku7xeb3jxgMY55fFOdIrav+GjQCsgR+IZxPq9/DwmO6eyc4Q==} 1053 | engines: {node: '>= 12'} 1054 | hasBin: true 1055 | dev: true 1056 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], 3 | plugins: { 4 | tailwindcss: {}, 5 | autoprefixer: {}, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /public/assets/img/react2solid-hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrjanbiah/react2solid/8a3839d29d6394b1899066be4d9146f87dbe99e0/public/assets/img/react2solid-hero.png -------------------------------------------------------------------------------- /public/assets/reactjs-solidjs-libs-alternatives.csv: -------------------------------------------------------------------------------- 1 | Keywords,ReactJS Lib,ReactJS Lib URL,SolidJS Lib,SolidJS Lib URL,API Match Score 2 | "meta,title,head,SEO",next/head,https://nextjs.org/docs/api-reference/next/head,solid-meta,https://github.com/solidjs/solid-meta,90 3 | "virtualized,window,performance",react-virtualized,https://bvaughn.github.io/react-virtualized/,solid-virtual-container,https://github.com/minht11/solid-virtual-container,50 4 | "virtualized,window,performance",react-window,https://github.com/bvaughn/react-window,solid-windowed,https://github.com/titoBouzout/solid-windowed,40 5 | markdown,remark-react,https://github.com/remarkjs/remark-react,solid-marked,https://github.com/LXSMNSYC/solid-marked,40 6 | "table,sort,pagination",sb-react-table,https://github.com/steelbrain/react-table,solid-simple-table,https://github.com/aminya/solid-simple-table,90 7 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import type { Component } from 'solid-js'; 2 | import { Link, useRoutes, useLocation } from 'solid-app-router'; 3 | 4 | import { routes } from './routes'; 5 | 6 | const App: Component = () => { 7 | const location = useLocation(); 8 | const Route = useRoutes(routes); 9 | 10 | 11 | return ( 12 | <> 13 |
14 |
15 | 16 | 17 | 18 | 19 | react2solid 20 | 21 | 24 | 25 | 29 | 30 | Convert 31 | 32 | 33 | 34 | 35 |
36 |
37 | 38 |
39 | 40 |
41 | 42 | 77 | 78 | ); 79 | }; 80 | 81 | export default App; 82 | -------------------------------------------------------------------------------- /src/components/JqInput.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrjanbiah/react2solid/8a3839d29d6394b1899066be4d9146f87dbe99e0/src/components/JqInput.tsx -------------------------------------------------------------------------------- /src/components/ReactAstEditor.tsx: -------------------------------------------------------------------------------- 1 | import { Component } from "solid-js"; 2 | 3 | const ReactAstEditor: Component = (props) => { 4 | return ( 5 | <> 6 | 9 | 10 | ); 11 | }; 12 | 13 | export default ReactAstEditor; -------------------------------------------------------------------------------- /src/components/ReactCodeEditor.tsx: -------------------------------------------------------------------------------- 1 | import { Component } from "solid-js"; 2 | 3 | const ReactCodeEditor: Component = (props) => { 4 | return ( 5 | <> 6 | 9 | 10 | ); 11 | }; 12 | 13 | export default ReactCodeEditor; -------------------------------------------------------------------------------- /src/components/SolidAstEditor.tsx: -------------------------------------------------------------------------------- 1 | import { Component } from "solid-js"; 2 | 3 | const SolidAstEditor: Component = (props) => { 4 | return ( 5 | <> 6 | 9 | 10 | ); 11 | }; 12 | 13 | export default SolidAstEditor; -------------------------------------------------------------------------------- /src/components/SolidCodeEditor.tsx: -------------------------------------------------------------------------------- 1 | import { Component } from "solid-js"; 2 | 3 | const SolidCodeEditor: Component = (props) => { 4 | return ( 5 | <> 6 | 9 | 10 | ); 11 | }; 12 | 13 | export default SolidCodeEditor; -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | /* @refresh reload */ 2 | import './index.css'; 3 | import { render } from 'solid-js/web'; 4 | import { Router, hashIntegration} from 'solid-app-router'; 5 | import { MetaProvider } from 'solid-meta'; 6 | 7 | import App from './App'; 8 | 9 | render( 10 | () => ( 11 | 12 | 13 | 14 | 15 | 16 | ), 17 | document.getElementById('root') as HTMLElement, 18 | ); 19 | -------------------------------------------------------------------------------- /src/lib/csv.ts: -------------------------------------------------------------------------------- 1 | // https://stackoverflow.com/questions/1293147/example-javascript-code-to-parse-csv-data/14991797#14991797 2 | export function parseCSV(str) { 3 | var arr = []; 4 | var quote = false; // 'true' means we're inside a quoted field 5 | 6 | // Iterate over each character, keep track of current row and column (of the returned array) 7 | for (var row = 0, col = 0, c = 0; c < str.length; c++) { 8 | var cc = str[c], nc = str[c + 1]; // Current character, next character 9 | arr[row] = arr[row] || []; // Create a new row if necessary 10 | arr[row][col] = arr[row][col] || ''; // Create a new column (start with empty string) if necessary 11 | 12 | // If the current character is a quotation mark, and we're inside a 13 | // quoted field, and the next character is also a quotation mark, 14 | // add a quotation mark to the current column and skip the next character 15 | if (cc == '"' && quote && nc == '"') { arr[row][col] += cc; ++c; continue; } 16 | 17 | // If it's just one quotation mark, begin/end quoted field 18 | if (cc == '"') { quote = !quote; continue; } 19 | 20 | // If it's a comma and we're not in a quoted field, move on to the next column 21 | if (cc == ',' && !quote) { ++col; continue; } 22 | 23 | // If it's a newline (CRLF) and we're not in a quoted field, skip the next character 24 | // and move on to the next row and move to column 0 of that new row 25 | if (cc == '\r' && nc == '\n' && !quote) { ++row; col = 0; ++c; continue; } 26 | 27 | // If it's a newline (LF or CR) and we're not in a quoted field, 28 | // move on to the next row and move to column 0 of that new row 29 | if (cc == '\n' && !quote) { ++row; col = 0; continue; } 30 | if (cc == '\r' && !quote) { ++row; col = 0; continue; } 31 | 32 | // Otherwise, append the current character to the current column 33 | arr[row][col] += cc; 34 | } 35 | return arr; 36 | } 37 | 38 | // GitHub Copilot :-) 39 | export function csvString2json(csvString) { 40 | const csvArray = parseCSV(csvString); 41 | const jsonArray = []; 42 | for (let i = 1; i < csvArray.length; i++) { 43 | const row = csvArray[i]; 44 | const jsonRow = {}; 45 | for (let j = 0; j < row.length; j++) { 46 | const key = csvArray[0][j]; 47 | const value = row[j]; 48 | jsonRow[key] = value; 49 | } 50 | jsonArray.push(jsonRow); 51 | } 52 | return jsonArray; 53 | } -------------------------------------------------------------------------------- /src/lib/jqAsyncChain.ts: -------------------------------------------------------------------------------- 1 | // Credits: @fabiospampinato / https://discord.com/channels/722131463138705510/962717115406774322/962720783191396452 2 | 3 | import jq from 'jq-web'; 4 | 5 | // transformers means jq selectors as they have manipulation functions too 6 | 7 | export async function jqAsyncChain(transformers, initialJson?) { 8 | let json = initialJson; 9 | for (const transformer of transformers) { 10 | try { 11 | json = await jq.promised.json(json, transformer); 12 | } catch { } 13 | } 14 | return json; 15 | } 16 | -------------------------------------------------------------------------------- /src/lib/jsonStringifyEscape.ts: -------------------------------------------------------------------------------- 1 | // https://stackoverflow.com/questions/4253367/how-to-escape-a-json-string-containing-newline-characters-using-javascript/14137856#14137856 2 | // Unfortunately, JSON.stringify() doesn't escape newlines in strings, hence JSON.parse() will fail 3 | // pass it as a second param to JSON.stringify() 4 | export function jsonStringifyEscape(key: any, val: any) { 5 | if (typeof (val) != "string") { 6 | return val; 7 | } 8 | return val 9 | .replace(/[\\]/g, '\\\\') 10 | .replace(/[\/]/g, '\\/') 11 | .replace(/[\b]/g, '\\b') 12 | .replace(/[\f]/g, '\\f') 13 | .replace(/[\n]/g, '\\n') 14 | .replace(/[\r]/g, '\\r') 15 | .replace(/[\t]/g, '\\t') 16 | .replace(/[\"]/g, '\\"') 17 | .replace(/\\'/g, "\\'"); 18 | } 19 | 20 | -------------------------------------------------------------------------------- /src/pages/about.tsx: -------------------------------------------------------------------------------- 1 | import { Title, Meta } from "solid-meta"; 2 | 3 | const About = () => { 4 | const pageTitle = 'About react2solid'; 5 | const pageDescription = 'react2solid is a set of utilities for the React to Solid conversion.'; 6 | 7 | return ( 8 | <> 9 | 10 | 11 | {pageTitle} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 |
29 |
30 |

{pageTitle}

31 |

{pageDescription}

32 |
33 |
34 |
35 | 36 |
37 |
38 |

Original idea about the project was to build a converter tool for ReactJS to SolidJS—without hardcoding the parser logic.

39 |

Hence, initially started with the SWC project (Rust) and JMESPath. But, due to multiple challenges and crossroads... and due to SolidHack's deadline, currently using Babel, jq-web and SolidJS. Eventually, have to move to SWC and make it Rust centric. 40 |

41 |
42 |
43 |
44 | 45 | ); 46 | }; 47 | 48 | export default About; -------------------------------------------------------------------------------- /src/pages/builder.tsx: -------------------------------------------------------------------------------- 1 | import generate from "@babel/generator"; 2 | import { parse } from "@babel/parser"; 3 | import { createEffect, createSignal, Show } from "solid-js"; 4 | import { Title, Meta } from "solid-meta"; 5 | import ReactCodeEditor from "../components/ReactCodeEditor"; 6 | import SolidCodeEditor from "../components/SolidCodeEditor"; 7 | import { jqAsyncChain } from "../lib/jqAsyncChain"; 8 | import ReactAstEditor from "../components/ReactAstEditor"; 9 | import SolidAstEditor from "../components/SolidAstEditor"; 10 | import { jsonStringifyEscape } from "../lib/jsonStringifyEscape"; 11 | 12 | const Builder = () => { 13 | const pageTitle = 'Build ReactJS to SolidJS Transformer Rules'; 14 | const pageDescription = 'Online builder for React to SolidJS transformer rules'; 15 | 16 | const [reactCode, setReactCode] = createSignal(''); 17 | const [reactAst, setReactAst] = createSignal(''); 18 | const [jqTransformer, setJqTransformer] = createSignal('.'); 19 | const [solidAst, setSolidAst] = createSignal(''); 20 | const [solidCode, setSolidCode] = createSignal(); 21 | const [reactErrorMessage, setReactErrorMessage] = createSignal(''); 22 | 23 | createEffect(() => { 24 | let reactCodeString = reactCode(); 25 | 26 | /* 27 | if (stringTransformers.length > 0) { 28 | // run through string transformers... 29 | stringTransformers.forEach(transformer => { 30 | reactCodeString = reactCodeString.replaceAll(transformer.search, transformer.replace); 31 | }); 32 | // update here in case, if there are no jq transformers... 33 | setSolidCode(reactCodeString); 34 | } */ 35 | if (jqTransformer().length > 0) { 36 | let l_reactAst; 37 | setReactErrorMessage(''); // clear error message 38 | try { 39 | l_reactAst = parse(reactCodeString, { sourceType: "module", plugins: ["jsx"], errorRecovery: false}); 40 | setReactAst(JSON.stringify(l_reactAst, jsonStringifyEscape, 2)); 41 | } catch (e) { 42 | setReactErrorMessage(e.message); 43 | setReactAst(''); 44 | } 45 | let l_solidAst = l_reactAst; 46 | jqAsyncChain([jqTransformer()], l_solidAst).then(result => { 47 | setSolidAst(JSON.stringify(result, jsonStringifyEscape, 2)); 48 | const { code: l_solidCode } = generate(result); 49 | setSolidCode(l_solidCode); 50 | }); 51 | } 52 | }); 53 | 54 | return ( 55 | <> 56 | 57 | 58 | {pageTitle} 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 |
75 |
76 |
77 |

{pageTitle}

78 |

{pageDescription}

79 |
80 |
81 |

Notice: Work in progress. Only jq transformer related stuffs are done.

82 |
83 | 84 |
85 |
86 |
87 |
88 |

1 ReactJS Code

89 | 90 |
}> 91 |
92 |

{reactErrorMessage}

93 |
94 | 95 |
96 | 97 |
98 |

5 SolidJS Code

99 | 100 |
101 |
102 | 103 |
104 |
105 |

2 ReactJS AST

106 | 107 |
108 | 109 |
110 |

4 SolidJS AST

111 | 112 |
113 |
114 |
115 |
116 |

3 118 | ReactJS AST to SolidJS AST Transformer Rules

119 |

String Transformer

120 |
121 |
122 | 124 |
125 |
126 |
127 |
128 | 130 |
131 |
132 |

jq Transformer

133 | setJqTransformer(ev.target.value)} 137 | /> 138 |
139 |
140 |
141 | 142 |
143 | 144 |
145 | 146 | 147 |
148 |
149 |
150 |

Metadata and Human Readable Info

151 |

Human readable details for the migration guide and test cases

152 |

Important: Below form is yet to be developed.

153 |
154 |
155 |
156 |
157 |
158 | 159 |
160 |
161 |
162 |
163 | 164 |
165 |
166 |
167 |
168 | 169 |
170 |
171 |

Test case input and expected output will be generated based on above preview.

172 |
173 |
174 | 175 |
176 |
177 |

Author will be automatically filled with GitHub submitter user handle

178 | 179 |
180 | 181 |
182 |

Submit the downloaded TOML file in the project GitHub

183 | 184 |
185 |
186 |
187 |
188 | 189 | 190 | 191 | ); 192 | }; 193 | 194 | export default Builder; -------------------------------------------------------------------------------- /src/pages/cli.tsx: -------------------------------------------------------------------------------- 1 | import { Title, Meta } from "solid-meta"; 2 | 3 | const Cli = () => { 4 | const pageTitle = 'ReactJS to SolidJS CLI for batch conversion'; 5 | const pageDescription = 'CLI for React to SolidJS batch code conversion'; 6 | 7 | return ( 8 | <> 9 | 10 | 11 | {pageTitle} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 |
29 |
30 |

{pageTitle}

31 |

{pageDescription}

32 |
33 |
34 |
35 | 36 |
37 |
38 | ! 39 |
40 |
41 |

TODO

42 |

Challenges: Currently using jq-web and so couldn't make CLI easily. 43 |

44 |
45 |
46 |
47 | 48 | ); 49 | }; 50 | 51 | export default Cli; -------------------------------------------------------------------------------- /src/pages/converter.tsx: -------------------------------------------------------------------------------- 1 | import { parse } from "@babel/parser"; 2 | import generate from "@babel/generator"; 3 | import { createEffect, createSignal, Show } from "solid-js"; 4 | import { Title, Meta } from "solid-meta"; 5 | import ReactCodeEditor from "../components/ReactCodeEditor"; 6 | import SolidCodeEditor from "../components/SolidCodeEditor"; 7 | import { jqAsyncChain } from "../lib/jqAsyncChain"; 8 | import { transformersJson } from "../../_transformer_rules/transformers.js"; 9 | 10 | // prepare transformers... 11 | let jqTransformers = await jqAsyncChain(['.. | .jq?'], transformersJson()); 12 | jqTransformers = jqTransformers.filter(Boolean); // remove null through filter 13 | let stringTransformers = await jqAsyncChain(['.. | .string?'], transformersJson()); 14 | stringTransformers = stringTransformers.filter(Boolean); // remove null through filter 15 | 16 | const Converter = () => { 17 | const pageTitle = 'ReactJS to SolidJS Converter'; 18 | const pageDescription = 'React to SolidJS online code converter aka transpiler'; 19 | const [reactCode, setReactCode] = createSignal(''); 20 | const [solidCode, setSolidCode] = createSignal(); 21 | const [reactErrorMessage, setReactErrorMessage] = createSignal(''); 22 | 23 | createEffect(() => { 24 | // For string transformers, no need to run through AST 25 | // TODO: Recheck if so.. what if someone breaks the JSON? 26 | let reactCodeString = reactCode(); 27 | if (stringTransformers.length > 0) { 28 | // run through string transformers... 29 | stringTransformers.forEach(transformer => { 30 | reactCodeString = reactCodeString.replaceAll(transformer.search, transformer.replace); 31 | }); 32 | // update here in case, if there are no jq transformers... 33 | setSolidCode(reactCodeString); 34 | } 35 | if (jqTransformers.length > 0) { 36 | let reactAst; 37 | setReactErrorMessage(''); // clear error message 38 | try { 39 | reactAst = parse(reactCodeString, { sourceType: "module", plugins: ["jsx"], errorRecovery: false }); 40 | } catch (e) { 41 | setReactErrorMessage(e.message); 42 | } 43 | let solidAst = reactAst; 44 | jqAsyncChain(jqTransformers, solidAst).then(result => { 45 | const { code: solidCode } = generate(result); 46 | setSolidCode(solidCode); 47 | }); 48 | } 49 | }); 50 | 51 | return ( 52 | <> 53 | 54 | 55 | {pageTitle} 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
72 |
73 |
74 |

{pageTitle}

75 |

{pageDescription}

76 |
77 |
78 |
79 | 80 |
81 |
82 |
83 |
84 |

ReactJS Code

85 | 86 |
}> 87 |
88 |

{reactErrorMessage}

89 |
90 | 91 |
92 | 93 |
94 |

SolidJS Code

95 | 96 |
97 |
98 |
99 | 100 | 101 | 102 | ); 103 | }; 104 | 105 | export default Converter; -------------------------------------------------------------------------------- /src/pages/error404.tsx: -------------------------------------------------------------------------------- 1 | import { Title, Meta } from "solid-meta"; 2 | // import { DEV } from 'solid-js'; 3 | 4 | const Error404 = () => { 5 | const pageTitle = '404 - Not Found'; 6 | /* 7 | if (DEV === undefined) { // for production in GitHub pages, throw server 404 8 | // https://codelabs.developers.google.com/codelabs/making-a-single-page-app-search-friendly#6 9 | window.location.href = "/404"; 10 | } 11 | */ 12 | return ( 13 | <> 14 | 15 | {pageTitle} 16 |
17 |
18 |
19 |

{pageTitle}

20 |

If this is an error, please report it in the GitHub project page. Thank you!

21 |
22 |
23 |
24 |
25 | 26 | ); 27 | }; 28 | 29 | export default Error404; -------------------------------------------------------------------------------- /src/pages/home.tsx: -------------------------------------------------------------------------------- 1 | import { Title, Meta } from "solid-meta"; 2 | import { Link } from 'solid-app-router'; 3 | 4 | const Home = () => { 5 | const pageTitle = 'ReactJS to SolidJS Converter & Utilities'; 6 | const pageDescription = 'React to Solid code conversion related utilities'; 7 | return ( 8 | <> 9 | 10 | 11 | {pageTitle} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 |
29 | 32 | 34 | 35 | Our life is a creation of our mind. — Buddha 36 | hero 38 |
39 |

ReactJS to SolidJS Conversion

40 |

react2solid is a set of utilities for the React to Solid conversion.

41 |
42 |
43 |
44 |
45 |
46 |
47 | 48 | 49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | 57 | 59 | 60 | 61 |
62 |

Converter

63 |
64 |
65 |

ReactJS to SolidJS transpiler - JavaScript frontend

66 | Convert 67 | 69 | 70 | 71 | 72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 | 80 | 81 | 82 |
83 |

Builder

84 |
85 |
86 |

React.js to Solid.js transformer rules builder - Web UI

87 | Build 88 | 89 | 90 | 91 | 92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | 100 | 101 | 102 |
103 |

CLI

104 |
105 |
106 |

React to Solid converter - CLI version, for batch conversion

107 | CLI 108 | 109 | 110 | 111 | 112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 | 120 | 121 | 122 |
123 |

Migration Guide

124 |
125 |
126 |

Automatic ReactJS to SolidJS migration guide - from the transformer rules

127 | Migration Guide 128 | 129 | 130 | 131 | 132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 | 140 | 141 | 142 |
143 |

Libraries Alternatives

144 |
145 |
146 |

Alternative or equivalent libraries in SolidJS for ReactJS

147 | Libraries Alternatives 148 | 149 | 150 | 151 | 152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 | 160 | 162 | 163 |
164 |

Test cases

165 |
166 |
167 |

React to Solid transformer rules and test cases

168 | Test cases 169 | 170 | 171 | 172 | 173 |
174 |
175 |
176 |
177 |
178 |
179 | 180 |
181 |
182 |
183 |

Have issues or ideas? Please visit the react2solid project page

184 | GitHub 185 |
186 |
187 |
188 | 189 | ); 190 | }; 191 | 192 | export default Home; -------------------------------------------------------------------------------- /src/pages/libs-alternatives.tsx: -------------------------------------------------------------------------------- 1 | import { For } from "solid-js"; 2 | import { Title, Meta } from "solid-meta"; 3 | import { csvString2json } from "../lib/csv"; 4 | 5 | const response = await fetch("./assets/reactjs-solidjs-libs-alternatives.csv"); 6 | const data = await response.text(); 7 | const alternativeLibs = csvString2json(data); 8 | 9 | const LibsAlternatives = () => { 10 | const pageTitle = 'ReactJS to SolidJS Libraries Alternatives'; 11 | const pageDescription = 'Find alternative or equivalent SolidJS libraries for ReactJS libraries'; 12 | 13 | return ( 14 | <> 15 | 16 | 17 | {pageTitle} 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
34 |
35 |
36 |

{pageTitle}

37 |

{pageDescription}

38 |
39 |
40 |
41 | 42 |
43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | {(alternativeLib, i) => 54 | 55 | 56 | 60 | 63 | 64 | 65 | } 66 | 67 | 68 |
KeywordsReactJS LibSolidJS LibAPI Match Score
{alternativeLib["Keywords"]}{alternativeLib["ReactJS Lib"]} 57 | 58 | 59 | {alternativeLib["SolidJS Lib"]} 61 | 62 | {alternativeLib["API Match Score"]}
69 |
70 |
71 |

Know better alternatives? Please list the library through the CSV found in the project page.

72 | Edit on GitHub 73 | 74 | 75 | 76 | 77 |
78 | 79 |
80 | 81 | ); 82 | }; 83 | 84 | export default LibsAlternatives; -------------------------------------------------------------------------------- /src/pages/migration-guide.tsx: -------------------------------------------------------------------------------- 1 | import { Title, Meta } from "solid-meta"; 2 | import { Link } from 'solid-app-router'; 3 | import { transformersJson } from "../../_transformer_rules/transformers.js"; 4 | import { For } from "solid-js"; 5 | 6 | const MigrationGuide = () => { 7 | const pageTitle = 'ReactJS to SolidJS - Migration Guide'; 8 | const pageDescription = 'Migration guide for React to SolidJS code conversion. Find tips or steps for the conversion with example React and Solid codes.'; 9 | 10 | let tTransformers = transformersJson(); 11 | 12 | return ( 13 | <> 14 | 15 | 16 | {pageTitle} 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 |
34 |
35 |

{pageTitle}

36 |

{pageDescription} Automatically generated from the language agnostic transformer rules. Build new rules easily using the builder UI.

37 |
38 |
39 |
40 | 41 |
42 | {(tTransformer, i) => 43 | <> 44 |
45 |
46 | ! 47 |
48 |
49 |

{tTransformer.languages.en.title}

50 |

{tTransformer.languages.en.description}

51 |
52 |
53 | 54 | {(tTestCase, j) => 55 | <> 56 |
57 |
58 | Example (ReactJS): 59 |
{tTestCase.input}
60 |
61 |
62 | Example (SolidJS): 63 |
{tTestCase.output}
64 |
65 |
66 | 67 | }
68 | 69 | }
70 |
71 |
72 | 73 | ); 74 | }; 75 | 76 | export default MigrationGuide; -------------------------------------------------------------------------------- /src/pages/test-cases.tsx: -------------------------------------------------------------------------------- 1 | import { parse } from "@babel/parser"; 2 | import generate from "@babel/generator"; 3 | import { Title, Meta } from "solid-meta"; 4 | import { Link } from 'solid-app-router'; 5 | import { jqAsyncChain } from "../lib/jqAsyncChain"; 6 | import { transformersJson } from "../../_transformer_rules/transformers.js"; 7 | import { For } from "solid-js"; 8 | 9 | 10 | async function react2solid(reactCodeString, transformerType, transformerRule) { 11 | if (transformerType === 'string') { 12 | return reactCodeString.replaceAll(transformerRule.search, transformerRule.replace); 13 | } 14 | if (transformerType === 'jq') { 15 | let reactAst; 16 | try { 17 | reactAst = parse(reactCodeString, { sourceType: "module", plugins: ["jsx"], errorRecovery: true }); 18 | } catch (e) { console.error(e); } 19 | let solidAst = reactAst; 20 | solidAst = await jqAsyncChain([transformerRule], solidAst); 21 | const { code: solidCode } = generate(solidAst); 22 | return solidCode; 23 | } 24 | }; 25 | 26 | 27 | 28 | 29 | const TestCases = () => { 30 | const pageTitle = 'Test Cases - ReactJS to SolidJS Transformer Rules'; 31 | const pageDescription = 'React to SolidJS transformer rules related test cases'; 32 | 33 | let tTransformers = transformersJson(); 34 | // stuff test case results... 35 | Object.keys(tTransformers).forEach(i => { 36 | //console.log(tTransformers[i].languages.en.title); 37 | // console.log(tTransformers[i].languages.en.description); 38 | Object.keys(tTransformers[i].testcases).forEach(j => { 39 | // console.log(tTransformers[i].testcases[j].test); 40 | // console.log(tTransformers[i].testcases[j].input); 41 | // console.log(tTransformers[i].testcases[j].output); 42 | Object.keys(tTransformers[i].rule.transformer).forEach(async k => { 43 | //console.log(tTransformers[i].rule.transformer[k].string); 44 | //console.log(tTransformers[i].rule.transformer[k].jq); 45 | if (tTransformers[i].rule.transformer[k].string !== undefined) { 46 | tTransformers[i].rule.transformer[k].transformerType = 'string'; 47 | tTransformers[i].rule.transformer[k].transformer = tTransformers[i].rule.transformer[k].string; 48 | } else if (tTransformers[i].rule.transformer[k].jq !== undefined) { 49 | tTransformers[i].rule.transformer[k].transformerType = 'jq'; 50 | tTransformers[i].rule.transformer[k].transformer = tTransformers[i].rule.transformer[k].jq; 51 | } 52 | tTransformers[i].testcases[j].result = 'Pass'; 53 | tTransformers[i].testcases[j].actualOutput = tTransformers[i].testcases[j].output; 54 | tTransformers[i].testcases[j].actualOutput = await react2solid(tTransformers[i].testcases[j].input, tTransformers[i].rule.transformer[k].transformerType, tTransformers[i].rule.transformer[k].transformer); 55 | if (tTransformers[i].testcases[j].actualOutput === tTransformers[i].testcases[j].output) { 56 | tTransformers[i].testcases[j].result = 'Pass'; 57 | } else { 58 | tTransformers[i].testcases[j].result = 'Fail'; 59 | } 60 | }); 61 | }); 62 | }); 63 | console.log(tTransformers); // TODO: Some keys (stuffed keys??) appear in console, but don't get displayed in JSX 64 | 65 | return ( 66 | <> 67 | 68 | 69 | {pageTitle} 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 |
86 |
87 |
88 |

{pageTitle}

89 |

{pageDescription} Automatically generated from the language agnostic transformer rules. Build new rules easily using the builder UI.

90 |
91 |
92 |
93 | 94 |
95 | {(tTransformer, i) => 96 | <> 97 | {(tTestCase, j) => 98 | <> 99 |
100 |
101 | Result: {tTestCase.result} 102 |
103 |
104 |

{tTestCase.test}

105 |
Input: {tTestCase.input}
106 |
Expected Output: {tTestCase.output}
107 |
Actual Output: {tTestCase.actualOutput}
108 |
109 |
110 | 111 | }
112 | 113 | }
114 |
115 |
116 | 117 | ); 118 | }; 119 | 120 | export default TestCases; -------------------------------------------------------------------------------- /src/routes.ts: -------------------------------------------------------------------------------- 1 | import { lazy } from 'solid-js'; 2 | import type { RouteDefinition } from 'solid-app-router'; 3 | 4 | import Home from './pages/home'; 5 | import Converter from './pages/converter'; 6 | import Builder from './pages/builder'; 7 | import Cli from './pages/cli'; 8 | import MigrationGuide from './pages/migration-guide'; 9 | import LibsAlternatives from './pages/libs-alternatives'; 10 | import TestCases from './pages/test-cases'; 11 | import Error404 from './pages/error404'; 12 | import About from './pages/about'; 13 | 14 | export const routes: RouteDefinition[] = [ 15 | { 16 | path: '/', 17 | component: Home, 18 | }, 19 | { 20 | path: '/about', 21 | component: About, 22 | }, 23 | { 24 | path: '/reactjs-to-solidjs-converter', 25 | component: Converter, 26 | }, 27 | { 28 | path: '/builder', 29 | component: Builder, 30 | }, 31 | { 32 | path: '/reactjs-to-solidjs-cli-converter', 33 | component: Cli, 34 | }, 35 | { 36 | path: '/reactjs-to-solidjs-migration-guide', 37 | component: MigrationGuide, 38 | }, 39 | { 40 | path: '/reactjs-to-solidjs-migration-guide', 41 | component: MigrationGuide, 42 | }, 43 | { 44 | path: '/reactjs-solidjs-libs-alternatives', 45 | component: LibsAlternatives, 46 | }, 47 | { 48 | path: '/test-cases', 49 | component: TestCases, 50 | }, 51 | { 52 | path: '/*', 53 | component: Error404, 54 | }, 55 | ]; -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: [ 3 | './index.html', 4 | './src/**/*.{js,ts,jsx,tsx,css,md,mdx,html,json,scss}', 5 | ], 6 | darkMode: 'class', 7 | theme: { 8 | extend: {}, 9 | }, 10 | plugins: [], 11 | }; 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "module": "ESNext", 5 | "moduleResolution": "node", 6 | "allowSyntheticDefaultImports": true, 7 | "esModuleInterop": true, 8 | "jsx": "preserve", 9 | "jsxImportSource": "solid-js", 10 | "types": ["vite/client"], 11 | "noEmit": true, 12 | "isolatedModules": true 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import NodeGlobalsPolyfillPlugin from '@esbuild-plugins/node-globals-polyfill'; 2 | import { defineConfig } from 'vite'; 3 | import solidPlugin from 'vite-plugin-solid'; 4 | import rollupNodePolyFill from 'rollup-plugin-node-polyfills' 5 | 6 | 7 | export default defineConfig({ 8 | base: './', // default is / and it breaks in GitHub pages 9 | optimizeDeps: { 10 | esbuildOptions: { 11 | // Node.js global to browser globalThis 12 | define: { 13 | global: 'globalThis' 14 | }, 15 | // Enable esbuild polyfill plugins 16 | plugins: [ 17 | NodeGlobalsPolyfillPlugin({ 18 | process: true, 19 | buffer: true 20 | }) 21 | ] 22 | } 23 | }, 24 | plugins: [solidPlugin()], 25 | build: { 26 | rollupOptions: { 27 | plugins: [ 28 | // Enable rollup polyfills plugin 29 | // used during production bundling 30 | rollupNodePolyFill() 31 | ] 32 | }, 33 | target: 'esnext', 34 | polyfillDynamicImport: false, 35 | } 36 | }); --------------------------------------------------------------------------------