├── core ├── ReactDom.js └── React.js ├── package.json ├── index.html ├── main.jsx ├── javascript.svg ├── Tapp.jsx ├── App.jsx ├── public └── vite.svg ├── One.jsx ├── style.css ├── .gitignore └── pnpm-lock.yaml /core/ReactDom.js: -------------------------------------------------------------------------------- 1 | import React from "./React.js"; 2 | const ReactDOM = { 3 | createRoot(container) { 4 | return { 5 | render(App) { 6 | React.render(App, container); 7 | }, 8 | }; 9 | }, 10 | }; 11 | 12 | export default ReactDOM; 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-runner", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "devDependencies": { 12 | "vite": "^5.0.8" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /main.jsx: -------------------------------------------------------------------------------- 1 | import React from './core/React.js'; 2 | import ReactDOM from "./core/ReactDom.js"; 3 | import App from "./App.jsx"; 4 | import Tapp from './Tapp.jsx'; 5 | import One from './One.jsx'; 6 | 7 | // ReactDOM.createRoot(document.querySelector("#root")).render(); 8 | // ReactDOM.createRoot(document.querySelector("#root")).render(); 9 | ReactDOM.createRoot(document.querySelector("#root")).render(); 10 | -------------------------------------------------------------------------------- /javascript.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Tapp.jsx: -------------------------------------------------------------------------------- 1 | import React from "./core/React.js"; 2 | 3 | function Foo() { 4 | console.log("foo rerun"); 5 | const [count, setCount] = React.useState(0); 6 | function handleClickFoo() { 7 | setCount((c) => c + 1); 8 | } 9 | 10 | return ( 11 |
12 |

foo

13 | {count} 14 | 15 |
16 | ); 17 | } 18 | 19 | function Bar() { 20 | console.log("bar rerun"); 21 | const [count, setCount] = React.useState(0); 22 | function handleClickBar() { 23 | setCount((c) => c + 1); 24 | update(); 25 | } 26 | 27 | return ( 28 |
29 |

bar

30 | {count} 31 | 32 |
33 | ); 34 | } 35 | 36 | function App() { 37 | console.log("app rerun"); 38 | const [count, setCount] = React.useState(0); 39 | function handleClickApp() { 40 | setCount((c) => c + 1); 41 | } 42 | 43 | return ( 44 |
45 | hi-mini-react count: {count} 46 | 47 | 48 | 49 |
50 | ); 51 | } 52 | 53 | export default App; 54 | -------------------------------------------------------------------------------- /App.jsx: -------------------------------------------------------------------------------- 1 | import React from "./core/React.js"; 2 | 3 | // useEffect 4 | // 调用时机是在 React 完成对 DOM 的渲染之后,并且浏览器完成绘制之前。 5 | // cleanup 在调用 useEffect 之前进行调用, 当 deps 为空的时候不会调用返回的 cleanup 6 | 7 | function Foo() { 8 | console.log("re foo"); 9 | const [count, setCount] = React.useState(10); 10 | const [bar, setBar] = React.useState("bar"); 11 | function handleClick() { 12 | setCount((c) => c + 1); 13 | setBar(() => "bar"); 14 | } 15 | 16 | React.useEffect(() => { 17 | console.log("init"); 18 | return () => { 19 | console.log("cleanup 0"); 20 | }; 21 | }, []); 22 | 23 | React.useEffect(() => { 24 | console.log("update", count); 25 | // cleanup 26 | return () => { 27 | console.log("cleanup 1"); 28 | }; 29 | }, [count]); 30 | 31 | React.useEffect(() => { 32 | console.log("update", count); 33 | // cleanup 34 | return () => { 35 | console.log("cleanup 2"); 36 | }; 37 | }, [count]); 38 | 39 | // useEffect(() => { 40 | // console.log("update"); 41 | // }, [count]); 42 | 43 | return ( 44 |
45 |

foo

46 | {count} 47 |
{bar}
48 | 49 |
50 | ); 51 | } 52 | 53 | function App() { 54 | return ( 55 |
56 | hi-mini-react 57 | 58 |
59 | ); 60 | } 61 | 62 | export default App; 63 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /One.jsx: -------------------------------------------------------------------------------- 1 | import React from "./core/React.js"; 2 | 3 | function Foo() { 4 | const [count, setCount] = React.useState(10); 5 | const [bar, setBar] = React.useState("bar"); 6 | function handleClick() { 7 | setCount((c) => c + 1); 8 | setBar((s) => s + 1); 9 | } 10 | 11 | return ( 12 |
13 | 14 |
15 | count: {count} 16 |
17 | bar: {bar} 18 |
19 | ); 20 | } 21 | 22 | function Bar() { 23 | const [count, setCount] = React.useState(10); 24 | function handleClick() { 25 | setCount((c) => c + 1); 26 | // setCount((c) => c + 1); 27 | } 28 | 29 | return ( 30 |
31 | 32 | count: {count} 33 |
34 | ); 35 | } 36 | 37 | function App() { 38 | const [count, setCount] = React.useState(10); 39 | const [attribute, setAttribute] = React.useState({ id: "app" }); 40 | function handleClick() { 41 | setCount((c) => c + 1); 42 | // setAttribute(a => { 43 | // a.id += 1 44 | // return a 45 | // }) 46 | 47 | setAttribute((o) => { 48 | return { 49 | ...o, 50 | id: o.id + 1, 51 | }; 52 | }); 53 | } 54 | 55 | return ( 56 |
57 | hi-mini-react 58 | 59 | count: {count} 60 | 61 | 62 |
63 | ); 64 | } 65 | 66 | export default App; 67 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | } 15 | 16 | a { 17 | font-weight: 500; 18 | color: #646cff; 19 | text-decoration: inherit; 20 | } 21 | a:hover { 22 | color: #535bf2; 23 | } 24 | 25 | body { 26 | margin: 0; 27 | display: flex; 28 | place-items: center; 29 | min-width: 320px; 30 | min-height: 100vh; 31 | } 32 | 33 | h1 { 34 | font-size: 3.2em; 35 | line-height: 1.1; 36 | } 37 | 38 | #app { 39 | max-width: 1280px; 40 | margin: 0 auto; 41 | padding: 2rem; 42 | text-align: center; 43 | } 44 | 45 | .logo { 46 | height: 6em; 47 | padding: 1.5em; 48 | will-change: filter; 49 | transition: filter 300ms; 50 | } 51 | .logo:hover { 52 | filter: drop-shadow(0 0 2em #646cffaa); 53 | } 54 | .logo.vanilla:hover { 55 | filter: drop-shadow(0 0 2em #f7df1eaa); 56 | } 57 | 58 | .card { 59 | padding: 2em; 60 | } 61 | 62 | .read-the-docs { 63 | color: #888; 64 | } 65 | 66 | button { 67 | border-radius: 8px; 68 | border: 1px solid transparent; 69 | padding: 0.6em 1.2em; 70 | font-size: 1em; 71 | font-weight: 500; 72 | font-family: inherit; 73 | background-color: #1a1a1a; 74 | cursor: pointer; 75 | transition: border-color 0.25s; 76 | } 77 | button:hover { 78 | border-color: #646cff; 79 | } 80 | button:focus, 81 | button:focus-visible { 82 | outline: 4px auto -webkit-focus-ring-color; 83 | } 84 | 85 | @media (prefers-color-scheme: light) { 86 | :root { 87 | color: #213547; 88 | background-color: #ffffff; 89 | } 90 | a:hover { 91 | color: #747bff; 92 | } 93 | button { 94 | background-color: #f9f9f9; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* 131 | -------------------------------------------------------------------------------- /core/React.js: -------------------------------------------------------------------------------- 1 | function createTextNode(text) { 2 | return { 3 | type: "TEXT_ELEMENT", 4 | props: { 5 | nodeValue: text, 6 | children: [], 7 | }, 8 | }; 9 | } 10 | 11 | function createElement(type, props, ...children) { 12 | return { 13 | type, 14 | props: { 15 | ...props, 16 | children: children.map((child) => { 17 | // console.log(child, typeof child) 18 | const isTextNode = 19 | typeof child === "string" || typeof child === "number"; 20 | return isTextNode ? createTextNode(child) : child; 21 | }), 22 | }, 23 | }; 24 | } 25 | 26 | function render(el, container) { 27 | wipRoot = { 28 | dom: container, 29 | props: { 30 | children: [el], 31 | }, 32 | }; 33 | 34 | nextWorkOfUnit = wipRoot; 35 | } 36 | 37 | let wipRoot = null; 38 | let currentRoot = null; 39 | let nextWorkOfUnit = null; 40 | let deletions = []; 41 | let wipFiber = null; 42 | function workLoop(deadline) { 43 | let shouldYield = false; 44 | while (!shouldYield && nextWorkOfUnit) { 45 | nextWorkOfUnit = performWorkOfUnit(nextWorkOfUnit); 46 | 47 | if (wipRoot?.sibling?.type === nextWorkOfUnit?.type) { 48 | nextWorkOfUnit = undefined; 49 | } 50 | 51 | shouldYield = deadline.timeRemaining() < 1; 52 | } 53 | 54 | if (!nextWorkOfUnit && wipRoot) { 55 | commitRoot(); 56 | } 57 | 58 | requestIdleCallback(workLoop); 59 | } 60 | 61 | function commitRoot() { 62 | deletions.forEach(commitDeletion); 63 | commitWork(wipRoot.child); 64 | commitEffectHooks(); 65 | currentRoot = wipRoot; 66 | wipRoot = null; 67 | deletions = []; 68 | } 69 | 70 | function commitEffectHooks() { 71 | function run(fiber) { 72 | if (!fiber) return; 73 | 74 | if (!fiber.alternate) { 75 | // init 76 | fiber.effectHooks?.forEach((hook) => { 77 | hook.cleanup = hook.callback(); 78 | }); 79 | } else { 80 | // update 81 | // deps 有没有发生改变 82 | fiber.effectHooks?.forEach((newHook, index) => { 83 | if (newHook.deps.length > 0) { 84 | const oldEffectHook = fiber.alternate?.effectHooks[index]; 85 | 86 | // some 87 | const needUpdate = oldEffectHook?.deps.some((oldDep, i) => { 88 | return oldDep !== newHook.deps[i]; 89 | }); 90 | 91 | needUpdate && (newHook.cleanup = newHook.callback()); 92 | } 93 | }); 94 | } 95 | 96 | run(fiber.child); 97 | run(fiber.sibling); 98 | } 99 | function runCleanup(fiber) { 100 | if (!fiber) return; 101 | 102 | fiber.alternate?.effectHooks?.forEach((hook) => { 103 | if (hook.deps.length > 0) { 104 | hook.cleanup && hook.cleanup(); 105 | } 106 | }); 107 | 108 | runCleanup(fiber.child); 109 | runCleanup(fiber.sibling); 110 | } 111 | 112 | runCleanup(wipRoot); 113 | run(wipRoot); 114 | } 115 | 116 | function commitDeletion(fiber) { 117 | if (fiber.dom) { 118 | let fiberParent = fiber.parent; 119 | while (!fiberParent.dom) { 120 | fiberParent = fiberParent.parent; 121 | } 122 | fiberParent.dom.removeChild(fiber.dom); 123 | } else { 124 | commitDeletion(fiber.child); 125 | } 126 | } 127 | 128 | function commitWork(fiber) { 129 | if (!fiber) return; 130 | 131 | let fiberParent = fiber.parent; 132 | while (!fiberParent.dom) { 133 | fiberParent = fiberParent.parent; 134 | } 135 | 136 | if (fiber.effectTag === "update") { 137 | updateProps(fiber.dom, fiber.props, fiber.alternate?.props); 138 | } else if (fiber.effectTag === "placement") { 139 | if (fiber.dom) { 140 | fiberParent.dom.append(fiber.dom); 141 | } 142 | } 143 | commitWork(fiber.child); 144 | commitWork(fiber.sibling); 145 | } 146 | 147 | function createDom(type) { 148 | return type === "TEXT_ELEMENT" 149 | ? document.createTextNode("") 150 | : document.createElement(type); 151 | } 152 | 153 | let eventId = 1; 154 | function updateProps(dom, nextProps, prevProps) { 155 | // Object.keys(nextProps).forEach((key) => { 156 | // if (key !== "children") { 157 | // if (key.startsWith("on")) { 158 | // const eventType = key.slice(2).toLowerCase(); 159 | // dom.addEventListener(eventType, nextProps[key]); 160 | // } else { 161 | // dom[key] = nextProps[key]; 162 | // } 163 | // } 164 | // }); 165 | // {id: "1"} {} 166 | // 1. old 有 new 没有 删除 167 | Object.keys(prevProps).forEach((key) => { 168 | if (key !== "children") { 169 | if (!(key in nextProps)) { 170 | dom.removeAttribute(key); 171 | } 172 | } 173 | }); 174 | // 2. new 有 old 没有 添加 175 | // 3. new 有 old 有 修改 176 | Object.keys(nextProps).forEach((key) => { 177 | if (key !== "children") { 178 | if (nextProps[key] !== prevProps[key]) { 179 | if (key.startsWith("on")) { 180 | const eventType = key.slice(2).toLowerCase(); 181 | 182 | if (prevProps[key] && prevProps[key].id) { 183 | console.log("prev eventId: ", prevProps[key].id); 184 | } 185 | 186 | dom.removeEventListener(eventType, prevProps[key]); 187 | 188 | if (!nextProps[key].id) { 189 | nextProps[key].id = eventId; 190 | console.log("current eventId: ", nextProps[key].id); 191 | eventId++; 192 | } 193 | dom.addEventListener(eventType, nextProps[key]); 194 | } else { 195 | dom[key] = nextProps[key]; 196 | } 197 | } 198 | } 199 | }); 200 | } 201 | 202 | function reconcileChildren(fiber, children) { 203 | let oldFiber = fiber.alternate?.child; 204 | let prevChild = null; 205 | children.forEach((child, index) => { 206 | // console.log(child) 207 | const isSameType = oldFiber && oldFiber.type === child.type; 208 | // console.log("isSameType", isSameType) 209 | 210 | let newFiber; 211 | if (isSameType) { 212 | // update 213 | newFiber = { 214 | type: child.type, 215 | props: child.props, 216 | child: null, 217 | parent: fiber, 218 | sibling: null, 219 | dom: oldFiber.dom, 220 | effectTag: "update", 221 | alternate: oldFiber, 222 | }; 223 | } else { 224 | if (child) { 225 | newFiber = { 226 | type: child.type, 227 | props: child.props, 228 | child: null, 229 | parent: fiber, 230 | sibling: null, 231 | dom: null, 232 | effectTag: "placement", 233 | }; 234 | } 235 | 236 | if (oldFiber) { 237 | deletions.push(oldFiber); 238 | } 239 | } 240 | 241 | if (oldFiber) { 242 | oldFiber = oldFiber.sibling; 243 | } 244 | 245 | if (index === 0) { 246 | fiber.child = newFiber; 247 | } else { 248 | prevChild.sibling = newFiber; 249 | } 250 | 251 | if (newFiber) { 252 | prevChild = newFiber; 253 | } 254 | }); 255 | 256 | while (oldFiber) { 257 | deletions.push(oldFiber); 258 | 259 | oldFiber = oldFiber.sibling; 260 | } 261 | } 262 | 263 | function updateFunctionComponent(fiber) { 264 | stateHookIndex = 0; 265 | effectHooks = []; 266 | wipFiber = fiber; 267 | 268 | const children = [fiber.type(fiber.props)]; 269 | 270 | reconcileChildren(fiber, children); 271 | } 272 | 273 | function updateHostComponent(fiber) { 274 | if (!fiber.dom) { 275 | const dom = (fiber.dom = createDom(fiber.type)); 276 | 277 | updateProps(dom, fiber.props, {}); 278 | } 279 | 280 | const children = fiber.props.children; 281 | reconcileChildren(fiber, children); 282 | } 283 | 284 | function performWorkOfUnit(fiber) { 285 | const isFunctionComponent = typeof fiber.type === "function"; 286 | 287 | if (isFunctionComponent) { 288 | updateFunctionComponent(fiber); 289 | } else { 290 | updateHostComponent(fiber); 291 | } 292 | 293 | // 4. 返回下一个要执行的任务 294 | if (fiber.child) { 295 | return fiber.child; 296 | } 297 | 298 | let nextFiber = fiber; 299 | while (nextFiber) { 300 | if (nextFiber.sibling) return nextFiber.sibling; 301 | nextFiber = nextFiber.parent; 302 | } 303 | } 304 | 305 | requestIdleCallback(workLoop); 306 | 307 | function update() { 308 | let currentFiber = wipFiber; 309 | 310 | return () => { 311 | wipRoot = { 312 | ...currentFiber, 313 | alternate: currentFiber, 314 | }; 315 | 316 | // wipRoot = { 317 | // dom: currentRoot.dom, 318 | // props: currentRoot.props, 319 | // alternate: currentRoot, 320 | // }; 321 | 322 | nextWorkOfUnit = wipRoot; 323 | }; 324 | } 325 | 326 | let stateHookIndex; 327 | function useState(initial) { 328 | let currentFiber = wipFiber; 329 | const oldHook = currentFiber.alternate?.stateHooks[stateHookIndex]; 330 | const stateHook = { 331 | state: oldHook ? oldHook.state : initial, 332 | queue: oldHook ? oldHook.queue : [], 333 | }; 334 | 335 | stateHook.queue.forEach((action) => { 336 | stateHook.state = action(stateHook.state); 337 | }); 338 | 339 | stateHook.queue = []; 340 | 341 | if (!currentFiber.stateHooks) { 342 | currentFiber.stateHooks = []; 343 | } 344 | 345 | currentFiber.stateHooks[stateHookIndex] = stateHook 346 | 347 | stateHookIndex++; 348 | 349 | 350 | function setState(action) { 351 | console.log(stateHook.fiber); 352 | const eagerState = 353 | typeof action === "function" ? action(stateHook.state) : action; 354 | 355 | if (eagerState === stateHook.state) return; 356 | 357 | stateHook.queue.push(typeof action === "function" ? action : () => action); 358 | 359 | // wipRoot = { 360 | // ...stateHook.fiber, 361 | // alternate: stateHook.fiber 362 | // } 363 | 364 | // wipRoot = { 365 | // ...currentFiber, 366 | // alternate: currentFiber, 367 | // }; 368 | wipRoot = currentFiber; 369 | wipRoot.alternate = currentFiber; 370 | 371 | // wipRoot = currentFiber; 372 | // wipRoot.alternate = currentFiber 373 | 374 | nextWorkOfUnit = wipRoot; 375 | } 376 | 377 | return [stateHook.state, setState]; 378 | } 379 | 380 | let effectHooks; 381 | function useEffect(callback, deps) { 382 | const effectHook = { 383 | callback, 384 | deps, 385 | cleanup: undefined, 386 | }; 387 | effectHooks.push(effectHook); 388 | 389 | wipFiber.effectHooks = effectHooks; 390 | } 391 | 392 | const React = { 393 | update, 394 | useEffect, 395 | useState, 396 | render, 397 | createElement, 398 | }; 399 | 400 | export default React; 401 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | devDependencies: 8 | vite: 9 | specifier: ^5.0.8 10 | version: registry.npmmirror.com/vite@5.0.11 11 | 12 | packages: 13 | 14 | registry.npmmirror.com/@esbuild/aix-ppc64@0.19.11: 15 | resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz} 16 | name: '@esbuild/aix-ppc64' 17 | version: 0.19.11 18 | engines: {node: '>=12'} 19 | cpu: [ppc64] 20 | os: [aix] 21 | requiresBuild: true 22 | dev: true 23 | optional: true 24 | 25 | registry.npmmirror.com/@esbuild/android-arm64@0.19.11: 26 | resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz} 27 | name: '@esbuild/android-arm64' 28 | version: 0.19.11 29 | engines: {node: '>=12'} 30 | cpu: [arm64] 31 | os: [android] 32 | requiresBuild: true 33 | dev: true 34 | optional: true 35 | 36 | registry.npmmirror.com/@esbuild/android-arm@0.19.11: 37 | resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz} 38 | name: '@esbuild/android-arm' 39 | version: 0.19.11 40 | engines: {node: '>=12'} 41 | cpu: [arm] 42 | os: [android] 43 | requiresBuild: true 44 | dev: true 45 | optional: true 46 | 47 | registry.npmmirror.com/@esbuild/android-x64@0.19.11: 48 | resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz} 49 | name: '@esbuild/android-x64' 50 | version: 0.19.11 51 | engines: {node: '>=12'} 52 | cpu: [x64] 53 | os: [android] 54 | requiresBuild: true 55 | dev: true 56 | optional: true 57 | 58 | registry.npmmirror.com/@esbuild/darwin-arm64@0.19.11: 59 | resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz} 60 | name: '@esbuild/darwin-arm64' 61 | version: 0.19.11 62 | engines: {node: '>=12'} 63 | cpu: [arm64] 64 | os: [darwin] 65 | requiresBuild: true 66 | dev: true 67 | optional: true 68 | 69 | registry.npmmirror.com/@esbuild/darwin-x64@0.19.11: 70 | resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz} 71 | name: '@esbuild/darwin-x64' 72 | version: 0.19.11 73 | engines: {node: '>=12'} 74 | cpu: [x64] 75 | os: [darwin] 76 | requiresBuild: true 77 | dev: true 78 | optional: true 79 | 80 | registry.npmmirror.com/@esbuild/freebsd-arm64@0.19.11: 81 | resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz} 82 | name: '@esbuild/freebsd-arm64' 83 | version: 0.19.11 84 | engines: {node: '>=12'} 85 | cpu: [arm64] 86 | os: [freebsd] 87 | requiresBuild: true 88 | dev: true 89 | optional: true 90 | 91 | registry.npmmirror.com/@esbuild/freebsd-x64@0.19.11: 92 | resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz} 93 | name: '@esbuild/freebsd-x64' 94 | version: 0.19.11 95 | engines: {node: '>=12'} 96 | cpu: [x64] 97 | os: [freebsd] 98 | requiresBuild: true 99 | dev: true 100 | optional: true 101 | 102 | registry.npmmirror.com/@esbuild/linux-arm64@0.19.11: 103 | resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz} 104 | name: '@esbuild/linux-arm64' 105 | version: 0.19.11 106 | engines: {node: '>=12'} 107 | cpu: [arm64] 108 | os: [linux] 109 | requiresBuild: true 110 | dev: true 111 | optional: true 112 | 113 | registry.npmmirror.com/@esbuild/linux-arm@0.19.11: 114 | resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz} 115 | name: '@esbuild/linux-arm' 116 | version: 0.19.11 117 | engines: {node: '>=12'} 118 | cpu: [arm] 119 | os: [linux] 120 | requiresBuild: true 121 | dev: true 122 | optional: true 123 | 124 | registry.npmmirror.com/@esbuild/linux-ia32@0.19.11: 125 | resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz} 126 | name: '@esbuild/linux-ia32' 127 | version: 0.19.11 128 | engines: {node: '>=12'} 129 | cpu: [ia32] 130 | os: [linux] 131 | requiresBuild: true 132 | dev: true 133 | optional: true 134 | 135 | registry.npmmirror.com/@esbuild/linux-loong64@0.19.11: 136 | resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz} 137 | name: '@esbuild/linux-loong64' 138 | version: 0.19.11 139 | engines: {node: '>=12'} 140 | cpu: [loong64] 141 | os: [linux] 142 | requiresBuild: true 143 | dev: true 144 | optional: true 145 | 146 | registry.npmmirror.com/@esbuild/linux-mips64el@0.19.11: 147 | resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz} 148 | name: '@esbuild/linux-mips64el' 149 | version: 0.19.11 150 | engines: {node: '>=12'} 151 | cpu: [mips64el] 152 | os: [linux] 153 | requiresBuild: true 154 | dev: true 155 | optional: true 156 | 157 | registry.npmmirror.com/@esbuild/linux-ppc64@0.19.11: 158 | resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz} 159 | name: '@esbuild/linux-ppc64' 160 | version: 0.19.11 161 | engines: {node: '>=12'} 162 | cpu: [ppc64] 163 | os: [linux] 164 | requiresBuild: true 165 | dev: true 166 | optional: true 167 | 168 | registry.npmmirror.com/@esbuild/linux-riscv64@0.19.11: 169 | resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz} 170 | name: '@esbuild/linux-riscv64' 171 | version: 0.19.11 172 | engines: {node: '>=12'} 173 | cpu: [riscv64] 174 | os: [linux] 175 | requiresBuild: true 176 | dev: true 177 | optional: true 178 | 179 | registry.npmmirror.com/@esbuild/linux-s390x@0.19.11: 180 | resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz} 181 | name: '@esbuild/linux-s390x' 182 | version: 0.19.11 183 | engines: {node: '>=12'} 184 | cpu: [s390x] 185 | os: [linux] 186 | requiresBuild: true 187 | dev: true 188 | optional: true 189 | 190 | registry.npmmirror.com/@esbuild/linux-x64@0.19.11: 191 | resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz} 192 | name: '@esbuild/linux-x64' 193 | version: 0.19.11 194 | engines: {node: '>=12'} 195 | cpu: [x64] 196 | os: [linux] 197 | requiresBuild: true 198 | dev: true 199 | optional: true 200 | 201 | registry.npmmirror.com/@esbuild/netbsd-x64@0.19.11: 202 | resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz} 203 | name: '@esbuild/netbsd-x64' 204 | version: 0.19.11 205 | engines: {node: '>=12'} 206 | cpu: [x64] 207 | os: [netbsd] 208 | requiresBuild: true 209 | dev: true 210 | optional: true 211 | 212 | registry.npmmirror.com/@esbuild/openbsd-x64@0.19.11: 213 | resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz} 214 | name: '@esbuild/openbsd-x64' 215 | version: 0.19.11 216 | engines: {node: '>=12'} 217 | cpu: [x64] 218 | os: [openbsd] 219 | requiresBuild: true 220 | dev: true 221 | optional: true 222 | 223 | registry.npmmirror.com/@esbuild/sunos-x64@0.19.11: 224 | resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz} 225 | name: '@esbuild/sunos-x64' 226 | version: 0.19.11 227 | engines: {node: '>=12'} 228 | cpu: [x64] 229 | os: [sunos] 230 | requiresBuild: true 231 | dev: true 232 | optional: true 233 | 234 | registry.npmmirror.com/@esbuild/win32-arm64@0.19.11: 235 | resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz} 236 | name: '@esbuild/win32-arm64' 237 | version: 0.19.11 238 | engines: {node: '>=12'} 239 | cpu: [arm64] 240 | os: [win32] 241 | requiresBuild: true 242 | dev: true 243 | optional: true 244 | 245 | registry.npmmirror.com/@esbuild/win32-ia32@0.19.11: 246 | resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz} 247 | name: '@esbuild/win32-ia32' 248 | version: 0.19.11 249 | engines: {node: '>=12'} 250 | cpu: [ia32] 251 | os: [win32] 252 | requiresBuild: true 253 | dev: true 254 | optional: true 255 | 256 | registry.npmmirror.com/@esbuild/win32-x64@0.19.11: 257 | resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz} 258 | name: '@esbuild/win32-x64' 259 | version: 0.19.11 260 | engines: {node: '>=12'} 261 | cpu: [x64] 262 | os: [win32] 263 | requiresBuild: true 264 | dev: true 265 | optional: true 266 | 267 | registry.npmmirror.com/@rollup/rollup-android-arm-eabi@4.9.4: 268 | resolution: {integrity: sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz} 269 | name: '@rollup/rollup-android-arm-eabi' 270 | version: 4.9.4 271 | cpu: [arm] 272 | os: [android] 273 | requiresBuild: true 274 | dev: true 275 | optional: true 276 | 277 | registry.npmmirror.com/@rollup/rollup-android-arm64@4.9.4: 278 | resolution: {integrity: sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.4.tgz} 279 | name: '@rollup/rollup-android-arm64' 280 | version: 4.9.4 281 | cpu: [arm64] 282 | os: [android] 283 | requiresBuild: true 284 | dev: true 285 | optional: true 286 | 287 | registry.npmmirror.com/@rollup/rollup-darwin-arm64@4.9.4: 288 | resolution: {integrity: sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.4.tgz} 289 | name: '@rollup/rollup-darwin-arm64' 290 | version: 4.9.4 291 | cpu: [arm64] 292 | os: [darwin] 293 | requiresBuild: true 294 | dev: true 295 | optional: true 296 | 297 | registry.npmmirror.com/@rollup/rollup-darwin-x64@4.9.4: 298 | resolution: {integrity: sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.4.tgz} 299 | name: '@rollup/rollup-darwin-x64' 300 | version: 4.9.4 301 | cpu: [x64] 302 | os: [darwin] 303 | requiresBuild: true 304 | dev: true 305 | optional: true 306 | 307 | registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf@4.9.4: 308 | resolution: {integrity: sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.4.tgz} 309 | name: '@rollup/rollup-linux-arm-gnueabihf' 310 | version: 4.9.4 311 | cpu: [arm] 312 | os: [linux] 313 | requiresBuild: true 314 | dev: true 315 | optional: true 316 | 317 | registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu@4.9.4: 318 | resolution: {integrity: sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.4.tgz} 319 | name: '@rollup/rollup-linux-arm64-gnu' 320 | version: 4.9.4 321 | cpu: [arm64] 322 | os: [linux] 323 | libc: [glibc] 324 | requiresBuild: true 325 | dev: true 326 | optional: true 327 | 328 | registry.npmmirror.com/@rollup/rollup-linux-arm64-musl@4.9.4: 329 | resolution: {integrity: sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.4.tgz} 330 | name: '@rollup/rollup-linux-arm64-musl' 331 | version: 4.9.4 332 | cpu: [arm64] 333 | os: [linux] 334 | libc: [musl] 335 | requiresBuild: true 336 | dev: true 337 | optional: true 338 | 339 | registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu@4.9.4: 340 | resolution: {integrity: sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.4.tgz} 341 | name: '@rollup/rollup-linux-riscv64-gnu' 342 | version: 4.9.4 343 | cpu: [riscv64] 344 | os: [linux] 345 | libc: [glibc] 346 | requiresBuild: true 347 | dev: true 348 | optional: true 349 | 350 | registry.npmmirror.com/@rollup/rollup-linux-x64-gnu@4.9.4: 351 | resolution: {integrity: sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.4.tgz} 352 | name: '@rollup/rollup-linux-x64-gnu' 353 | version: 4.9.4 354 | cpu: [x64] 355 | os: [linux] 356 | libc: [glibc] 357 | requiresBuild: true 358 | dev: true 359 | optional: true 360 | 361 | registry.npmmirror.com/@rollup/rollup-linux-x64-musl@4.9.4: 362 | resolution: {integrity: sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.4.tgz} 363 | name: '@rollup/rollup-linux-x64-musl' 364 | version: 4.9.4 365 | cpu: [x64] 366 | os: [linux] 367 | libc: [musl] 368 | requiresBuild: true 369 | dev: true 370 | optional: true 371 | 372 | registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc@4.9.4: 373 | resolution: {integrity: sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.4.tgz} 374 | name: '@rollup/rollup-win32-arm64-msvc' 375 | version: 4.9.4 376 | cpu: [arm64] 377 | os: [win32] 378 | requiresBuild: true 379 | dev: true 380 | optional: true 381 | 382 | registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc@4.9.4: 383 | resolution: {integrity: sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.4.tgz} 384 | name: '@rollup/rollup-win32-ia32-msvc' 385 | version: 4.9.4 386 | cpu: [ia32] 387 | os: [win32] 388 | requiresBuild: true 389 | dev: true 390 | optional: true 391 | 392 | registry.npmmirror.com/@rollup/rollup-win32-x64-msvc@4.9.4: 393 | resolution: {integrity: sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.4.tgz} 394 | name: '@rollup/rollup-win32-x64-msvc' 395 | version: 4.9.4 396 | cpu: [x64] 397 | os: [win32] 398 | requiresBuild: true 399 | dev: true 400 | optional: true 401 | 402 | registry.npmmirror.com/@types/estree@1.0.5: 403 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz} 404 | name: '@types/estree' 405 | version: 1.0.5 406 | dev: true 407 | 408 | registry.npmmirror.com/esbuild@0.19.11: 409 | resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.19.11.tgz} 410 | name: esbuild 411 | version: 0.19.11 412 | engines: {node: '>=12'} 413 | hasBin: true 414 | requiresBuild: true 415 | optionalDependencies: 416 | '@esbuild/aix-ppc64': registry.npmmirror.com/@esbuild/aix-ppc64@0.19.11 417 | '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm@0.19.11 418 | '@esbuild/android-arm64': registry.npmmirror.com/@esbuild/android-arm64@0.19.11 419 | '@esbuild/android-x64': registry.npmmirror.com/@esbuild/android-x64@0.19.11 420 | '@esbuild/darwin-arm64': registry.npmmirror.com/@esbuild/darwin-arm64@0.19.11 421 | '@esbuild/darwin-x64': registry.npmmirror.com/@esbuild/darwin-x64@0.19.11 422 | '@esbuild/freebsd-arm64': registry.npmmirror.com/@esbuild/freebsd-arm64@0.19.11 423 | '@esbuild/freebsd-x64': registry.npmmirror.com/@esbuild/freebsd-x64@0.19.11 424 | '@esbuild/linux-arm': registry.npmmirror.com/@esbuild/linux-arm@0.19.11 425 | '@esbuild/linux-arm64': registry.npmmirror.com/@esbuild/linux-arm64@0.19.11 426 | '@esbuild/linux-ia32': registry.npmmirror.com/@esbuild/linux-ia32@0.19.11 427 | '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64@0.19.11 428 | '@esbuild/linux-mips64el': registry.npmmirror.com/@esbuild/linux-mips64el@0.19.11 429 | '@esbuild/linux-ppc64': registry.npmmirror.com/@esbuild/linux-ppc64@0.19.11 430 | '@esbuild/linux-riscv64': registry.npmmirror.com/@esbuild/linux-riscv64@0.19.11 431 | '@esbuild/linux-s390x': registry.npmmirror.com/@esbuild/linux-s390x@0.19.11 432 | '@esbuild/linux-x64': registry.npmmirror.com/@esbuild/linux-x64@0.19.11 433 | '@esbuild/netbsd-x64': registry.npmmirror.com/@esbuild/netbsd-x64@0.19.11 434 | '@esbuild/openbsd-x64': registry.npmmirror.com/@esbuild/openbsd-x64@0.19.11 435 | '@esbuild/sunos-x64': registry.npmmirror.com/@esbuild/sunos-x64@0.19.11 436 | '@esbuild/win32-arm64': registry.npmmirror.com/@esbuild/win32-arm64@0.19.11 437 | '@esbuild/win32-ia32': registry.npmmirror.com/@esbuild/win32-ia32@0.19.11 438 | '@esbuild/win32-x64': registry.npmmirror.com/@esbuild/win32-x64@0.19.11 439 | dev: true 440 | 441 | registry.npmmirror.com/fsevents@2.3.3: 442 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz} 443 | name: fsevents 444 | version: 2.3.3 445 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 446 | os: [darwin] 447 | requiresBuild: true 448 | dev: true 449 | optional: true 450 | 451 | registry.npmmirror.com/nanoid@3.3.7: 452 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz} 453 | name: nanoid 454 | version: 3.3.7 455 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 456 | hasBin: true 457 | dev: true 458 | 459 | registry.npmmirror.com/picocolors@1.0.0: 460 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz} 461 | name: picocolors 462 | version: 1.0.0 463 | dev: true 464 | 465 | registry.npmmirror.com/postcss@8.4.33: 466 | resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.33.tgz} 467 | name: postcss 468 | version: 8.4.33 469 | engines: {node: ^10 || ^12 || >=14} 470 | dependencies: 471 | nanoid: registry.npmmirror.com/nanoid@3.3.7 472 | picocolors: registry.npmmirror.com/picocolors@1.0.0 473 | source-map-js: registry.npmmirror.com/source-map-js@1.0.2 474 | dev: true 475 | 476 | registry.npmmirror.com/rollup@4.9.4: 477 | resolution: {integrity: sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup/-/rollup-4.9.4.tgz} 478 | name: rollup 479 | version: 4.9.4 480 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 481 | hasBin: true 482 | dependencies: 483 | '@types/estree': registry.npmmirror.com/@types/estree@1.0.5 484 | optionalDependencies: 485 | '@rollup/rollup-android-arm-eabi': registry.npmmirror.com/@rollup/rollup-android-arm-eabi@4.9.4 486 | '@rollup/rollup-android-arm64': registry.npmmirror.com/@rollup/rollup-android-arm64@4.9.4 487 | '@rollup/rollup-darwin-arm64': registry.npmmirror.com/@rollup/rollup-darwin-arm64@4.9.4 488 | '@rollup/rollup-darwin-x64': registry.npmmirror.com/@rollup/rollup-darwin-x64@4.9.4 489 | '@rollup/rollup-linux-arm-gnueabihf': registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf@4.9.4 490 | '@rollup/rollup-linux-arm64-gnu': registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu@4.9.4 491 | '@rollup/rollup-linux-arm64-musl': registry.npmmirror.com/@rollup/rollup-linux-arm64-musl@4.9.4 492 | '@rollup/rollup-linux-riscv64-gnu': registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu@4.9.4 493 | '@rollup/rollup-linux-x64-gnu': registry.npmmirror.com/@rollup/rollup-linux-x64-gnu@4.9.4 494 | '@rollup/rollup-linux-x64-musl': registry.npmmirror.com/@rollup/rollup-linux-x64-musl@4.9.4 495 | '@rollup/rollup-win32-arm64-msvc': registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc@4.9.4 496 | '@rollup/rollup-win32-ia32-msvc': registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc@4.9.4 497 | '@rollup/rollup-win32-x64-msvc': registry.npmmirror.com/@rollup/rollup-win32-x64-msvc@4.9.4 498 | fsevents: registry.npmmirror.com/fsevents@2.3.3 499 | dev: true 500 | 501 | registry.npmmirror.com/source-map-js@1.0.2: 502 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz} 503 | name: source-map-js 504 | version: 1.0.2 505 | engines: {node: '>=0.10.0'} 506 | dev: true 507 | 508 | registry.npmmirror.com/vite@5.0.11: 509 | resolution: {integrity: sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/-/vite-5.0.11.tgz} 510 | name: vite 511 | version: 5.0.11 512 | engines: {node: ^18.0.0 || >=20.0.0} 513 | hasBin: true 514 | peerDependencies: 515 | '@types/node': ^18.0.0 || >=20.0.0 516 | less: '*' 517 | lightningcss: ^1.21.0 518 | sass: '*' 519 | stylus: '*' 520 | sugarss: '*' 521 | terser: ^5.4.0 522 | peerDependenciesMeta: 523 | '@types/node': 524 | optional: true 525 | less: 526 | optional: true 527 | lightningcss: 528 | optional: true 529 | sass: 530 | optional: true 531 | stylus: 532 | optional: true 533 | sugarss: 534 | optional: true 535 | terser: 536 | optional: true 537 | dependencies: 538 | esbuild: registry.npmmirror.com/esbuild@0.19.11 539 | postcss: registry.npmmirror.com/postcss@8.4.33 540 | rollup: registry.npmmirror.com/rollup@4.9.4 541 | optionalDependencies: 542 | fsevents: registry.npmmirror.com/fsevents@2.3.3 543 | dev: true 544 | --------------------------------------------------------------------------------