From 8e1bbdf9fce7a3fed7e1a2e04a04c192cfc16e8f Mon Sep 17 00:00:00 2001 From: CCherry07 <2405693142@qq.com> Date: Sun, 25 Aug 2024 23:52:45 +0800 Subject: [PATCH 01/10] feat: init react router --- Cargo.lock | 10 + packages/react-router/.gitignore | 197 ++ packages/react-router/Cargo.lock | 2192 ++++++++++++ packages/react-router/Cargo.toml | 14 + .../react-router/npm/darwin-arm64/README.md | 3 + .../npm/darwin-arm64/package.json | 18 + .../react-router/npm/darwin-x64/README.md | 3 + .../react-router/npm/darwin-x64/package.json | 18 + .../npm/linux-arm64-gnu/README.md | 3 + .../npm/linux-arm64-gnu/package.json | 21 + .../npm/linux-arm64-musl/README.md | 3 + .../npm/linux-arm64-musl/package.json | 21 + .../react-router/npm/linux-x64-gnu/README.md | 3 + .../npm/linux-x64-gnu/package.json | 21 + .../react-router/npm/linux-x64-musl/README.md | 3 + .../npm/linux-x64-musl/package.json | 18 + .../npm/win32-arm64-msvc/README.md | 3 + .../npm/win32-arm64-msvc/package.json | 18 + .../npm/win32-ia32-msvc/README.md | 3 + .../npm/win32-ia32-msvc/package.json | 18 + .../react-router/npm/win32-x64-msvc/README.md | 3 + .../npm/win32-x64-msvc/package.json | 18 + packages/react-router/options.d.ts | 3 + packages/react-router/package.json | 43 + packages/react-router/playground/README.md | 37 + .../react-router/playground/farm.config.ts | 17 + packages/react-router/playground/index.html | 14 + packages/react-router/playground/index.js | 1 + packages/react-router/playground/package.json | 27 + .../playground/public/favicon.ico | Bin 0 -> 4154 bytes .../playground/src/assets/logo.png | Bin 0 -> 16859 bytes .../playground/src/assets/react.svg | 1 + .../react-router/playground/src/index.css | 69 + .../react-router/playground/src/index.tsx | 10 + packages/react-router/playground/src/main.css | 42 + packages/react-router/playground/src/main.tsx | 32 + .../react-router/playground/src/typings.d.ts | 3 + .../react-router/playground/tsconfig.json | 25 + .../playground/tsconfig.node.json | 11 + packages/react-router/pnpm-lock.yaml | 2926 +++++++++++++++++ packages/react-router/pnpm-workspace.yaml | 3 + packages/react-router/rust-toolchain.toml | 3 + packages/react-router/rustfmt.toml | 2 + packages/react-router/scripts/func.js | 3 + packages/react-router/scripts/index.d.ts | 3 + packages/react-router/scripts/index.js | 124 + packages/react-router/scripts/watch.sh | 3 + packages/react-router/src/lib.rs | 20 + 48 files changed, 6033 insertions(+) create mode 100644 packages/react-router/.gitignore create mode 100644 packages/react-router/Cargo.lock create mode 100644 packages/react-router/Cargo.toml create mode 100644 packages/react-router/npm/darwin-arm64/README.md create mode 100644 packages/react-router/npm/darwin-arm64/package.json create mode 100644 packages/react-router/npm/darwin-x64/README.md create mode 100644 packages/react-router/npm/darwin-x64/package.json create mode 100644 packages/react-router/npm/linux-arm64-gnu/README.md create mode 100644 packages/react-router/npm/linux-arm64-gnu/package.json create mode 100644 packages/react-router/npm/linux-arm64-musl/README.md create mode 100644 packages/react-router/npm/linux-arm64-musl/package.json create mode 100644 packages/react-router/npm/linux-x64-gnu/README.md create mode 100644 packages/react-router/npm/linux-x64-gnu/package.json create mode 100644 packages/react-router/npm/linux-x64-musl/README.md create mode 100644 packages/react-router/npm/linux-x64-musl/package.json create mode 100644 packages/react-router/npm/win32-arm64-msvc/README.md create mode 100644 packages/react-router/npm/win32-arm64-msvc/package.json create mode 100644 packages/react-router/npm/win32-ia32-msvc/README.md create mode 100644 packages/react-router/npm/win32-ia32-msvc/package.json create mode 100644 packages/react-router/npm/win32-x64-msvc/README.md create mode 100644 packages/react-router/npm/win32-x64-msvc/package.json create mode 100644 packages/react-router/options.d.ts create mode 100644 packages/react-router/package.json create mode 100644 packages/react-router/playground/README.md create mode 100644 packages/react-router/playground/farm.config.ts create mode 100644 packages/react-router/playground/index.html create mode 100644 packages/react-router/playground/index.js create mode 100644 packages/react-router/playground/package.json create mode 100644 packages/react-router/playground/public/favicon.ico create mode 100644 packages/react-router/playground/src/assets/logo.png create mode 100644 packages/react-router/playground/src/assets/react.svg create mode 100644 packages/react-router/playground/src/index.css create mode 100644 packages/react-router/playground/src/index.tsx create mode 100644 packages/react-router/playground/src/main.css create mode 100644 packages/react-router/playground/src/main.tsx create mode 100644 packages/react-router/playground/src/typings.d.ts create mode 100644 packages/react-router/playground/tsconfig.json create mode 100644 packages/react-router/playground/tsconfig.node.json create mode 100644 packages/react-router/pnpm-lock.yaml create mode 100644 packages/react-router/pnpm-workspace.yaml create mode 100644 packages/react-router/rust-toolchain.toml create mode 100644 packages/react-router/rustfmt.toml create mode 100644 packages/react-router/scripts/func.js create mode 100644 packages/react-router/scripts/index.d.ts create mode 100644 packages/react-router/scripts/index.js create mode 100644 packages/react-router/scripts/watch.sh create mode 100644 packages/react-router/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 511ca3e..651a8af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -795,6 +795,16 @@ dependencies = [ "walkdir", ] +[[package]] +name = "farmfe_plugin_react_router" +version = "0.0.0" +dependencies = [ + "farmfe_core", + "farmfe_macro_plugin", + "farmfe_toolkit", + "farmfe_toolkit_plugin_types", +] + [[package]] name = "farmfe_plugin_strip" version = "0.0.1" diff --git a/packages/react-router/.gitignore b/packages/react-router/.gitignore new file mode 100644 index 0000000..50e4f22 --- /dev/null +++ b/packages/react-router/.gitignore @@ -0,0 +1,197 @@ +# Created by https://www.toptal.com/developers/gitignore/api/node +# Edit at https://www.toptal.com/developers/gitignore?templates=node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# End of https://www.toptal.com/developers/gitignore/api/node + +# Created by https://www.toptal.com/developers/gitignore/api/macos +# Edit at https://www.toptal.com/developers/gitignore?templates=macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +# End of https://www.toptal.com/developers/gitignore/api/macos + +# Created by https://www.toptal.com/developers/gitignore/api/windows +# Edit at https://www.toptal.com/developers/gitignore?templates=windows + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/windows + +#Added by cargo + +/target +# Cargo.lock + +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +*.farm diff --git a/packages/react-router/Cargo.lock b/packages/react-router/Cargo.lock new file mode 100644 index 0000000..7fdd132 --- /dev/null +++ b/packages/react-router/Cargo.lock @@ -0,0 +1,2192 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42cd52102d3df161c77a887b608d7a4897d7cc112886a9537b738a887a03aaff" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "serde", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "ast_node" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab31376d309dd3bfc9cfb3c11c93ce0e0741bbe0354b20e7f8c60b044730b79" +dependencies = [ + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.65", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-simd" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5" +dependencies = [ + "simd-abstraction", +] + +[[package]] +name = "better_scoped_tls" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794edcc9b3fb07bb4aecaa11f093fd45663b4feadb782d68303a2268bc2701de" +dependencies = [ + "scoped-tls", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "browserslist-rs" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf0ca73de70c3da94e4194e4a01fe732378f55d47cf4c0588caab22a0dbfa14" +dependencies = [ + "ahash 0.8.8", + "chrono", + "either", + "indexmap", + "itertools 0.13.0", + "nom", + "once_cell", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "bstr" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytecheck" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" +dependencies = [ + "bytecheck_derive 0.6.11", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41502630fe304ce54cbb2f8389e017784dee2b0328147779fcbe43b9db06d35d" +dependencies = [ + "bytecheck_derive 0.7.0", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bytecheck_derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda88c587085bc07dc201ab9df871bd9baa5e07f7754b745e4d7194b43ac1eda" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-targets 0.52.0", +] + +[[package]] +name = "const_format" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ctor" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.3", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" + +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "serde", + "uuid", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "enhanced-magic-string" +version = "0.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6082b74cc322c69840d97a7d7cba3ee9ed34fa70536fb51a69824f36742960f5" +dependencies = [ + "base64 0.22.1", + "farmfe_utils", + "parking_lot", + "regex", + "sourcemap", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "farm_plugin_test1" +version = "0.0.0" +dependencies = [ + "farmfe_core", + "farmfe_macro_plugin", + "farmfe_toolkit_plugin_types", +] + +[[package]] +name = "farmfe_core" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ace47d8f9846d426af3462d631690d5eba8ae778f58ce4b096d410975d9df6f" +dependencies = [ + "blake2", + "bytecheck 0.7.0", + "dashmap", + "downcast-rs", + "enhanced-magic-string", + "farmfe_macro_cache_item", + "farmfe_utils", + "globset", + "heck", + "hex", + "parking_lot", + "petgraph", + "ptr_meta", + "rayon", + "regex", + "relative-path", + "rkyv", + "rkyv_dyn", + "rkyv_typename", + "serde", + "serde_json", + "swc_common", + "swc_css_ast", + "swc_css_prefixer", + "swc_ecma_ast", + "swc_ecma_parser", + "swc_html_ast", + "thiserror", + "wax", +] + +[[package]] +name = "farmfe_macro_cache_item" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61782617a57f8fa265ce3b4111763d703d457fef83c06341d2eed55cbc06297" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "farmfe_macro_plugin" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "055ed906d281675468dc70294716c6af0b6b904f09fdd7b111865cc72b4f4933" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "farmfe_toolkit_plugin_types" +version = "0.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b9933e059e6d28fb4c81e78aabfd1ca9288feb7a9e2c0516b4f08ca8b2d5c80" +dependencies = [ + "farmfe_core", + "lazy_static", + "libloading", +] + +[[package]] +name = "farmfe_utils" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d797c8fb2b5c357bd730dc119169e663f8ae7dfbc606696350c104e39324749d" +dependencies = [ + "base64 0.21.7", + "pathdiff", + "sha2", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "from_variant" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc9cc75639b041067353b9bce2450d6847e547276c6fbe4487d7407980e07db" +dependencies = [ + "proc-macro2", + "swc_macros_common", + "syn 2.0.65", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "ghost" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0e085ded9f1267c32176b40921b9754c474f7dd96f7e808d4a982e48aa1e854" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hstr" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0f5356d62012374578cd3a5c013d6586de3efbca3b53379fc1edfbb95c9db14" +dependencies = [ + "hashbrown 0.14.3", + "new_debug_unreachable", + "once_cell", + "phf", + "rustc-hash", + "triomphe", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "if_chain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", + "serde", +] + +[[package]] +name = "inventory" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb5160c60ba1e809707918ee329adb99d222888155835c6feedba19f6c3fd4" +dependencies = [ + "ctor", + "ghost", + "inventory-impl", +] + +[[package]] +name = "inventory-impl" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e41b53715c6f0c4be49510bb82dee2c1e51c8586d885abe65396e82ed518548" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "is-macro" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a85abdc13717906baccb5a1e435556ce0df215f242892f721dff62bf25288f" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "miette" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" +dependencies = [ + "miette-derive", + "once_cell", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "outref" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "backtrace", + "cfg-if", + "libc", + "petgraph", + "redox_syscall", + "smallvec", + "thread-id", + "windows-targets 0.48.5", +] + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pori" +version = "0.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a63d338dec139f56dacc692ca63ad35a6be6a797442479b55acd611d79e906" +dependencies = [ + "nom", +] + +[[package]] +name = "preset_env_base" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b30eab18be480c194938e433e269d5298a279f6410f02fbc73f3576a325c110" +dependencies = [ + "ahash 0.8.8", + "anyhow", + "browserslist-rs", + "dashmap", + "from_variant", + "once_cell", + "semver 1.0.21", + "serde", + "st-map", + "tracing", +] + +[[package]] +name = "proc-macro2" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "relative-path" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e898588f33fdd5b9420719948f9f2a32c922a246964576f71ba7f24f80610fbc" + +[[package]] +name = "rend" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" +dependencies = [ + "bytecheck 0.6.11", +] + +[[package]] +name = "rkyv" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +dependencies = [ + "bitvec", + "bytecheck 0.6.11", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rkyv_dyn" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7087f1bf1fdffcf7391cd0755df81c47f8a87fe863bab93f99d9f6bbf16b40b7" +dependencies = [ + "inventory", + "lazy_static", + "ptr_meta", + "rkyv", + "rkyv_dyn_derive", + "rkyv_typename", +] + +[[package]] +name = "rkyv_dyn_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f21d9c9cfb6d952b4baf89f1ffcfaccd56e0f8c81510f5a7b04de2c034bad18" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rkyv_typename" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f3b496694520c6001309c86ab52cf126d084778eb8a372b6bed1400f0562b8" +dependencies = [ + "rkyv_typename_derive", +] + +[[package]] +name = "rkyv_typename_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05589f3fceeb5ad55f3a68b6ac56274feeb3c1b8215b4734d2562b78134a3551" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "serde_json" +version = "1.0.115" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "simd-abstraction" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987" +dependencies = [ + "outref", +] + +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "smallvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e" + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "sourcemap" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "208d40b9e8cad9f93613778ea295ed8f3c2b1824217c6cfc7219d3f6f45b96d4" +dependencies = [ + "base64-simd", + "bitvec", + "data-encoding", + "debugid", + "if_chain", + "rustc-hash", + "rustc_version", + "serde", + "serde_json", + "unicode-id-start", + "url", +] + +[[package]] +name = "st-map" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a8a5c4e5cc839409346495370b2df67489cafd7fa83616d0547a9697a6a89a1" +dependencies = [ + "arrayvec", + "static-map-macro", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "stacker" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "winapi", +] + +[[package]] +name = "static-map-macro" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf483ea7e0e3a03d1b91687895814425149ad77facd3e2b6839dde26da98454" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_enum" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e383308aebc257e7d7920224fa055c632478d92744eca77f99be8fa1545b90" +dependencies = [ + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.65", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "swc_atoms" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6567e4e67485b3e7662b486f1565bdae54bd5b9d6b16b2ba1a9babb1e42125" +dependencies = [ + "bytecheck 0.6.11", + "hstr", + "once_cell", + "rkyv", + "rustc-hash", + "serde", +] + +[[package]] +name = "swc_common" +version = "0.34.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9087befec6b63911f9d2f239e4f91c9b21589c169b86ed2d616944d23cf4a243" +dependencies = [ + "ast_node", + "better_scoped_tls", + "bytecheck 0.6.11", + "cfg-if", + "either", + "from_variant", + "new_debug_unreachable", + "num-bigint", + "once_cell", + "parking_lot", + "rkyv", + "rustc-hash", + "serde", + "siphasher", + "sourcemap", + "swc_atoms", + "swc_eq_ignore_macros", + "swc_visit", + "tracing", + "unicode-width", + "url", +] + +[[package]] +name = "swc_css_ast" +version = "0.141.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a5f28ff625a89de2a269bde3ed3b99be74bb9d3dc78dea6f3b071991b2cbf4" +dependencies = [ + "is-macro", + "rkyv", + "string_enum", + "swc_atoms", + "swc_common", +] + +[[package]] +name = "swc_css_prefixer" +version = "0.155.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc9930655060121c32d829e13fe4fa11294c03e71eb84c22e039703c929dcdf7" +dependencies = [ + "once_cell", + "preset_env_base", + "serde", + "serde_json", + "swc_atoms", + "swc_common", + "swc_css_ast", + "swc_css_utils", + "swc_css_visit", +] + +[[package]] +name = "swc_css_utils" +version = "0.138.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b135df778449825f38d54664bb179c839b3285f9a553ec10dd3cc3eafb751599" +dependencies = [ + "once_cell", + "serde", + "serde_json", + "swc_atoms", + "swc_common", + "swc_css_ast", + "swc_css_visit", +] + +[[package]] +name = "swc_css_visit" +version = "0.140.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c97dceaa18c8ae7f5a4c991e15efc5c333e5880b58ee6d61e42fd1365748ff05" +dependencies = [ + "serde", + "swc_atoms", + "swc_common", + "swc_css_ast", + "swc_visit", +] + +[[package]] +name = "swc_ecma_ast" +version = "0.115.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be1306930c235435a892104c00c2b5e16231043c085d5a10bd3e7537b15659b" +dependencies = [ + "bitflags 2.5.0", + "bytecheck 0.6.11", + "is-macro", + "num-bigint", + "phf", + "rkyv", + "scoped-tls", + "serde", + "string_enum", + "swc_atoms", + "swc_common", + "unicode-id-start", +] + +[[package]] +name = "swc_ecma_parser" +version = "0.146.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e0c2e85f12c63b85c805e923079b04d1fb3e25edd069d638eed5f2098de74" +dependencies = [ + "either", + "new_debug_unreachable", + "num-bigint", + "num-traits", + "phf", + "serde", + "smallvec", + "smartstring", + "stacker", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "tracing", + "typed-arena", +] + +[[package]] +name = "swc_eq_ignore_macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "695a1d8b461033d32429b5befbf0ad4d7a2c4d6ba9cd5ba4e0645c615839e8e4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "swc_html_ast" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b909aca7c9cbd630a461d4a0a1d476ac13704dc515d2a79264c93d3280b02d23" +dependencies = [ + "is-macro", + "rkyv", + "string_enum", + "swc_atoms", + "swc_common", +] + +[[package]] +name = "swc_macros_common" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91745f3561057493d2da768437c427c0e979dff7396507ae02f16c981c4a8466" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "swc_visit" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "043d11fe683dcb934583ead49405c0896a5af5face522e4682c16971ef7871b9" +dependencies = [ + "either", + "swc_visit_macros", +] + +[[package]] +name = "swc_visit_macros" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae9ef18ff8daffa999f729db056d2821cd2f790f3a11e46422d19f46bb193e7" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.65", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tardar" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900c942f83b6a8b9998cc8f74ad3ffa24b7ff3c4279ea1c1c52d95dced9f3516" +dependencies = [ + "miette", + "vec1", +] + +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "thread-id" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0ec81c46e9eb50deaa257be2f148adf052d1fb7701cfd55ccfab2525280b70b" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "triomphe" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" +dependencies = [ + "serde", + "stable_deref_trait", +] + +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-id-start" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02aebfa694eccbbbffdd92922c7de136b9fe764396d2f10e21bce1681477cfc1" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" + +[[package]] +name = "vec1" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab68b56840f69efb0fefbe3ab6661499217ffdc58e2eef7c3f6f69835386322" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.65", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + +[[package]] +name = "wax" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d12a78aa0bab22d2f26ed1a96df7ab58e8a93506a3e20adb47c51a93b4e1357" +dependencies = [ + "const_format", + "itertools 0.11.0", + "miette", + "nom", + "pori", + "regex", + "tardar", + "thiserror", + "walkdir", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] diff --git a/packages/react-router/Cargo.toml b/packages/react-router/Cargo.toml new file mode 100644 index 0000000..a342301 --- /dev/null +++ b/packages/react-router/Cargo.toml @@ -0,0 +1,14 @@ +[package] +edition = "2021" +name = "farmfe_plugin_react_router" +authors = ["CCherry07 "] +license = "MIT" + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +farmfe_core = { workspace = true } +farmfe_toolkit_plugin_types = { workspace = true } +farmfe_macro_plugin = { workspace = true } +farmfe_toolkit = { workspace = true } diff --git a/packages/react-router/npm/darwin-arm64/README.md b/packages/react-router/npm/darwin-arm64/README.md new file mode 100644 index 0000000..0828f46 --- /dev/null +++ b/packages/react-router/npm/darwin-arm64/README.md @@ -0,0 +1,3 @@ +# `farm-plugin-react-router-darwin-arm64` + +This is the **aarch64-apple-darwin** binary for `farm-plugin-react-router` diff --git a/packages/react-router/npm/darwin-arm64/package.json b/packages/react-router/npm/darwin-arm64/package.json new file mode 100644 index 0000000..3c5991f --- /dev/null +++ b/packages/react-router/npm/darwin-arm64/package.json @@ -0,0 +1,18 @@ +{ + "name": "farm-plugin-react-router-darwin-arm64", + "version": "0.1.2", + "os": [ + "darwin" + ], + "cpu": [ + "arm64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/packages/react-router/npm/darwin-x64/README.md b/packages/react-router/npm/darwin-x64/README.md new file mode 100644 index 0000000..289ca5c --- /dev/null +++ b/packages/react-router/npm/darwin-x64/README.md @@ -0,0 +1,3 @@ +# `farm-plugin-react-router-darwin-x64` + +This is the **x86_64-apple-darwin** binary for `farm-plugin-react-router` diff --git a/packages/react-router/npm/darwin-x64/package.json b/packages/react-router/npm/darwin-x64/package.json new file mode 100644 index 0000000..c34f14f --- /dev/null +++ b/packages/react-router/npm/darwin-x64/package.json @@ -0,0 +1,18 @@ +{ + "name": "farm-plugin-react-router-darwin-x64", + "version": "0.0.0", + "os": [ + "darwin" + ], + "cpu": [ + "x64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/packages/react-router/npm/linux-arm64-gnu/README.md b/packages/react-router/npm/linux-arm64-gnu/README.md new file mode 100644 index 0000000..0140b23 --- /dev/null +++ b/packages/react-router/npm/linux-arm64-gnu/README.md @@ -0,0 +1,3 @@ +# `farm-plugin-react-router-linux-arm64-gnu` + +This is the **aarch64-unknown-linux-gnu** binary for `farm-plugin-react-router` diff --git a/packages/react-router/npm/linux-arm64-gnu/package.json b/packages/react-router/npm/linux-arm64-gnu/package.json new file mode 100644 index 0000000..57f4b24 --- /dev/null +++ b/packages/react-router/npm/linux-arm64-gnu/package.json @@ -0,0 +1,21 @@ +{ + "name": "farm-plugin-react-router-linux-arm64-gnu", + "version": "0.0.0", + "os": [ + "linux" + ], + "cpu": [ + "arm64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "libc": [ + "glibc" + ] +} diff --git a/packages/react-router/npm/linux-arm64-musl/README.md b/packages/react-router/npm/linux-arm64-musl/README.md new file mode 100644 index 0000000..bfe0db0 --- /dev/null +++ b/packages/react-router/npm/linux-arm64-musl/README.md @@ -0,0 +1,3 @@ +# `farm-plugin-react-router-linux-arm64-musl` + +This is the **aarch64-unknown-linux-musl** binary for `farm-plugin-react-router` diff --git a/packages/react-router/npm/linux-arm64-musl/package.json b/packages/react-router/npm/linux-arm64-musl/package.json new file mode 100644 index 0000000..8ec53fe --- /dev/null +++ b/packages/react-router/npm/linux-arm64-musl/package.json @@ -0,0 +1,21 @@ +{ + "name": "farm-plugin-react-router-linux-arm64-musl", + "version": "0.0.0", + "os": [ + "linux" + ], + "cpu": [ + "arm64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "libc": [ + "glibc" + ] +} diff --git a/packages/react-router/npm/linux-x64-gnu/README.md b/packages/react-router/npm/linux-x64-gnu/README.md new file mode 100644 index 0000000..e15e7bf --- /dev/null +++ b/packages/react-router/npm/linux-x64-gnu/README.md @@ -0,0 +1,3 @@ +# `farm-plugin-react-router-linux-x64-gnu` + +This is the **x86_64-unknown-linux-gnu** binary for `farm-plugin-react-router` diff --git a/packages/react-router/npm/linux-x64-gnu/package.json b/packages/react-router/npm/linux-x64-gnu/package.json new file mode 100644 index 0000000..5f8370b --- /dev/null +++ b/packages/react-router/npm/linux-x64-gnu/package.json @@ -0,0 +1,21 @@ +{ + "name": "farm-plugin-react-router-linux-x64-gnu", + "version": "0.0.0", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "libc": [ + "glibc" + ] +} diff --git a/packages/react-router/npm/linux-x64-musl/README.md b/packages/react-router/npm/linux-x64-musl/README.md new file mode 100644 index 0000000..59ece76 --- /dev/null +++ b/packages/react-router/npm/linux-x64-musl/README.md @@ -0,0 +1,3 @@ +# `farm-plugin-react-router-linux-x64-musl` + +This is the **x86_64-unknown-linux-musl** binary for `farm-plugin-react-router` diff --git a/packages/react-router/npm/linux-x64-musl/package.json b/packages/react-router/npm/linux-x64-musl/package.json new file mode 100644 index 0000000..9e9d3f6 --- /dev/null +++ b/packages/react-router/npm/linux-x64-musl/package.json @@ -0,0 +1,18 @@ +{ + "name": "farm-plugin-react-router-linux-x64-musl", + "version": "0.0.0", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/packages/react-router/npm/win32-arm64-msvc/README.md b/packages/react-router/npm/win32-arm64-msvc/README.md new file mode 100644 index 0000000..540a49a --- /dev/null +++ b/packages/react-router/npm/win32-arm64-msvc/README.md @@ -0,0 +1,3 @@ +# `farm-plugin-react-router-win32-arm64-msvc` + +This is the aarch64-pc-windows-msvc binary for `farm-plugin-react-router` diff --git a/packages/react-router/npm/win32-arm64-msvc/package.json b/packages/react-router/npm/win32-arm64-msvc/package.json new file mode 100644 index 0000000..5079839 --- /dev/null +++ b/packages/react-router/npm/win32-arm64-msvc/package.json @@ -0,0 +1,18 @@ +{ + "name": "farm-plugin-react-router-win32-arm64-msvc", + "version": "0.0.0", + "os": [ + "win32" + ], + "cpu": [ + "arm64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/packages/react-router/npm/win32-ia32-msvc/README.md b/packages/react-router/npm/win32-ia32-msvc/README.md new file mode 100644 index 0000000..c4c56b2 --- /dev/null +++ b/packages/react-router/npm/win32-ia32-msvc/README.md @@ -0,0 +1,3 @@ +# `farm-plugin-react-router-win32-ia32-msvc` + +This is the i686-pc-windows-msvc binary for `farm-plugin-react-router` diff --git a/packages/react-router/npm/win32-ia32-msvc/package.json b/packages/react-router/npm/win32-ia32-msvc/package.json new file mode 100644 index 0000000..716fbfd --- /dev/null +++ b/packages/react-router/npm/win32-ia32-msvc/package.json @@ -0,0 +1,18 @@ +{ + "name": "farm-plugin-react-router-win32-ia32-msvc", + "version": "0.0.0", + "os": [ + "win32" + ], + "cpu": [ + "ia32" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/packages/react-router/npm/win32-x64-msvc/README.md b/packages/react-router/npm/win32-x64-msvc/README.md new file mode 100644 index 0000000..ad15c64 --- /dev/null +++ b/packages/react-router/npm/win32-x64-msvc/README.md @@ -0,0 +1,3 @@ +# `farm-plugin-react-router-win32-x64-msvc` + +This is the **x86_64-pc-windows-msvc** binary for `farm-plugin-react-router` diff --git a/packages/react-router/npm/win32-x64-msvc/package.json b/packages/react-router/npm/win32-x64-msvc/package.json new file mode 100644 index 0000000..0597804 --- /dev/null +++ b/packages/react-router/npm/win32-x64-msvc/package.json @@ -0,0 +1,18 @@ +{ + "name": "farm-plugin-react-router-win32-x64-msvc", + "version": "0.0.0", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "main": "index.farm", + "files": [ + "index.farm" + ], + "license": "MIT", + "engines": { + "node": ">= 10" + } +} diff --git a/packages/react-router/options.d.ts b/packages/react-router/options.d.ts new file mode 100644 index 0000000..876eb23 --- /dev/null +++ b/packages/react-router/options.d.ts @@ -0,0 +1,3 @@ +export interface IPluginOptions { + +} diff --git a/packages/react-router/package.json b/packages/react-router/package.json new file mode 100644 index 0000000..1d42ca2 --- /dev/null +++ b/packages/react-router/package.json @@ -0,0 +1,43 @@ +{ + "name": "@farmfe/plugin-react-router", + "version": "0.0.0", + "main": "scripts/index.js", + "types": "scripts/index.d.ts", + "type": "module", + "license": "MIT", + "devDependencies": { + "@farmfe/plugin-tools": "latest" + }, + "napi": { + "name": "farm_plugin_react_router", + "triples": { + "additional": [ + "aarch64-apple-darwin", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-linux-musl", + "x86_64-unknown-linux-musl", + "i686-pc-windows-msvc", + "aarch64-pc-windows-msvc" + ] + } + }, + "exports": { + ".": { + "import": "./scripts/func.js", + "types": "./scripts/index.d.ts", + "default": "./scripts/index.js" + }, + "./package.json": "./package.json" + }, + "scripts": { + "dev": "cargo watch -w src -s 'scripts/watch.sh'", + "bump": "npx changeset version", + "play": "pnpm --filter playground dev", + "build": "farm-plugin-tools build --platform --cargo-name farmfe_plugin_react_router -p farmfe_plugin_react_router --release", + "prepublishOnly": "farm-plugin-tools prepublish" + }, + "files": [ + "scripts", + "options.d.ts" + ] +} diff --git a/packages/react-router/playground/README.md b/packages/react-router/playground/README.md new file mode 100644 index 0000000..5802e85 --- /dev/null +++ b/packages/react-router/playground/README.md @@ -0,0 +1,37 @@ +# Farm + React + +This template should help you start developing using React and TypeScript in Farm. + +## Setup + +Install the dependencies: + +```bash +pnpm install +``` + +## Get Started + +Start the dev server: + +```bash +pnpm start +``` + +Build the app for production: + +```bash +pnpm build +``` + +Preview the Production build product: + +```bash +pnpm preview +``` + +Clear persistent cache local files + +```bash +pnpm clean +``` diff --git a/packages/react-router/playground/farm.config.ts b/packages/react-router/playground/farm.config.ts new file mode 100644 index 0000000..935c6e5 --- /dev/null +++ b/packages/react-router/playground/farm.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from "@farmfe/core"; +import react from '@farmfe/plugin-react'; +import farmPlugin from 'farm-plugin-react-router'; + +export default defineConfig({ + compilation: { + input: { + index: "./index.html", + }, + persistentCache: false, + progress: false, + }, + plugins: [ + react({ runtime: "automatic" }), + farmPlugin() + ], +}); diff --git a/packages/react-router/playground/index.html b/packages/react-router/playground/index.html new file mode 100644 index 0000000..9d43228 --- /dev/null +++ b/packages/react-router/playground/index.html @@ -0,0 +1,14 @@ + + + + + + + + Farm + React + TS + + +
+ + + diff --git a/packages/react-router/playground/index.js b/packages/react-router/playground/index.js new file mode 100644 index 0000000..065718f --- /dev/null +++ b/packages/react-router/playground/index.js @@ -0,0 +1 @@ +console.log("lib") diff --git a/packages/react-router/playground/package.json b/packages/react-router/playground/package.json new file mode 100644 index 0000000..871ae6c --- /dev/null +++ b/packages/react-router/playground/package.json @@ -0,0 +1,27 @@ +{ + "name": "playground", + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "farm start", + "start": "farm start", + "build": "farm build", + "preview": "farm preview", + "clean": "farm clean" + }, + "dependencies": { + "clsx": "^1.2.1", + "react": "18", + "react-dom": "18", + "farm-plugin-react-router": "workspace:*" + }, + "devDependencies": { + "@farmfe/cli": "^1.0.2", + "@farmfe/core": "^1.3.0", + "@farmfe/plugin-react": "^1.2.0", + "@types/react": "18", + "core-js": "^3.36.1", + "@types/react-dom": "18", + "react-refresh": "^0.14.0" + } +} \ No newline at end of file diff --git a/packages/react-router/playground/public/favicon.ico b/packages/react-router/playground/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..80465dedc03cfd08b0e3b118db6e765f65e3adc3 GIT binary patch literal 4154 zcmb`~duWw)9LMqBoO)WB8>rdNSy794a8L80HKCYy;X53Ll~aB<(pZM`qE!25qV^T{4`B6-myS?o2hN82+<+U< zgU>Js#Y@ls0rgpHaWfVd>OhcuLiH?%JvX{-jp-L?TuqIfpde{Z+6RpMT(1M2a zNgW#BR8$vQhXMP8dvl>UUXQDxF|NSvPbf6_&zLFD zH5>=EtG%cFqj(pZ5A8>dbr{yJ+S~!fc|+tT()+LzipxT%okH!;)YStw?b>8VB6{p_in}7AeAdaJ^{r}^?eMB-Gk({ zrayu9w#~ow!{$co^?m3pP+TWG|G2Mpr`Uyk4031DEWT^Zs#|q!fzAf4HC z@HD383zV1%YP(h6O6-MVF$0><`LHpo%n?h&yyCS6;aV%P*?jSIU3mWM_tJK}3hkK- z(TTZGyGg9VBE;t=>{Gt7qs&mJ>d|=ip#xfr=c5gZ$yw07U$FsIX?|Ok>qC96J=cd; z@;YC2-m6XRg(lYaG*Z2nG~YT0)YowAdafLws6MUp<@g2%pfgBwk;0cy``Y{OLgf^v zvdn?TV0Do;U>(}g2+jRrsC}dJR{Q2sg!{9Maj?GBP`Bpc6{z<{_vLJy;6Olit;eS4G)6KtfV<)|&@?~GFW7k{s0_}^bcdli`x%y$}s)w9QNY*W`%sMACqBL=U`#(}{kZI}9O!ob|625;;!v7E?e72>_ YXKTD4qPpQwz4tCb{gqHVI7FV$f0MB}F8}}l literal 0 HcmV?d00001 diff --git a/packages/react-router/playground/src/assets/logo.png b/packages/react-router/playground/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0caeb4381267cff0c3adf3020077c55bac612a20 GIT binary patch literal 16859 zcmXwBWmFtZ(`Avx3GS}JT>`-^IKkcB-DL^BXmE!RoZuGRLvVKu?(X_6&wIWf91d(x zb@gmbch$YOCQ?~Z8Wo8U2?`1dRpyI?3KSH81oDHA0EGO4z1=x3Tj;_n3fpCwAyh=i!LHY@WbqFI%s5*P^3b=QJt<)ms|=?8^nE#<9_ z{_B3hx1ZiV-F0#Y&byp_g7vooa=~N-ad3#3M;D4)zyATSnw+EyvJl}^)&SP;CnYMeT#R?)RCP`5%cVP^^GMLm=Gj+Np}*cL#Lbu0KKM zLrF@8d~RN-3(uGm)EI9!#^GUU( zxA)Ajy!&ZSPKus1VOGLXUu9!VF}I*d_h7ysBmyPf zCi?3A$}ov%ZRMHy)%mU>*w1SykV=u{?epe6geT08o6)M zOP#r`nSPG~z4$FrH*Rycd!rLG>UaA0HwGZDu|%hIyO^sidq6W zhG+NC-bcbRq>EN07|DfUG2&HDS+!TgZ%zdL4J)D5Lp&Ryh!b$E?83LsKQ&N9lU)UW zd2;`poQ6w6HYz<7zsFgQ5aGe#sB?{uoJDM%I?NlL$&pXT;Uea$=6yx)%C%WM>gM;x zAziWT1X&-)4ZZl7**Oi4d@=k;G2^Bt;-)-wHsHJ(X;*b@f;Us+INAmHYflR@l63Y&;W#@#V@Tcu7{k9%z|ivV zs&7{yOtt&LNA-h6w221BCXq}(bq`c7=;oLeyDQ*l#SQ<@MD){fBhhWkoPMa!pCAvf z+D1Y3y0UqHODCXS7p_N>jk*eZBwXpQyno{awGOIxHIy)lk<||&$%O;UPm=LFDW$k1 zO=(QfbayF8e*PFN+{Utb$UP~~<~6}G_{{TIP60Im-p41Xx#8&~E;Yly30Xcs9#;k@ zFm+7II)JYo`UfL^f&h%odE=HqrIv;r<}D90TXQQfcps&>yf%s?yz%V)@rN4=X~8Dh zZ5oyL+fzAEB%HikEo&CN|F5EFPL4g^0 zW2oG%Www4>sXY0Q&R^Xq#ZU`&f`sDW#g5UkRMQ&keh()1YL>_`muaxQx((XWI0?ko z?_N`xj}@ld?0}#%&U^Tq^TUC)!-#dhYHT!8B0SUj!HS-VCMM+$iYs*! zdBb}e?AMVRLJSJlzW;a~S~<1ozxpbHmIo~IYN_1s$z_UcmQ8M7h@cA-zY zyPqs*0~{s;mbz6T%kz@0^4y5Da78E`o%h1)=G-38^qA&rmak-?7UQ7qgwwbJS2W2> zsPV#Z{$p^bKIh&Z>c5sp+$b;+mIq0Oeq@U}buO5cN z5S>LbetGNz0VFocuI;{X4f;pkA22Aaztkg^CR16dbYvf$!p}wYzn>3UfBZ}wJ1xf1 zc9Vrpn}-cdUPCPGW}7ABgyl zpnJJi+dmVe2Z_bla<>#RCIav)mi$w)u!}bp$G$N1r<#Y{OR2fZmG`r3IU4$};I_S* zA$(*N=fxN3IJ1c_lSH;~_>3Z2fC0XpU$CR^H`Ja~5}6kmijIJZc#e8~AlnmIyiIBu8{9sp+t; zW+?TDGjLfx&)$oqi@X`1$LQybMC_kHRhu23V20XmL#uZJh%?v9keHKhB^7l5IG|DQ&3>Lzd2y)|*6O$?28PJ1tuUW#b?c*}NrioPfPXjN_dr z&xMio5^k;FKb85_dPe6x+wdoAxGC%Y#q;=BLx^!L@UI(a(wL{J} z91}G|`SBrYI}ydEYQiw?%={HU_Km+CNI|u>a3{n1#1inPTn!aftt3j-!;v4%{eB$y zN2kCT5OL@17NTRE=O9UE{5KbUrV2o~`^Su9LUMyZaFLsnMVtT0l$R~rBx#Q)%7LBP zyJcFhA@GGwIW<4g2AtC`Q7LF@TqKMg2_7*Z-KCm zhoFRU()sFB_{&PsS2u+YHviG^9X@WApOu88L1RBfxN!68tp}}sI9IJp#U9vn=|ctn zRL&JU(So~;c9SrqpD|dr1|CYe9W%n93m^3)RaxZAQCeFIgKn?WKG|F!Qtr>y);)2pwr$YYTxw%>~an$O!EctrtV0xc(Ku$Uh_ zS(UQ;(&*QzDUQSIa)t8DjSTw0B)WDhNfdFW=Y~-?j3YS~X(?^L*mUg+3HHq)W+1m# z8o}>(qD+%xvBu2=jZ3=T39Kc#p)NW0%mM6Ux24B55Wj9T`q{n4Iq^?Y70f0nlrG+p zZiFDByU}m|Lt&(vS)Pm_CHxZaN$1y%wAS=KFILB56@|-U@~p8;1ghXbPP_Ao$h|gK z?a7niH#%z16AO1%kydZF7GYDJnhZz(Eeub0RNd+PM5Mtpjw}Ddakj!AGunl2)*q=Y zYUzC#BL2WEcw#-N%YPP1h+S7f7%Spw#^n=tVomGR1_v4oF)1*TGLC5IS_650dsL}& zsQlSp#qY+0B30YO&;9U`zdvd;T}GS~K#p?$dwlOt6-Jb6FTsOXq<8OC!zcMStxuTY zLz?EArJrm%AI8WmwzP}Xn@FDLTPbWw>`|E5Q_`?n^4eF-lSV)PO1 zLWtr^Rqd95dl%u4yzpTx!t*k`AxRk7eR&6kmfE1={N53?=4vQ8`+S1^#GnkUY_l&p zXuIpl9P6;Jk_+IsBJA}bzl5+h{Pu6td)?92-{tMViN7P2uenTG77?X{452$P8cme8 z>!x#Ufk2bIB8lQA5DqI;wfN+;;*pTE#R=~R2Hd)7kX1+(}?9Bmc)+0n7mW#4By0gr$5>ys^z$1IOlqIhPR z0onmsw?=j4Gfl#eg;JxNrvP?DR#nd}jDL4kdWTXg8m2=+(3^%1M*d-ADv@eaFMNeOh3}E=r z7&S}LSiL6FX1hhyqZCV<)MY1sN0M9unuFoKWt+WQ_6--b8Kp~`SI~a zr~GVzwjoZ$9{@KkP2?abVO%`NNk!1z;D-6hAC9-1k+eGYfdMuvyK%9 z9wlM4hlp}M)fr7xQKo!euJ9t1=2S*TQLEb@Ir8l_Tc7TUjwPS|=U~5KhdOu$26$Fa zpA^w3RfZ-?#EEil(88$G^B>8HUBBtHdreP4u=WWX#8=_?AH}yPNU&puSksX07&)$op1IjMQga`9o?ct<4EBNUe#RXv9+>c#<|+p6h*cBZF%u4h{gs_-%O z6b35qU!}NZTMzbxPQ-+8g<0ec5tJZJ%J2+YlXuiAS4KVz{F8qk4_*3TmTG6y3>Px) zI796-AwO)o67jVP-`=!xO)9c-i{QCo?NzUh2%nL_3%~CTTTt*r$a?2eGA8-WPz~9@ ziSMLLOp6H@JkhZaJ6!UnS&^_b$K`-Sd^TJDI+e0v^2?fusI>Ibj;=#rDR1=6O;#WR z`8xDaKY5FT)l$nT@yd+88ZSTDt4EAK=n=*=0kv5&P^q zYnHY*E{bqE$71kr!oG9pI9P7b6~<&5Ab!ls3oYilecs-&os=QC^aC0iA{fIyBJ6+q zXs6)&6aC4LXRs&*jy!sGA=ZJtLT{DOAA3+_-47QL+6PXXc&~uKxCW!4{R!n>#|=`k zy+Ikj^@N?QiFK)cd5uozJ)jypqhS1Vh}BWOxG=$>ExYEm(l|hK}&z%NtF(22lHCa@K;s@9l5_9%i zmaTSnXRXZ)!HUac_QAEbLiJHacypzR2htW&YbQx4%fiMIWHb}Txkl_06!9cSb9I!w zF28`$N$lRd7`Ws|>LSKo0`CSQSei^79nt&x z2>zhmup9B={8ELmeAO;&)}bna4S`8(?#dO7yno!F@ExlD z)5RI8T3>@Dp_BCoyDNX8fq3zGs4D2T7oX)1k|}=_wHOS?_R59dqJuQVNtr;QP`pW@ zc(l_ae_w5glWE{c3iyD2bo_|o246P5;jXj)i~H_&JhK_L(sWbgo_ce7F{Pz|&-@`_ zzDb>^Kq{oT_dqLXm_e2(@zy03APgQ`g?$yJ=rucc#$XIEq-cDwOOU!I1$9_1v$L_9 z^v90w{S;nL3sU>Y|2^FzH5(7lkUB~5jvr;8aq@e7H%8bYRLR+)ACb}oXA#cwc+4j` zE~Uk&B(DoBCSahjNxz`??2%MQK;K^+ZPjOdgv?Z7;s2n3VKPl=rci)kq#~r+#<>3> z1{B+ngWy9N?;h|hhVZS|o8+!t(te^rxQawXTisMVF7#t#=E2UBS z=Q(iyd=Rolmu7wQWVfodj3`h@iHwIVtj z0V)a{-F+73%@a*p$vd6r`yCkBM@`=|-MP;Lk!7+$2gZyZ-tW$wXPQER9fDdLO z2_6RggdVTP@vW92Alsr{SI1CkS6x<&h1j}@`e5V%(ImY^E*d8Z$>2hh#8{kC&K~;t zT{X^Ai)-Jb*q5;FStE}fg7rn0@LDvu{YhCFt^~?D~-$8&kvk3nnk| zLE?bNX6wQAl;CTf$nRDi91>;!v_aBOrt*+0$*$O(a3Ss%P`sfzt?hBau0XOMx@J*_ zvnyf)#Phl$ob`Fs5uctfVP>!+6+(npmz9-21mqu$R79H&goauxRW82o*E>;+aNgr# zFurDr*uLQ4Q@^Vdr)bKP^`-uji+V27H z(Ypr{5=NchibRPX*xLL0nh-Y{t8sKyKIY(gWS;)Lqm+_Kixy5#U$~%ouqm!(dv}lU zk_B{?^AXktQFp2#0a4~>VP>RaWWmY(D<4vMnw4-kW)tGrtA&`wVcpKyXHT3)k73R3 zd$DHIy*TN!j1;C{_qqXW_WuAdLKxZan9?2z+4THKbp3n?pOBB{!ka#Vz~^ zI8X<2&mK%sX%WrOhhHntpUowd%qB=2Oj^K&R?-mI*#k#4xcQGrzoca&MH3n*6^D&- zxZcG78jH27?gLh95*)_Kzd6d@soMLI^1Ei-)ejSYO==?O3C8{^MaAJ98UFI0iuZ)_ zGpPyKskO||wW*CY?{yb-%PaYn9WwbjzBY?^}*_B6=PFvTvj zi*P&(XWbCH8-}4!)U@2TON>CNySWse>v}tJd)bmxR^Iqs7;BOr(bH?<;l@oPo@k49 zGDE!zqf;bNh_xc@`|ZbY0d0ILM zszGoThxQdG0VUxrbv3t266QNKKma|Ns6$8d5Z-Y4IPU@9KXv?6Cum;|P%Sn@7JLmgHL$Eruh4^CZ%$XDPenh1IQ@6ZLW_SB{3?Ou!k4;6 zubn}v9(SYa&ewcR9X!|qdNn?MpAw`#W&rSzeP~d9BjEyn<`OUAO#TZMB4YF*=H6BQ zI!XTv-}k1YSvDrUmJHdrvvf)t4xhYd_Mh9aZ1E3d#$lcIy;9Wx@J$tDl9+uNs8t@P zso96!Lw@noHJE^k1;oi)77mf;`t;bdGuTOkFGFUAr7Ge=#I!eoKk zpdsj96Gj30f622=M#+Cn+cNjJ>#xSZkUVFsr5%{U0`~Vjf}D=en+SNlIqhFW6URuS zA^4!C=7y;-i71go81IBB%sI^*Sdt#%OVk-9uI z6=~PowUo#=G0YC;KHtPeQ`s=vO2NMpKi8+OqI&-?W5j(Kpvo;G_C|a(Q%o_s)ya?C z{`j8_juGH+YROK^SYKf1QC{-`rw*+r(rx)81Ti zz^XYKWDBGfbc(Q+%)NfHemjw5p@xPJTmJdB|6zGtlOMKisEgF#T!o)@RDUssbBE)hS>ex-t@|>K;uUVv zFkY@`XQb98-ox?X%@r7|$UxmWJaUIB@roP6wH@8>l1)ZeGMiQ#2XZPDkR;pEwbQ8~ zfhY7dmO~pFTfqd;LOrL}O0$rY!+1O$8p6+Rc)t@gbIWmp=l)Q5I4bj{AoN>ZCQZ2- zY}`7ZUkr@=&D`jpm2Wyor@=e=WM2_meCHie(psnMFFV|2Lh`X9tsAFB93GYfC!o7I zacUD0^e$AYy$AZW5PBBcJZSLMdQF2c!*;-OkQ=~^{U)1IH-0CK`B-H=II2%j8bvN6 zZh&&mghwF^FPS%2Z9Z`DhQD!phylH3RuqUV%F2CvF87Z5(q-(V6#T~NIw0K+m>+U@ zd_XuQjQ#WHO>NS_?L$d5#RHWEyRY(x0N-wogU2hOxC9ntJ4s2)x&1)_AWRTIR`o>i(s8JvM*_8ff?}ijZYqz-fs64m?K6tyx{rQrXz91oBQ7e;! zy7_7CN>u@4U(tly^GngznyZtlC%5^jWF-zx_RV@585&zP4J1chiweSv`eb|k%NR9i zHqc~4p#L$&?0@uK^0oj-6_QkD1MV0OF%-C_FQg!hhF-EIxc*-Y@K$8qe~D{<_ZVWwx%p&PYKfM1d&NIzd4IaDQ-tD8 z5nSbJi;~$vsK`CcTDOU}(o>~RY#=A!RIS{}JFSX0d&>7jsx2u==lRK@z5sy#QgHXp zdJsJ8G-z+VuZ9==_d;&V_>8!z3XJ6sFM>=sbatlncH}LB`^QBReMJNuRJ^E*gU8kj| zc8ceI7@zB6{q z3Zy{rJ1QxI+qBkg;%rvH*`XY&A$5IgjZf4Jecoxm$Qt%`^9qKw{Ze*M?IxSP~4Ynq(-T9I!< zpbd_&SZiDV1ci9GWu0Iz4tzMWiU9lHgF28UblFkb1<5?qaOzi=`e$h9XAdEPmu5K> zbQSUGKZSc6S!Mc*$HTfpom4qTFyA2 zFnPuYhkKf~LNWU44tSu{2&TEd0W0uu@@g}6c^AahKQhbw?5|AGn&AM6)yUPVy5S@E z2H!ItWx{CKIa|v-;GNckBWWe4F8}oCKO2`y4)lAc+5cUIn{gPa_Xk-CyvnOJ!h6+6 z{m=_%C_MVp@MHfUc+fHi_5i+!=4>%Ok4S3xtG?)x9Q_({pKp-2F#5?3eaJv=1Pq#%Yyf&4yr)wx{;h=7sF7=hr?)5mWi%#6kFH`Y% z(0+C`0Xa)p*~UdXqYowp(J3cgeq30KnW`tbMnYs{fv+eLwCUClC2_9LT-?n3-WG!_ zridl}5|wehJFsDXnqhVIsxcyD?EiEvbkLNiO9JhlDom}v3tpRWj7Agxu9&3#w-=oy zWHLJ8E)C5G4UU8ThfHd*kHKXgIaA=o?=UZSdGkZkGV!3f(fg7G+>g<>`31P#I+W=z z7|h?SfbX=1!DB2DM>FBvuIapew7jWMoSUBTJv#dSp&r6$J?wbQN9(1Yd{$wLHLBL{ z+^u6q2*~-Att*T&;a)^D&?-8f#VSu$W3if%i`gdu{Ge5}6ytSjJi%N<(_VshAPaV< z=O2uJ#>F=k<-;CXcMFw4-NXX!YfLAMH3itQWo*xBaygrBNkH$FQKbY-sIYbJs_XBf zUQrquEPx-5yq6zgkHp-LdDtn-(cmY4pghuc{g_fBJ~^-jMv!95$`1nh1t?E67aKD4 z1dhYUk=zgf;UMQPrwUrR@a=LN^Ig|ExQE=dJ_-mvH;MKr_PRr(t?;E(a8A@Bq(b8P zl0`HhJYt|yK{gt0K2Kjue~NBeJu!#M`B|qOnr!%kj&rO@pe!Sd=qG#uJ(zB$gG-eS zXE*bL4OzWyjoPG%>YrnM*7Hv`TpO}Ms_GP&>j3g{3NsaQMy5`X1IT=XUw4z zh5wwSn@lM8qnpLI_RrsF(~UF(fXfN^SsWsX(3e#-xS#1uj(zzPslFi(9D`*WLeA&1 z5M&pLO1nrxxA_jz;u2zB9v1ZRm6I2D+GiiR<)eaE>UXM7*^yL zs+A?vZc?XR%D1G%86O_BR!*@?=M%AOXg4@NJea0muIu&>pY}OEJy6ZZ&cH_Jg1zvm zbxS)rf4a4f00T4*L%#Au?57nF$)c1 z2N6DNs}zgWfnS=-b4?uDttzbtu`c5V{G-ayvmu;r-BzgfX<{)3H_QV;HQX0L`M#_6 z%0SiU3QhBnf%$w>&3;=u;?MATiI3@el6ju#5Blg8u*=M!t!UV*wpSb*R1j-aJ~pTz z)NqvhXaIw|laE@$D%#8rXl!>kjyDEId%vw75q^uwL`5}gMJJw$F>1u_6ZYuWc!?r8GxiUL>(rmcXG8vm!U8|j8 zPPS@aw+T$P9Jae8>~LwgJe6li%<~6J=0)P5#Oo8pqp)$adll;}wx1>y^IrsFbqN}^ zK)}O5Z*GgHIb^fW)ds`XJ70N@iUs*9mj&$k)O^lX8B$rw)>`Ag;Q4`0cYVv|za?(O zK-Jn$Ep+rtSWF##1-H}_sn@hKvg6Tv7iY#3*^mP={U~y?dy-M8xv5?H8gcxZij(T> zmi&5;+@GF*2j7dkzgjLk_88l62u!LQ-+_|<0@WZa5?p3Y%s=mkGQo(lLNnoNxsY)y zC3K`Bq(u1j>1)3?l)tHIpkgBWz&pQNxPiO%Q?eMp(a$2&CdDvJ<%xarwXZ%`zkR}z z{?JX<1k@6FuLwFtDc)&IAiw0J5x;c%DCGEaPBc1{Sj%0$K(Ki(DlON@X7VComBUo- z?}ii16Bc7D@ccFDiD%1xI4cZoj}|66P;4SwzFUCmBvF5r+p##EWBXx*0Xjc>uK463 z*qoW)A%|S3PnJjFm6F1V8jCEM@h245Bb!3DN&rv;w66$o-wSc`6AifPVLrwqURmYN z>9ROu7Kr1m`2B)8kSHD%OIQDhH50&7?@jjyY17f=45r`zCB1aaMg)kDOmWY`6|uZ} z4E>#J(-3|J4l1|rn@42*a8p|vA~U~1wGK^MbIPZXns2U@ZrC8^a_SofrNmUgHK_<0 zv{vs%L()?W_pKvn9*Qd|=m+etHwAH*m;N;A1=~)M1#ple<;oxJ7Qrcsw*y@ILFHq$ zj~!hje_>X8R?wxRV)1@yP*~(^JIE~FNRG!d`V_&HTzmVGb!Ec(hzG4>%Abr_ec*y! z>&?4cUey6|z+3WO+nL(UQdKul+9?z?a&Y*rxk4-cP08`8vRqCZZW;uKT|r1^S8zjV zpaOV|SRC!e@l^MRuND-S8Ys*n=m&K74;0cOm$xzZ!s8cO3&%LT}vJ zZ8aLdyss{4rUlo}wZDWpEEHrE6K~w!#+0Fx=uQedtT|wt`$`4RTEX^NvBg1~a{YC{ zNLbz!F7w>;mRWw$Pa}Jx?mJu~t09b@B{x9qf>vE(Ngf3CBWbWf*?JSEgs8E=-eQX( z$1AWdA6e#LqK`9fDD-#pvW&?G%&TtN;;+m@814K(*lA6XW*ZQ<7DhY=Y^y_+4s=8l zY8mSC=Afn6c$1_*QGT4_vi#CtRrE zdfAxhEcxbN|D%BEz|GeFX^DyqtI;Vb(l5v4!w26lw%p{@?D+3jUf{y|5T5R3u!-nO zZIiFqkD3c?XvNAfoJm+8w2g4BNpVK_E&67yO4lgl7*%|TEfQY@MDaC=jar9x)@Xi1 z?RL0{M3kGRJj|#+o_{qNzi0cKBTWpV5Nk%>`~RVCg9)XBy7&^e8P1~3aKbD1SV9h? z4nf(@F!pnhT-4lu5bTq0ID>LD3UW>k^zP(8<;v;V{td3%Seg9*Vjhy;2!|2`Y#>@N zMVoDNn#Wf4?ihF7<(r<-5n`A;&2Hme+ogC z3@j#k0YD<*+rgCUJOqb0ql{>WB%q_uRpm5ekliTDNp|X%5$g!f9_&F((tQ=FZoMCiL^H%GN zJaS8&ATo=8;L@@IYMy=c3Kio$CRA}MZZMft<%;F)zsQ49)}*i>?F{b>=h$O;_5;*% zYr)Mw8W@SVpxJNaec5>4GiodZ3BE9&3#%K1u9>u6K7H9_HQ3pr$%Zj*vZv?W`yu!< z8AA8yUNg*Cu}NX{Ink1$?fwHTFx?4gI%bArRTKQYTYtFPbpQ!9-g(}U{h zS^9R|n}Re!=dmg)K_cXwC0HbQOo_M4Dw=UNm?W)ZM~-?V?LZP{N&$ zsJcT%oCxv8_?;2u3U!yK!g)2Q8PD_)cA5oGRDZR#T7OITJQi%twTP^jE**TVer1B) zbxW&AMt1EwozUqn&<){x^&I!QELhpSq?=?Wyu9(rKaXw*oRpKXwrDTW;NaUZP|Qni z6;+;6G$}nAC7fvj#(B2q07Iu@2*=R;`5zdlH=eA>w`M2SH{Dm4R$D0#3xPX|692S*A=tI>Ai?L{<|6{1 zxvRD^iGd>S#TgE~5VBUq8X!{)pcPDV-(*4i8a@TZu*dDcU4RiBj`jeo>inkN8Dkng zWWHVg_g!y{!pc!5G>IrV5Hy&G^k9Il$D7s;*XPJKeQD7dyI5IQA2ws$x5)-118$TD zj5bVpW0;EZVcA|$#+6}_WQK%LoY9_tXd{;}9F=2;2zc! zWdcyoQ@G1tD=TjtnIWSriUp6#fy!L*e0uA*PYu2+C+8>nHk$qwfD)QyG~seE04|AM zTLRn-Y38T4Z5~v5JwlR$Zd!}{BG zf!fla>0wJ<>m~s%M{i|nGSmCAmqB`PKnTDH-rhvlb9Ym0W**B{%pFfZ` z%UsUnEJtG_&_t-|fQ;rxN8Z$W@0=EEn$ zsh{o8R1Kk&8T_|gX4Q1I=Aqwr`YrPJR6#nU^-RMWiR&li@PRXhij*7FpusT{e|VaNShh&v;dPpZqfeVg`ahjq%J zvKw(wK#x4#>{cBi@D**d6|UUd*mjA?VbrAI-%RxWLf?_jkYrXsv;^Ci3JAASLD>f8 zdC8ra)xB|=mqD^ymm<;Q61fprI4L-@*layI0T*?ameWtBbL+&~Ae@_`cr}K!KE46Z z`CuE;PF#MZnx?OE?bre$5=EQKGiX^&A22e5yrI@t8yc@phlMhX@9L}WjROI0S4*pP z4Cj;mIEOJ7iOQ<^rXNZgWM0+KHTBa&U9!H9q%|^#GaIm++M@P%iZS@IU}VEMjb`iKl7$)8x$vakTpE!10$BK1y`xTQSP%vv1mD#R3)>Ff64pC~?IS_CNp%s7SdWKk)f>?H z(}8|y3+10oAWRZL1ti0(*}PLv7|6gTX&p~c=^i+|s12A-j07E+?7JMOJC-kotq6+v zp}8vB0W~kpSX_^r@PEfdI^5*PIt7}(3rP_V$$#vN&}Qjwr>%2Tr0I7y=SwSqV@Ivt zn4ESfDO2Xaz;m~Z>@=IlJ&hiT+2mj&bW1YMpW$(t+w zp&s+_waDdiH(2rry+e6$|El7R(-xD%PhCaF4kE!Z@E8#i;8XoC)3C(OCU(g^# zT~s1Nk8{CV?$mllLYRl21M3d3rk1x2ahmtVnw4NdJ@=I3xBtElmQ_RCca-O5<-hIv zpSbpn%Tc%h~0Nd7sdhRjuumvM~iIWKV)T&`b^o{FOI z34yq}fA@ass*FeJkr7+PBK(Q5e)&&dXK4t3On1(8+|W1|iM7t<_h*lth7zL5!BvaU z?WQgpQV}6XJ>heiE(uji>rbN9+Zc#9}u0 z=|=o`A%d%YEWoI=N)*fO+5Y>a;l@e{%NP5(LD-H4J=j)a%Niq$^myxsDBa)hr9?Ft zrX+PNxl6few^$;JPM+~L2Gd{Avs_@ZhCm@Se~)cC zCa3Pm1j^zw`9~t>a%!>n>UCn(JSt|uQBjY&n*tlq3CjjiI;8N0JkAISOofXrNEbQCe`zqi zKLro0{VMHiwvc)qMs>iFl8XkF5NWA{E>I#Y(ySlonp_mP1|dWnL(}=nz`t;LMh8#+ z3h>Xy{?oM;exC2c+XzHuhMW}d1|7E3DApTl6;w*?*ELn`8gZ0k+Hoxe^NdC4r zI#m2wSAfyb#7+&c`N$l1ctQCmhEZw?_Mz<9CBZ!tW4#!D5gq}53$}Qr10^7p{=Pl( zU>|uW_C)1)+1Hvh4X_CVb}?t-;;iWfUmo=G5hQ2^Ke!b0LH75)?+}35aP$-Z zT%dLVagbVHy5U#qfPG2sUNDNKzcMpFO|@fc?g(1X$Tv^?R%$-PpF8}QJ5s%vUx>Rx z@f|JULg|WjKGXeuS8f)C^E=Y^uq!$-{FCcyM_qLrf*amGlFlMBn_?ppF|`P>*dD z&PZ+^>l!~ko$7n^6|Wm<@c}~{E{W!W8(Ip|U@rR=^Vs+2xUT_zx@IDn(c99}6^@ z!Een%<^yeDWrUVXKq2RaoF6kkPFCc9?O7td*^*~lWkzF#VIDqmvyCS+*|m$Lt-ZZ# zg}cg%!oU{Tt9vI}q2es(a*7n(Y^3oi{ojo7JO(v#4s&+ChQ*MU)+dSM-?ByzMHxHF z9f_t?vRJI| z4u{8FBF+p~)po~Y7y|15PZ{UOCFx&eaz=pFeSCazrr^7L*8E5z{NFc+>XOF&xM_@P zQdcT(_sG{_i3lHTq)MFTAhB?s28g7uiq&f$!nC-zErr;vaB z#CUHKF5I{O+%4xr(S2z^~yXR z5}>sMdKAFHu5>zy>sQDF4GG~8yV-+g)7z}yz7=EKb5;6<2OC1_<6kPJZ4h0Jd`)dt zyhJHJ%e`RthA)iRD(4UXrB3~>Y4jI1NH5@!Qp`4*3-YO2IAVUyh#P*y9m7@pDSO4j z2iX{FUQV@NxNKf#rTB$Ulm7BvpysDnNcr>#E^?!cx}3>Z#nyl2ZL9(z1W~2me-v5x z@FUzSnH!+=*}9$IgJm~mhVQ(^zHl@tq(WBERoh}0=p}4Qm9^(Wy=zc zo1Kw46$76{Of`_83=g#lB~_`J`fn`$U_B(qw0EwaSGL=ftuRB!0P1_VrbQOsdiFoa zI|BUQ-wOaZ|ER@uJa)_U``W+Vt17A4Wf=mpE=NBSSIwq1R^;Wtq|FAw@3eIjAWJ#!;F|Jaf!Mdc zFB%I8k`OEr{-HgFX=%0O5DnmFj-DPNK{JAU$`7MhQ3Q+%N&}{dBn&;(Pf7CGUNgGu_lj z6gI%;KFGTVgh#{1BsrDgA)T+K!7_8=Gbs0w5Q703sM%2#d1&uZ2%q>XyoBH!3u5q@ ji-;d@RD^`>{4E>P*d_6jJR9=11}GUxMTtr=qi_EQr81c) literal 0 HcmV?d00001 diff --git a/packages/react-router/playground/src/assets/react.svg b/packages/react-router/playground/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/packages/react-router/playground/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/react-router/playground/src/index.css b/packages/react-router/playground/src/index.css new file mode 100644 index 0000000..6cc4daf --- /dev/null +++ b/packages/react-router/playground/src/index.css @@ -0,0 +1,69 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #9f1a8f; + text-decoration: inherit; +} +a:hover { + color: #9f1a8f; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #9f1a8f; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #9F1A8F; + } + button { + background-color: #f9f9f9; + } +} diff --git a/packages/react-router/playground/src/index.tsx b/packages/react-router/playground/src/index.tsx new file mode 100644 index 0000000..06a4dd2 --- /dev/null +++ b/packages/react-router/playground/src/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import { Main } from './main'; +import './index.css' + + +const container = document.querySelector('#root'); +const root = createRoot(container); + +root.render(
); diff --git a/packages/react-router/playground/src/main.css b/packages/react-router/playground/src/main.css new file mode 100644 index 0000000..ff29d41 --- /dev/null +++ b/packages/react-router/playground/src/main.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #9F1A8Faa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/packages/react-router/playground/src/main.tsx b/packages/react-router/playground/src/main.tsx new file mode 100644 index 0000000..67c183c --- /dev/null +++ b/packages/react-router/playground/src/main.tsx @@ -0,0 +1,32 @@ +import React, { useState } from "react"; +import "./main.css"; +import reactLogo from "./assets/react.svg"; +import FarmLogo from "./assets/logo.png"; +export function Main() { + const [count, setCount] = useState(0); + console.log("rendering Main component") + return ( + <> + +

Farm + React

+
+ +

+ Edit src/main.tsx and save to test HMR +

+
+

+ Click on the Farm and React logos to learn more +

+ + ); +} diff --git a/packages/react-router/playground/src/typings.d.ts b/packages/react-router/playground/src/typings.d.ts new file mode 100644 index 0000000..fa0a2da --- /dev/null +++ b/packages/react-router/playground/src/typings.d.ts @@ -0,0 +1,3 @@ +declare module '*.svg'; +declare module '*.png'; +declare module '*.css'; diff --git a/packages/react-router/playground/tsconfig.json b/packages/react-router/playground/tsconfig.json new file mode 100644 index 0000000..7a7611e --- /dev/null +++ b/packages/react-router/playground/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} \ No newline at end of file diff --git a/packages/react-router/playground/tsconfig.node.json b/packages/react-router/playground/tsconfig.node.json new file mode 100644 index 0000000..8d42325 --- /dev/null +++ b/packages/react-router/playground/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["farm.config.ts"] +} diff --git a/packages/react-router/pnpm-lock.yaml b/packages/react-router/pnpm-lock.yaml new file mode 100644 index 0000000..1b148af --- /dev/null +++ b/packages/react-router/pnpm-lock.yaml @@ -0,0 +1,2926 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@farmfe/plugin-tools': + specifier: latest + version: 0.1.1 + + playground: + dependencies: + clsx: + specifier: ^1.2.1 + version: 1.2.1 + farm-plugin-react-router: + specifier: workspace:* + version: link:.. + react: + specifier: '18' + version: 18.3.1 + react-dom: + specifier: '18' + version: 18.3.1(react@18.3.1) + devDependencies: + '@farmfe/cli': + specifier: ^1.0.2 + version: 1.0.4 + '@farmfe/core': + specifier: ^1.3.0 + version: 1.3.14 + '@farmfe/plugin-react': + specifier: ^1.2.0 + version: 1.2.1 + '@types/react': + specifier: '18' + version: 18.3.4 + '@types/react-dom': + specifier: '18' + version: 18.3.0 + core-js: + specifier: ^3.36.1 + version: 3.38.1 + react-refresh: + specifier: ^0.14.0 + version: 0.14.2 + +packages: + + '@babel/runtime@7.25.4': + resolution: {integrity: sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==} + engines: {node: '>=6.9.0'} + + '@changesets/apply-release-plan@7.0.4': + resolution: {integrity: sha512-HLFwhKWayKinWAul0Vj+76jVx1Pc2v55MGPVjZ924Y/ROeSsBMFutv9heHmCUj48lJyRfOTJG5+ar+29FUky/A==} + + '@changesets/assemble-release-plan@6.0.3': + resolution: {integrity: sha512-bLNh9/Lgl1VwkjWZTq8JmRqH+hj7/Yzfz0jsQ/zJJ+FTmVqmqPj3szeKOri8O/hEM8JmHW019vh2gTO9iq5Cuw==} + + '@changesets/changelog-git@0.2.0': + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + + '@changesets/cli@2.27.7': + resolution: {integrity: sha512-6lr8JltiiXPIjDeYg4iM2MeePP6VN/JkmqBsVA5XRiy01hGS3y629LtSDvKcycj/w/5Eur1rEwby/MjcYS+e2A==} + hasBin: true + + '@changesets/config@3.0.2': + resolution: {integrity: sha512-cdEhS4t8woKCX2M8AotcV2BOWnBp09sqICxKapgLHf9m5KdENpWjyrFNMjkLqGJtUys9U+w93OxWT0czorVDfw==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.1.1': + resolution: {integrity: sha512-LRFjjvigBSzfnPU2n/AhFsuWR5DK++1x47aq6qZ8dzYsPtS/I5mNhIGAS68IAxh1xjO9BTtz55FwefhANZ+FCA==} + + '@changesets/get-release-plan@4.0.3': + resolution: {integrity: sha512-6PLgvOIwTSdJPTtpdcr3sLtGatT+Jr22+cQwEBJBy6wP0rjB4yJ9lv583J9fVpn1bfQlBkDa8JxbS2g/n9lIyA==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.0': + resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + + '@changesets/logger@0.1.0': + resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + + '@changesets/parse@0.4.0': + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + + '@changesets/pre@2.0.0': + resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + + '@changesets/read@0.6.0': + resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + + '@changesets/should-skip-package@0.1.0': + resolution: {integrity: sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.0.0': + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + + '@changesets/write@0.3.1': + resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==} + + '@farmfe/cli@1.0.4': + resolution: {integrity: sha512-bau/2P7DylHUDksUvbvJod/Ew4dl5ZICYVgTNn0EfrJM/ZuwLaV8LjmPo0pM4y1QOZmg/N3B9DwkXO89DrutYQ==} + engines: {node: '>= 16'} + hasBin: true + + '@farmfe/core-darwin-arm64@1.3.14': + resolution: {integrity: sha512-BKoyQbDpscPtDWQDMx/mzSugRrw/SZ7R1M3GGVA/u7IvIlW6f2hL1jORQ5A69zFN2MOHLk9dfjtmaOmhB+G6Kw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@farmfe/core-darwin-x64@1.3.14': + resolution: {integrity: sha512-V4vAbKR/rJ1V1pl4dNrBlWvmJtSXhnA8HSUbIWJHzhfygPD5N4Pgl2JsFL4Ky32c0ceX+c47xPHvTaH4fzLe4Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@farmfe/core-linux-arm64-gnu@1.3.14': + resolution: {integrity: sha512-wFINIrD6ORz87xv8pvup4MhO4jychgbQqSV35kiS+3iPzIHuMCXRFNOK7J7+Ap+ZlNNRphURhFM72ZhHpMcn8g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@farmfe/core-linux-arm64-musl@1.3.14': + resolution: {integrity: sha512-bjyNhS1d/SKoGKH6+CselzOfU35Uy10LVu+kybPgdrdUOBF5r8RDK3njtv5cr9Fk7t4R9CrMHzyH8FPog0wPjg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@farmfe/core-linux-x64-gnu@1.3.14': + resolution: {integrity: sha512-MU6TRp51ssk7H2LWFC6BWx5J18ogEYPmUmoTUyjyUXx/8cEJTr68nO+IoqvWnOZE5qb8pII6olgTebjz6/mTjA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@farmfe/core-linux-x64-musl@1.3.14': + resolution: {integrity: sha512-XsO/PsJkH0dPluckfMd9ljku824+rpiLo4jwAtKJeW1Nyn2wAdK+Es+e5KXSAd8k1mWXLh8wsUjp+mU4axramg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@farmfe/core-win32-arm64-msvc@1.3.14': + resolution: {integrity: sha512-kSw3Ine30Zo26+x1s+o40bGjzREKD2Qexr08/1e3lnUdfyCKeCtpSUSD5x8JaXneFDumKx3OrPoaCDXjRKog2A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@farmfe/core-win32-ia32-msvc@1.3.14': + resolution: {integrity: sha512-jabOBT2mxPNxb+oHRqpFrzbWxZVyCR2Q6IvGOsORCPvOMl4W3j+PmaGGQ6gY/Qb3PWNzv4tEyLOPH1qf3Zh0BA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@farmfe/core-win32-x64-msvc@1.3.14': + resolution: {integrity: sha512-yqTXYtcLH25nylcSe3xpJFhIrGZYW+19AFX+vnsvDpGhRImo4X+dRdBunZFXw3mLv2uYIELgueagKR8jQIlVDw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@farmfe/core@1.3.14': + resolution: {integrity: sha512-Q9F1LOcaADVlOm7St/nz5GZ+fk9PWLGGBcyFgIzdTJS3/S4g9BcRX5/RcXND8kk9tevntoM5cD3WgeW5SjmlEQ==} + engines: {node: '>=16.15.1'} + + '@farmfe/plugin-react-darwin-arm64@1.2.1': + resolution: {integrity: sha512-LPVY6qXwc/V7DahmsEHxWAwEL4YH9jaOtV+T/HwCV50LNATPol7T8xWIUDKuaE5ERccfu2dycYVRtx4imCrVKg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@farmfe/plugin-react-darwin-x64@1.2.1': + resolution: {integrity: sha512-Zi6M7LqfTIZkmHdkFX1ouARRqjneC1AYFcoJDXvKpSzTMtmKkfowql0MAMKc+LCuLoeBigifoNYoVOeeuFE/ew==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@farmfe/plugin-react-linux-arm64-gnu@1.2.1': + resolution: {integrity: sha512-NbVx21i0oiMQbfJ1TkEtcKVNR2APZf+DsHocwpcZO6/2StGtXUIC8y/KZH0+T62UtxKFr883LxUGvavlLNm6sw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@farmfe/plugin-react-linux-arm64-musl@1.2.1': + resolution: {integrity: sha512-uXVSeV6SiSG/LPosplOnpdmKoN7Y0bIFIec2WRT0xtxeUBNPLIIYLhTbxkqym+dIsVoJlSQlwJt0yWFTpPObXQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@farmfe/plugin-react-linux-x64-gnu@1.2.1': + resolution: {integrity: sha512-XKyF0tQQWnOqKb9Lt/nap35WUc+BwTuOf4nVSPUgP1IsuG1oJLqS6qGzS8p4tb3eGGTygHTYkkpbfQHVrGiqtw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@farmfe/plugin-react-linux-x64-musl@1.2.1': + resolution: {integrity: sha512-xgbAiZMFmYP+6xbljNBA7y89fsZmCxmbuYw1zoOCUoSBOEpHbcA3/QzGj20rQhGF+qgxAoVmLwQnm9SUOttmiw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@farmfe/plugin-react-win32-arm64-msvc@1.2.1': + resolution: {integrity: sha512-YuJ8VnCXsRTn/7AnBxFoPfCuTecr8fJRe+WktLT6y1U4/u2bUUVYTnFM46/0JvBxVN48O+LQGg+3FUrAtZe31A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@farmfe/plugin-react-win32-ia32-msvc@1.2.1': + resolution: {integrity: sha512-vaa2tK8N1GExPC+MLlVd6LIvBZgPDugnMzueQt6t3H+TvKpbSIhIdzD959ORwCQUbl01L33/xZJBOLliT1+Acw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@farmfe/plugin-react-win32-x64-msvc@1.2.1': + resolution: {integrity: sha512-PSrbsXdhQ64awgNWvig3UHUyt6LRFJQ/WUESmw/OUpPlnfqfpw42wNiG8xcMWGJ/CompksFJT4v7jt5eCrrkbg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@farmfe/plugin-react@1.2.1': + resolution: {integrity: sha512-Uv/WspjlJLf1Rmjqf39bXfq0NDf8m771jnvpMtT95xCdcL3Yqcmua5M4rkVTn607UGZHwBVJB+VM/TORKeOUpg==} + + '@farmfe/plugin-tools@0.1.1': + resolution: {integrity: sha512-7ox1VgCI5AWFrIUQVLEYGdqCSGNBJYRC0Yhu5sK0a/sR/OSaZa97MdiKA80LkM6UgK+dDFy49rPre10U/M7yww==} + hasBin: true + + '@farmfe/runtime-plugin-hmr@3.5.6': + resolution: {integrity: sha512-VNvxRKEgPdDmScmxWhTV90Grg3GrMwVZHOr6svoqmRYxsgx83GJ391RXjmPrU0inCW1iTdQL5kkDzNqSFqLrSw==} + + '@farmfe/runtime-plugin-import-meta@0.2.2': + resolution: {integrity: sha512-xrWJOHbmhVJX+a6LtRpv5wvj/uqpPQFZIKeHfT+mqybKRSC9+JxDgOySLzYUbT8beSTtXgcxGXf55EN3Byd0ng==} + + '@farmfe/runtime@0.12.2': + resolution: {integrity: sha512-uUjzploKpWnpkS8C3lMqhT55tz5kIwzXRb2MaE6WHuNcLX51cywV23Z+nu+F7Ik1kqnnk0mhWwpm4O672QaM2A==} + + '@farmfe/utils@0.0.1': + resolution: {integrity: sha512-QLbgNrojcvxfumXA/H329XAXhoCahmeSH3JmaiwwJEGS2QAmWfgAJMegjwlt6OmArGVO4gSbJ7Xbmm1idZZs+g==} + + '@farmfe/utils@0.1.0': + resolution: {integrity: sha512-neNJQGqV7XL4XifG1uHOBFSFLy2yx1/DVZNRA7nfeEAXEksVZTwWA+fZrYEaI0w7Sw6K/9NYn9Jgpn+NAT0mcg==} + + '@koa/cors@5.0.0': + resolution: {integrity: sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==} + engines: {node: '>= 14.0.0'} + + '@ljharb/through@2.3.13': + resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} + engines: {node: '>= 0.4'} + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@mdn/browser-compat-data@5.5.48': + resolution: {integrity: sha512-ddCsJkVKMfZJS4Ik7ekgoBjMPRdAb7p68+1VSRls3mUWJ2hknSAIOj2gBobRSd/8XdbIRYMsBEpJRl2jhB4sFg==} + + '@napi-rs/cli@2.18.4': + resolution: {integrity: sha512-SgJeA4df9DE2iAEpr3M2H0OKl/yjtg1BnRI5/JyowS71tUWhrfSu2LT0V3vlHET+g1hBVlrO60PmEXwUEKp8Mg==} + engines: {node: '>= 10'} + hasBin: true + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@swc/helpers@0.5.12': + resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} + + '@types/http-proxy@1.17.15': + resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@22.5.0': + resolution: {integrity: sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==} + + '@types/object-path@0.11.4': + resolution: {integrity: sha512-4tgJ1Z3elF/tOMpA8JLVuR9spt9Ynsf7+JjqsQ2IqtiPJtcLoHoXcT6qU4E10cPFqyXX5HDm9QwIzZhBSkLxsw==} + + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + + '@types/react@18.3.4': + resolution: {integrity: sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/ua-parser-js@0.7.39': + resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + + big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cache-content-type@1.0.1: + resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} + engines: {node: '>= 6.0.0'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + caniuse-lite@1.0.30001653: + resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + cookies@0.9.1: + resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} + engines: {node: '>= 0.8'} + + core-js@3.38.1: + resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==} + + cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-equal@1.0.1: + resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + + default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dotenv-expand@11.0.6: + resolution: {integrity: sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==} + engines: {node: '>=12'} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.13: + resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + farm-browserslist-generator@1.0.0: + resolution: {integrity: sha512-UGd1eWtSLOqxl0tlexRwpsy1JbHdO39iCDZKzdr7khBKYFXL5PDjjcyj1xelt5YUnLNB2vPAb8P+uD8IqRnBJQ==} + engines: {node: '>=16.15.1', npm: '>=7.0.0', pnpm: '>=3.2.0', yarn: '>=1.13'} + + farm-plugin-replace-dirname-darwin-arm64@0.2.1: + resolution: {integrity: sha512-9FThv/qoFuj3cJjv9P6YnXbBwPQ5TwGjnr50ejXdZn13Ehz0+7w7EscbRsZHNvT7p24p6i0Y9NUSallcWc2syw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + farm-plugin-replace-dirname-darwin-x64@0.2.1: + resolution: {integrity: sha512-Msqrh8mAPBbEpANpa0z9uQBr1/MO+PaHgBxym/aNs1vpxB4KAs6JQWYKtO+Ob7JzFyV6d9lIRhpnpxzxTqSIfA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + farm-plugin-replace-dirname-linux-arm64-gnu@0.2.1: + resolution: {integrity: sha512-ZKuxGu9G01CW521uTQHh+IP8pcT/NolGQfcQuEmBpD8epJ8per8Ps52fS05u5TGniaOg+ySZpt7HxbX+++k1YQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + farm-plugin-replace-dirname-linux-arm64-musl@0.2.1: + resolution: {integrity: sha512-m3gH8ggczbRYTHZSNp3LjIQIcqhvDO4O78bxXc8O1ozKD8M47/YfQLyQV06M7H4rZ8s6XV3Bb1kAcRAASp3M5A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + farm-plugin-replace-dirname-linux-x64-gnu@0.2.1: + resolution: {integrity: sha512-MehKkoM2RFw3sCnEu9nCbXKjxtC3hfTad0h/dC+Z8iEBcLEReVLoNzHWWUa6BxkxqDtB82/BWO/ObSUj/VUnwQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + farm-plugin-replace-dirname-linux-x64-musl@0.2.1: + resolution: {integrity: sha512-o1qPZi16N/sHOteZYJVv6UmZFK3QKpVQrywk/4spJI0mPH9A9Y+G6iBE2Tqjb3d+1Hb6phr++EBJHZ2x1ajtGQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + farm-plugin-replace-dirname-win32-arm64-msvc@0.2.1: + resolution: {integrity: sha512-Xn/wYFkgb7SsTlSaefFtvxNbXEVdvZB854b/rBZu47+MRQpSnBIPwnTGcqo8eNTMjtnY4beGGtcd78iqMVAHFQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + farm-plugin-replace-dirname-win32-ia32-msvc@0.2.1: + resolution: {integrity: sha512-YtIu5CS/BSgbQZb1qjaBg0cEKvB4vCIbBxNn64H468zwliPbE93SAIyiwu6cL3la59cjBP4sEbz4ZAWyY9GoMQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + farm-plugin-replace-dirname-win32-x64-msvc@0.2.1: + resolution: {integrity: sha512-KUAf4rcv3Nz+CpGs4zr+ZRu4hWRp7SHQBgpX+mb0hhMjRvn+LoWm2qCL2q9Gp3jsTDVmzjPbyZxp/9UJKx13lQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + farm-plugin-replace-dirname@0.2.1: + resolution: {integrity: sha512-aJ4euQzxoq0sVu4AwXrNQflHJrSZdrdApGEyVRtN6KiCop3CHXnTg9ydlyCNXN2unQB283aNjojvCd5E/32KgA==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + figures@5.0.0: + resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} + engines: {node: '>=14'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + http-assert@1.5.0: + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} + engines: {node: '>= 0.8'} + + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + http-proxy-middleware@3.0.0: + resolution: {integrity: sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@9.2.12: + resolution: {integrity: sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==} + engines: {node: '>=14.18.0'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isbot@3.8.0: + resolution: {integrity: sha512-vne1mzQUTR+qsMLeCBL9+/tgnDXRyc2pygLGl/WsgA+EZKIiB5Ehu0CiVTHIIk30zhJ24uGz4M5Ppse37aR0Hg==} + engines: {node: '>=12'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keygrip@1.1.0: + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} + + koa-compose@4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + + koa-compress@5.1.1: + resolution: {integrity: sha512-UgMIN7ZoEP2DuoSQmD6CYvFSLt0NReGlc2qSY4bO4Oq0L56OiD9pDG41Kj/zFmVY/A3Wvmn4BqKcfq5H30LGIg==} + engines: {node: '>= 12'} + + koa-connect@2.1.0: + resolution: {integrity: sha512-O9pcFafHk0oQsBevlbTBlB9co+2RUQJ4zCzu3qJPmGlGoeEZkne+7gWDkecqDPSbCtED6LmhlQladxs6NjOnMQ==} + + koa-convert@2.0.0: + resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} + engines: {node: '>= 10'} + + koa-is-json@1.0.0: + resolution: {integrity: sha512-+97CtHAlWDx0ndt0J8y3P12EWLwTLMXIfMnYDev3wOTwH/RpBGMlfn4bDXlMEg1u73K6XRE9BbUp+5ZAYoRYWw==} + + koa-send@5.0.1: + resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} + engines: {node: '>= 8'} + + koa-static@5.0.0: + resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} + engines: {node: '>= 7.6.0'} + + koa@2.15.3: + resolution: {integrity: sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==} + engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + + load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loglevel@1.9.1: + resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} + engines: {node: '>= 0.6.0'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + object-path@0.11.8: + resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} + engines: {node: '>= 10.12.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + only@0.0.2: + resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} + + open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + preferred-pm@3.1.4: + resolution: {integrity: sha512-lEHd+yEm22jXdCphDrkvIJQU66EuLojPPtvZkpKIkiD+l0DMThF/niqZKJSoU8Vl7iuvtmzyMhir9LdVy5WMnA==} + engines: {node: '>=10'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-path@1.4.0: + resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} + engines: {node: '>= 0.8'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + ua-parser-js@1.0.38: + resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + walkdir@0.4.1: + resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==} + engines: {node: '>=6.0.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + which-pm@2.2.0: + resolution: {integrity: sha512-MOiaDbA5ZZgUjkeMWM5EkJp4loW5ZRoa5bc3/aeMox/PJelMhE6t7S/mLuiY43DBupyxH+S0U1bTui9kWUlmsw==} + engines: {node: '>=8.15'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + + ylru@1.4.0: + resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} + engines: {node: '>= 4.0.0'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod-validation-error@1.5.0: + resolution: {integrity: sha512-/7eFkAI4qV0tcxMBB/3+d2c1P6jzzZYdYSlBuAklzMuCrJu5bzJfHS0yVAS87dRHVlhftd6RFJDIvv03JgkSbw==} + engines: {node: '>=16.0.0'} + peerDependencies: + zod: ^3.18.0 + + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + +snapshots: + + '@babel/runtime@7.25.4': + dependencies: + regenerator-runtime: 0.14.1 + + '@changesets/apply-release-plan@7.0.4': + dependencies: + '@babel/runtime': 7.25.4 + '@changesets/config': 3.0.2 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.0 + '@changesets/should-skip-package': 0.1.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.6.3 + + '@changesets/assemble-release-plan@6.0.3': + dependencies: + '@babel/runtime': 7.25.4 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.1 + '@changesets/should-skip-package': 0.1.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.6.3 + + '@changesets/changelog-git@0.2.0': + dependencies: + '@changesets/types': 6.0.0 + + '@changesets/cli@2.27.7': + dependencies: + '@babel/runtime': 7.25.4 + '@changesets/apply-release-plan': 7.0.4 + '@changesets/assemble-release-plan': 6.0.3 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.2 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.1 + '@changesets/get-release-plan': 4.0.3 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/should-skip-package': 0.1.0 + '@changesets/types': 6.0.0 + '@changesets/write': 0.3.1 + '@manypkg/get-packages': 1.1.3 + '@types/semver': 7.5.8 + ansi-colors: 4.1.3 + chalk: 2.4.2 + ci-info: 3.9.0 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + mri: 1.2.0 + outdent: 0.5.0 + p-limit: 2.3.0 + preferred-pm: 3.1.4 + resolve-from: 5.0.0 + semver: 7.6.3 + spawndamnit: 2.0.0 + term-size: 2.2.1 + + '@changesets/config@3.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.1 + '@changesets/logger': 0.1.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@changesets/get-dependents-graph@2.1.1': + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + chalk: 2.4.2 + fs-extra: 7.0.1 + semver: 7.6.3 + + '@changesets/get-release-plan@4.0.3': + dependencies: + '@babel/runtime': 7.25.4 + '@changesets/assemble-release-plan': 6.0.3 + '@changesets/config': 3.0.2 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@3.0.0': + dependencies: + '@babel/runtime': 7.25.4 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 2.0.0 + + '@changesets/logger@0.1.0': + dependencies: + chalk: 2.4.2 + + '@changesets/parse@0.4.0': + dependencies: + '@changesets/types': 6.0.0 + js-yaml: 3.14.1 + + '@changesets/pre@2.0.0': + dependencies: + '@babel/runtime': 7.25.4 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.6.0': + dependencies: + '@babel/runtime': 7.25.4 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 + chalk: 2.4.2 + fs-extra: 7.0.1 + p-filter: 2.1.0 + + '@changesets/should-skip-package@0.1.0': + dependencies: + '@babel/runtime': 7.25.4 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.0.0': {} + + '@changesets/write@0.3.1': + dependencies: + '@babel/runtime': 7.25.4 + '@changesets/types': 6.0.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + prettier: 2.8.8 + + '@farmfe/cli@1.0.4': + dependencies: + cac: 6.7.14 + cross-spawn: 7.0.3 + inquirer: 9.2.12 + walkdir: 0.4.1 + + '@farmfe/core-darwin-arm64@1.3.14': + optional: true + + '@farmfe/core-darwin-x64@1.3.14': + optional: true + + '@farmfe/core-linux-arm64-gnu@1.3.14': + optional: true + + '@farmfe/core-linux-arm64-musl@1.3.14': + optional: true + + '@farmfe/core-linux-x64-gnu@1.3.14': + optional: true + + '@farmfe/core-linux-x64-musl@1.3.14': + optional: true + + '@farmfe/core-win32-arm64-msvc@1.3.14': + optional: true + + '@farmfe/core-win32-ia32-msvc@1.3.14': + optional: true + + '@farmfe/core-win32-x64-msvc@1.3.14': + optional: true + + '@farmfe/core@1.3.14': + dependencies: + '@farmfe/runtime': 0.12.2 + '@farmfe/runtime-plugin-hmr': 3.5.6 + '@farmfe/runtime-plugin-import-meta': 0.2.2 + '@farmfe/utils': 0.1.0 + '@koa/cors': 5.0.0 + '@swc/helpers': 0.5.12 + chokidar: 3.6.0 + deepmerge: 4.3.1 + dotenv: 16.4.5 + dotenv-expand: 11.0.6 + execa: 7.2.0 + farm-browserslist-generator: 1.0.0 + farm-plugin-replace-dirname: 0.2.1 + fast-glob: 3.3.2 + fs-extra: 11.2.0 + http-proxy-middleware: 3.0.0 + is-plain-object: 5.0.0 + koa: 2.15.3 + koa-compress: 5.1.1 + koa-connect: 2.1.0 + koa-static: 5.0.0 + lodash.debounce: 4.0.8 + loglevel: 1.9.1 + open: 9.1.0 + ws: 8.18.0 + zod: 3.23.8 + zod-validation-error: 1.5.0(zod@3.23.8) + optionalDependencies: + '@farmfe/core-darwin-arm64': 1.3.14 + '@farmfe/core-darwin-x64': 1.3.14 + '@farmfe/core-linux-arm64-gnu': 1.3.14 + '@farmfe/core-linux-arm64-musl': 1.3.14 + '@farmfe/core-linux-x64-gnu': 1.3.14 + '@farmfe/core-linux-x64-musl': 1.3.14 + '@farmfe/core-win32-arm64-msvc': 1.3.14 + '@farmfe/core-win32-ia32-msvc': 1.3.14 + '@farmfe/core-win32-x64-msvc': 1.3.14 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@farmfe/plugin-react-darwin-arm64@1.2.1': + optional: true + + '@farmfe/plugin-react-darwin-x64@1.2.1': + optional: true + + '@farmfe/plugin-react-linux-arm64-gnu@1.2.1': + optional: true + + '@farmfe/plugin-react-linux-arm64-musl@1.2.1': + optional: true + + '@farmfe/plugin-react-linux-x64-gnu@1.2.1': + optional: true + + '@farmfe/plugin-react-linux-x64-musl@1.2.1': + optional: true + + '@farmfe/plugin-react-win32-arm64-msvc@1.2.1': + optional: true + + '@farmfe/plugin-react-win32-ia32-msvc@1.2.1': + optional: true + + '@farmfe/plugin-react-win32-x64-msvc@1.2.1': + optional: true + + '@farmfe/plugin-react@1.2.1': + optionalDependencies: + '@farmfe/plugin-react-darwin-arm64': 1.2.1 + '@farmfe/plugin-react-darwin-x64': 1.2.1 + '@farmfe/plugin-react-linux-arm64-gnu': 1.2.1 + '@farmfe/plugin-react-linux-arm64-musl': 1.2.1 + '@farmfe/plugin-react-linux-x64-gnu': 1.2.1 + '@farmfe/plugin-react-linux-x64-musl': 1.2.1 + '@farmfe/plugin-react-win32-arm64-msvc': 1.2.1 + '@farmfe/plugin-react-win32-ia32-msvc': 1.2.1 + '@farmfe/plugin-react-win32-x64-msvc': 1.2.1 + + '@farmfe/plugin-tools@0.1.1': + dependencies: + '@farmfe/utils': 0.1.0 + '@napi-rs/cli': 2.18.4 + cac: 6.7.14 + + '@farmfe/runtime-plugin-hmr@3.5.6': + dependencies: + core-js: 3.38.1 + + '@farmfe/runtime-plugin-import-meta@0.2.2': + dependencies: + core-js: 3.38.1 + + '@farmfe/runtime@0.12.2': + dependencies: + core-js: 3.38.1 + + '@farmfe/utils@0.0.1': {} + + '@farmfe/utils@0.1.0': {} + + '@koa/cors@5.0.0': + dependencies: + vary: 1.1.2 + + '@ljharb/through@2.3.13': + dependencies: + call-bind: 1.0.7 + + '@manypkg/find-root@1.1.0': + dependencies: + '@babel/runtime': 7.25.4 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + + '@manypkg/get-packages@1.1.3': + dependencies: + '@babel/runtime': 7.25.4 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + + '@mdn/browser-compat-data@5.5.48': {} + + '@napi-rs/cli@2.18.4': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@swc/helpers@0.5.12': + dependencies: + tslib: 2.7.0 + + '@types/http-proxy@1.17.15': + dependencies: + '@types/node': 22.5.0 + + '@types/node@12.20.55': {} + + '@types/node@22.5.0': + dependencies: + undici-types: 6.19.8 + + '@types/object-path@0.11.4': {} + + '@types/prop-types@15.7.12': {} + + '@types/react-dom@18.3.0': + dependencies: + '@types/react': 18.3.4 + + '@types/react@18.3.4': + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + + '@types/semver@7.5.8': {} + + '@types/ua-parser-js@0.7.39': {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + array-union@2.1.0: {} + + base64-js@1.5.1: {} + + better-path-resolve@1.0.0: + dependencies: + is-windows: 1.0.2 + + big-integer@1.6.52: {} + + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + bplist-parser@0.2.0: + dependencies: + big-integer: 1.6.52 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.23.3: + dependencies: + caniuse-lite: 1.0.30001653 + electron-to-chromium: 1.5.13 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@3.0.0: + dependencies: + run-applescript: 5.0.0 + + bytes@3.1.2: {} + + cac@6.7.14: {} + + cache-content-type@1.0.1: + dependencies: + mime-types: 2.1.35 + ylru: 1.4.0 + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + caniuse-lite@1.0.30001653: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + chardet@0.7.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + ci-info@3.9.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-width@4.1.0: {} + + clone@1.0.4: {} + + clsx@1.2.1: {} + + co@4.6.0: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.53.0 + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + cookies@0.9.1: + dependencies: + depd: 2.0.0 + keygrip: 1.1.0 + + core-js@3.38.1: {} + + cross-spawn@5.1.0: + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.1.3: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.6: + dependencies: + ms: 2.1.2 + + deep-equal@1.0.1: {} + + deepmerge@4.3.1: {} + + default-browser-id@3.0.0: + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + + default-browser@4.0.0: + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-lazy-prop@3.0.0: {} + + delegates@1.0.0: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-indent@6.1.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dotenv-expand@11.0.6: + dependencies: + dotenv: 16.4.5 + + dotenv@16.4.5: {} + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.13: {} + + emoji-regex@8.0.0: {} + + encodeurl@1.0.2: {} + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + escalade@3.1.2: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@5.0.0: {} + + esprima@4.0.1: {} + + eventemitter3@4.0.7: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@7.2.0: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + extendable-error@0.1.7: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + farm-browserslist-generator@1.0.0: + dependencies: + '@mdn/browser-compat-data': 5.5.48 + '@types/object-path': 0.11.4 + '@types/semver': 7.5.8 + '@types/ua-parser-js': 0.7.39 + browserslist: 4.23.3 + caniuse-lite: 1.0.30001653 + isbot: 3.8.0 + object-path: 0.11.8 + semver: 7.6.3 + ua-parser-js: 1.0.38 + + farm-plugin-replace-dirname-darwin-arm64@0.2.1: + optional: true + + farm-plugin-replace-dirname-darwin-x64@0.2.1: + optional: true + + farm-plugin-replace-dirname-linux-arm64-gnu@0.2.1: + optional: true + + farm-plugin-replace-dirname-linux-arm64-musl@0.2.1: + optional: true + + farm-plugin-replace-dirname-linux-x64-gnu@0.2.1: + optional: true + + farm-plugin-replace-dirname-linux-x64-musl@0.2.1: + optional: true + + farm-plugin-replace-dirname-win32-arm64-msvc@0.2.1: + optional: true + + farm-plugin-replace-dirname-win32-ia32-msvc@0.2.1: + optional: true + + farm-plugin-replace-dirname-win32-x64-msvc@0.2.1: + optional: true + + farm-plugin-replace-dirname@0.2.1: + dependencies: + '@changesets/cli': 2.27.7 + '@farmfe/utils': 0.0.1 + cac: 6.7.14 + optionalDependencies: + farm-plugin-replace-dirname-darwin-arm64: 0.2.1 + farm-plugin-replace-dirname-darwin-x64: 0.2.1 + farm-plugin-replace-dirname-linux-arm64-gnu: 0.2.1 + farm-plugin-replace-dirname-linux-arm64-musl: 0.2.1 + farm-plugin-replace-dirname-linux-x64-gnu: 0.2.1 + farm-plugin-replace-dirname-linux-x64-musl: 0.2.1 + farm-plugin-replace-dirname-win32-arm64-msvc: 0.2.1 + farm-plugin-replace-dirname-win32-ia32-msvc: 0.2.1 + farm-plugin-replace-dirname-win32-x64-msvc: 0.2.1 + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + figures@5.0.0: + dependencies: + escape-string-regexp: 5.0.0 + is-unicode-supported: 1.3.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + find-yarn-workspace-root2@1.2.16: + dependencies: + micromatch: 4.0.8 + pkg-dir: 4.2.0 + + follow-redirects@1.15.6(debug@4.3.6): + optionalDependencies: + debug: 4.3.6 + + fresh@0.5.2: {} + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-stream@6.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + http-assert@1.5.0: + dependencies: + deep-equal: 1.0.1 + http-errors: 1.8.1 + + http-errors@1.6.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + + http-errors@1.8.1: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + + http-proxy-middleware@3.0.0: + dependencies: + '@types/http-proxy': 1.17.15 + debug: 4.3.6 + http-proxy: 1.18.1(debug@4.3.6) + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.8 + transitivePeerDependencies: + - supports-color + + http-proxy@1.18.1(debug@4.3.6): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.6(debug@4.3.6) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + human-id@1.0.2: {} + + human-signals@2.1.0: {} + + human-signals@4.3.1: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + inherits@2.0.3: {} + + inherits@2.0.4: {} + + inquirer@9.2.12: + dependencies: + '@ljharb/through': 2.3.13 + ansi-escapes: 4.3.2 + chalk: 5.3.0 + cli-cursor: 3.1.0 + cli-width: 4.1.0 + external-editor: 3.1.0 + figures: 5.0.0 + lodash: 4.17.21 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-interactive@1.0.0: {} + + is-number@7.0.0: {} + + is-plain-obj@3.0.0: {} + + is-plain-object@5.0.0: {} + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-subdir@1.2.0: + dependencies: + better-path-resolve: 1.0.0 + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + is-windows@1.0.2: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isbot@3.8.0: {} + + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keygrip@1.1.0: + dependencies: + tsscmp: 1.0.6 + + koa-compose@4.1.0: {} + + koa-compress@5.1.1: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + http-errors: 1.8.1 + koa-is-json: 1.0.0 + + koa-connect@2.1.0: {} + + koa-convert@2.0.0: + dependencies: + co: 4.6.0 + koa-compose: 4.1.0 + + koa-is-json@1.0.0: {} + + koa-send@5.0.1: + dependencies: + debug: 4.3.6 + http-errors: 1.8.1 + resolve-path: 1.4.0 + transitivePeerDependencies: + - supports-color + + koa-static@5.0.0: + dependencies: + debug: 3.2.7 + koa-send: 5.0.1 + transitivePeerDependencies: + - supports-color + + koa@2.15.3: + dependencies: + accepts: 1.3.8 + cache-content-type: 1.0.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookies: 0.9.1 + debug: 4.3.6 + delegates: 1.0.0 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + fresh: 0.5.2 + http-assert: 1.5.0 + http-errors: 1.8.1 + is-generator-function: 1.0.10 + koa-compose: 4.1.0 + koa-convert: 2.0.0 + on-finished: 2.4.1 + only: 0.0.2 + parseurl: 1.3.3 + statuses: 1.5.0 + type-is: 1.6.18 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + load-yaml-file@0.2.0: + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.debounce@4.0.8: {} + + lodash.startcase@4.4.0: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loglevel@1.9.1: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@4.1.5: + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + + media-typer@0.3.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.53.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mri@1.2.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + mute-stream@1.0.0: {} + + negotiator@0.6.3: {} + + node-releases@2.0.18: {} + + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + object-path@0.11.8: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + only@0.0.2: {} + + open@9.1.0: + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-tmpdir@1.0.2: {} + + outdent@0.5.0: {} + + p-filter@2.1.0: + dependencies: + p-map: 2.1.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@2.1.0: {} + + p-try@2.2.0: {} + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-type@4.0.0: {} + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + pify@4.0.1: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + preferred-pm@3.1.4: + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.2.0 + + prettier@2.8.8: {} + + pseudomap@1.0.2: {} + + queue-microtask@1.2.3: {} + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-refresh@0.14.2: {} + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + read-yaml-file@1.1.0: + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + requires-port@1.0.0: {} + + resolve-from@5.0.0: {} + + resolve-path@1.4.0: + dependencies: + http-errors: 1.6.3 + path-is-absolute: 1.0.1 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + reusify@1.0.4: {} + + run-applescript@5.0.0: + dependencies: + execa: 5.1.1 + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.7.0 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@7.6.3: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + setprototypeof@1.1.0: {} + + setprototypeof@1.2.0: {} + + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@1.0.0: {} + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + slash@3.0.0: {} + + spawndamnit@2.0.0: + dependencies: + cross-spawn: 5.1.0 + signal-exit: 3.0.7 + + sprintf-js@1.0.3: {} + + statuses@1.5.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + term-size@2.2.1: {} + + titleize@3.0.0: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tslib@2.7.0: {} + + tsscmp@1.0.6: {} + + type-fest@0.21.3: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + ua-parser-js@1.0.38: {} + + undici-types@6.19.8: {} + + universalify@0.1.2: {} + + universalify@2.0.1: {} + + untildify@4.0.0: {} + + update-browserslist-db@1.1.0(browserslist@4.23.3): + dependencies: + browserslist: 4.23.3 + escalade: 3.1.2 + picocolors: 1.0.1 + + util-deprecate@1.0.2: {} + + vary@1.1.2: {} + + walkdir@0.4.1: {} + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + which-pm@2.2.0: + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + ws@8.18.0: {} + + yallist@2.1.2: {} + + ylru@1.4.0: {} + + yocto-queue@0.1.0: {} + + zod-validation-error@1.5.0(zod@3.23.8): + dependencies: + zod: 3.23.8 + + zod@3.23.8: {} diff --git a/packages/react-router/pnpm-workspace.yaml b/packages/react-router/pnpm-workspace.yaml new file mode 100644 index 0000000..bf93c07 --- /dev/null +++ b/packages/react-router/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - '.' + - playground diff --git a/packages/react-router/rust-toolchain.toml b/packages/react-router/rust-toolchain.toml new file mode 100644 index 0000000..0eb96b5 --- /dev/null +++ b/packages/react-router/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2024-04-16" +components = ["clippy", "rustfmt", "rust-src", "rustc-dev"] diff --git a/packages/react-router/rustfmt.toml b/packages/react-router/rustfmt.toml new file mode 100644 index 0000000..cab5731 --- /dev/null +++ b/packages/react-router/rustfmt.toml @@ -0,0 +1,2 @@ +tab_spaces = 2 +edition = "2021" diff --git a/packages/react-router/scripts/func.js b/packages/react-router/scripts/func.js new file mode 100644 index 0000000..ebd41be --- /dev/null +++ b/packages/react-router/scripts/func.js @@ -0,0 +1,3 @@ +import binPath from "./index.js"; + +export default (options)=>[binPath,options]; diff --git a/packages/react-router/scripts/index.d.ts b/packages/react-router/scripts/index.d.ts new file mode 100644 index 0000000..ae1464e --- /dev/null +++ b/packages/react-router/scripts/index.d.ts @@ -0,0 +1,3 @@ +import type { IPluginOptions } from '../options.d'; +declare const binPath: (options?: IPluginOptions) => [string, IPluginOptions]; +export default binPath; diff --git a/packages/react-router/scripts/index.js b/packages/react-router/scripts/index.js new file mode 100644 index 0000000..a8620f3 --- /dev/null +++ b/packages/react-router/scripts/index.js @@ -0,0 +1,124 @@ +import { existsSync, readFileSync } from 'fs'; +import { createRequire } from 'module'; +import { dirname, join } from 'path'; +import { fileURLToPath } from 'url'; + +const { platform, arch } = process; +const currentDir = dirname(fileURLToPath(import.meta.url)); + +let binPath = null; + +const require = createRequire(import.meta.url); + +function isMusl() { + // For Node 10 + if (!process.report || typeof process.report.getReport !== 'function') { + try { + return readFileSync('/usr/bin/ldd', 'utf8').includes('musl'); + } catch (e) { + return true; + } + } else { + const { glibcVersionRuntime } = process.report.getReport().header; + return !glibcVersionRuntime; + } +} + +switch (platform) { + case 'win32': + switch (arch) { + case 'x64': + if (existsSync(join(currentDir, '../npm/win32-x64-msvc/index.farm'))) { + binPath = join(currentDir, '../npm/win32-x64-msvc/index.farm'); + } else { + binPath = require.resolve('farm-plugin-react-router-win32-x64-msvc'); + } + + break; + case 'ia32': + if (existsSync(join(currentDir, '../npm/win32-ia32-msvc/index.farm'))) { + binPath = join(currentDir, '../npm/win32-ia32-msvc/index.farm'); + } else { + binPath = require.resolve('farm-plugin-react-router-win32-ia32-msvc'); + } + + break; + case 'arm64': + if (existsSync(join(currentDir, '../npm/win32-arm64-msvc/index.farm'))) { + binPath = join(currentDir, '../npm/win32-arm64-msvc/index.farm'); + } else { + binPath = require.resolve('farm-plugin-react-router-win32-arm64-msvc'); + } + + break; + default: + throw new Error(`Unsupported architecture on Windows: ${arch}`); + } + break; + case 'darwin': + switch (arch) { + case 'x64': + if (existsSync(join(currentDir, '../npm/darwin-x64/index.farm'))) { + binPath = join(currentDir, '../npm/darwin-x64/index.farm'); + } else { + binPath = require.resolve('farm-plugin-react-router-darwin-x64'); + } + break; + case 'arm64': + if (existsSync(join(currentDir, '../npm/darwin-arm64/index.farm'))) { + binPath = join(currentDir, '../npm/darwin-arm64/index.farm'); + } else { + binPath = require.resolve('farm-plugin-react-router-darwin-arm64'); + } + break; + default: + throw new Error(`Unsupported architecture on macOS: ${arch}`); + } + break; + case 'linux': + switch (arch) { + case 'x64': + if (isMusl()) { + if (existsSync(join(currentDir, '../npm/linux-x64-musl/index.farm'))) { + binPath = join(currentDir, '../npm/linux-x64-musl/index.farm'); + } else { + binPath = require.resolve('farm-plugin-react-router-linux-x64-musl'); + } + } else { + if (existsSync(join(currentDir, '../npm/linux-x64-gnu/index.farm'))) { + binPath = join(currentDir, '../npm/linux-x64-gnu/index.farm'); + } else { + binPath = require.resolve('farm-plugin-react-router-linux-x64-gnu'); + } + } + + break; + + case 'arm64': + if (isMusl()) { + if ( + existsSync(join(currentDir, '../npm/linux-arm64-musl/index.farm')) + ) { + binPath = join(currentDir, '../npm/linux-arm64-musl/index.farm'); + } else { + binPath = require.resolve('farm-plugin-react-router-linux-arm64-musl'); + } + } else { + if ( + existsSync(join(currentDir, '../npm/linux-arm64-gnu/index.farm')) + ) { + binPath = join(currentDir, '../npm/linux-arm64-gnu/index.farm'); + } else { + binPath = require.resolve('farm-plugin-react-router-linux-arm64-gnu'); + } + } + break; + default: + throw new Error(`Unsupported architecture on Linux: ${arch}`); + } + break; + default: + throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`); +} + +export default binPath; diff --git a/packages/react-router/scripts/watch.sh b/packages/react-router/scripts/watch.sh new file mode 100644 index 0000000..255a484 --- /dev/null +++ b/packages/react-router/scripts/watch.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +npm run build diff --git a/packages/react-router/src/lib.rs b/packages/react-router/src/lib.rs new file mode 100644 index 0000000..973afe9 --- /dev/null +++ b/packages/react-router/src/lib.rs @@ -0,0 +1,20 @@ +#![deny(clippy::all)] + +use farmfe_core::{config::Config, plugin::Plugin}; + +use farmfe_macro_plugin::farm_plugin; + +#[farm_plugin] +pub struct FarmPluginReactRouter {} + +impl FarmPluginReactRouter { + fn new(config: &Config, options: String) -> Self { + Self {} + } +} + +impl Plugin for FarmPluginReactRouter { + fn name(&self) -> &str { + "FarmPluginReactRouter" + } +} From 180818818bb139eab1545fad5ac2ebe8d7c2e93b Mon Sep 17 00:00:00 2001 From: CCherry07 <2405693142@qq.com> Date: Tue, 27 Aug 2024 10:14:36 +0800 Subject: [PATCH 02/10] feat: init idea --- Cargo.lock | 3 + packages/react-router/Cargo.toml | 4 + .../react-router/playground/feat/route.json | 114 ++++++++++++++++++ .../react-router/playground/feat/route.ts | 63 ++++++++++ .../routes/($lang).dashboard.lazy.tsx | 5 + .../playground/routes/_auth.lazy.tsx | 13 ++ .../playground/routes/_auth.login.tsx | 19 +++ .../react-router/playground/routes/_index.tsx | 38 ++++++ .../react-router/playground/routes/auth.$.tsx | 5 + .../playground/routes/auth.$test.tsx | 5 + .../playground/routes/auth._index.lazy.tsx | 5 + .../playground/routes/auth.deploy.lazy.tsx | 11 ++ .../routes/auth.deploy.test.lazy.tsx | 5 + .../routes/auth.forgot-pass.lazy.tsx | 5 + .../playground/routes/auth.lazy.tsx | 13 ++ .../routes/auth.new.without.parent.lazy.tsx | 5 + .../routes/auth.recover.test.lazy.tsx | 5 + .../playground/routes/auth.recover/index.tsx | 0 .../routes/auth.recover/route.lazy.tsx | 11 ++ .../playground/routes/auth.recover/store.tsx | 0 .../playground/routes/concerts.$.tsx | 5 + .../playground/routes/concerts.$city.tsx | 13 ++ .../playground/routes/concerts._index.tsx | 5 + .../playground/routes/concerts.trending.tsx | 5 + .../playground/routes/concerts.tsx | 11 ++ .../playground/routes/concerts_.mine.tsx | 5 + .../playground/routes/concerts_.your.tsx | 5 + .../playground/routes/notes.lazy.tsx | 19 +++ packages/react-router/src/interface.rs | 20 +++ packages/react-router/src/lib.rs | 3 + packages/react-router/src/parse.rs | 82 +++++++++++++ 31 files changed, 502 insertions(+) create mode 100644 packages/react-router/playground/feat/route.json create mode 100644 packages/react-router/playground/feat/route.ts create mode 100644 packages/react-router/playground/routes/($lang).dashboard.lazy.tsx create mode 100644 packages/react-router/playground/routes/_auth.lazy.tsx create mode 100644 packages/react-router/playground/routes/_auth.login.tsx create mode 100644 packages/react-router/playground/routes/_index.tsx create mode 100644 packages/react-router/playground/routes/auth.$.tsx create mode 100644 packages/react-router/playground/routes/auth.$test.tsx create mode 100644 packages/react-router/playground/routes/auth._index.lazy.tsx create mode 100644 packages/react-router/playground/routes/auth.deploy.lazy.tsx create mode 100644 packages/react-router/playground/routes/auth.deploy.test.lazy.tsx create mode 100644 packages/react-router/playground/routes/auth.forgot-pass.lazy.tsx create mode 100644 packages/react-router/playground/routes/auth.lazy.tsx create mode 100644 packages/react-router/playground/routes/auth.new.without.parent.lazy.tsx create mode 100644 packages/react-router/playground/routes/auth.recover.test.lazy.tsx create mode 100644 packages/react-router/playground/routes/auth.recover/index.tsx create mode 100644 packages/react-router/playground/routes/auth.recover/route.lazy.tsx create mode 100644 packages/react-router/playground/routes/auth.recover/store.tsx create mode 100644 packages/react-router/playground/routes/concerts.$.tsx create mode 100644 packages/react-router/playground/routes/concerts.$city.tsx create mode 100644 packages/react-router/playground/routes/concerts._index.tsx create mode 100644 packages/react-router/playground/routes/concerts.trending.tsx create mode 100644 packages/react-router/playground/routes/concerts.tsx create mode 100644 packages/react-router/playground/routes/concerts_.mine.tsx create mode 100644 packages/react-router/playground/routes/concerts_.your.tsx create mode 100644 packages/react-router/playground/routes/notes.lazy.tsx create mode 100644 packages/react-router/src/interface.rs create mode 100644 packages/react-router/src/parse.rs diff --git a/Cargo.lock b/Cargo.lock index 651a8af..2788cff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -803,6 +803,9 @@ dependencies = [ "farmfe_macro_plugin", "farmfe_toolkit", "farmfe_toolkit_plugin_types", + "glob", + "serde", + "walkdir", ] [[package]] diff --git a/packages/react-router/Cargo.toml b/packages/react-router/Cargo.toml index a342301..dd92731 100644 --- a/packages/react-router/Cargo.toml +++ b/packages/react-router/Cargo.toml @@ -12,3 +12,7 @@ farmfe_core = { workspace = true } farmfe_toolkit_plugin_types = { workspace = true } farmfe_macro_plugin = { workspace = true } farmfe_toolkit = { workspace = true } + +serde = { version = "1.0.197", features = ["derive"] } +glob = "0.3.1" +walkdir = "2.5.0" diff --git a/packages/react-router/playground/feat/route.json b/packages/react-router/playground/feat/route.json new file mode 100644 index 0000000..2a304dc --- /dev/null +++ b/packages/react-router/playground/feat/route.json @@ -0,0 +1,114 @@ +[ + { + "path": "notes", + "lazy": "ImportStart'./app/routes/notes.lazy.tsx'ImportEnd" + }, + { + "path": "concerts/your", + "spread": "SpreadStartroute46236SpreadEnd" + }, + { + "path": "concerts/mine", + "spread": "SpreadStartroute99661SpreadEnd" + }, + { + "path": "concerts", + "spread": "SpreadStartroute34862SpreadEnd", + "children": [ + { + "path": "trending", + "spread": "SpreadStartroute17192SpreadEnd" + }, + { + "index": true, + "spread": "SpreadStartroute75517SpreadEnd" + }, + { + "path": ":city", + "spread": "SpreadStartroute6772SpreadEnd" + }, + { + "path": "*", + "spread": "SpreadStartroute93961SpreadEnd" + } + ] + }, + { + "path": "auth", + "lazy": "ImportStart'./app/routes/auth.lazy.tsx'ImportEnd", + "children": [ + { + "path": "recover", + "lazy": "ImportStart'./app/routes/auth.recover/route.lazy.tsx'ImportEnd", + "children": [ + { + "path": "test", + "lazy": "ImportStart'./app/routes/auth.recover.test.lazy.tsx'ImportEnd" + } + ] + }, + { + "path": "new", + "children": [ + { + "path": "without", + "children": [ + { + "path": "parent", + "lazy": "ImportStart'./app/routes/auth.new.without.parent.lazy.tsx'ImportEnd" + } + ] + } + ] + }, + { + "path": "forgot-pass", + "lazy": "ImportStart'./app/routes/auth.forgot-pass.lazy.tsx'ImportEnd" + }, + { + "path": "deploy", + "lazy": "ImportStart'./app/routes/auth.deploy.lazy.tsx'ImportEnd", + "children": [ + { + "path": "test", + "lazy": "ImportStart'./app/routes/auth.deploy.test.lazy.tsx'ImportEnd" + } + ] + }, + { + "index": true, + "lazy": "ImportStart'./app/routes/auth._index.lazy.tsx'ImportEnd" + }, + { + "path": ":test", + "spread": "SpreadStartroute70894SpreadEnd" + }, + { + "path": "*", + "spread": "SpreadStartroute16242SpreadEnd" + } + ] + }, + { + "index": true, + "spread": "SpreadStartroute79732SpreadEnd" + }, + { + "lazy": "ImportStart'./app/routes/_auth.lazy.tsx'ImportEnd", + "children": [ + { + "path": "login", + "spread": "SpreadStartroute12440SpreadEnd" + } + ] + }, + { + "path": ":lang?", + "children": [ + { + "path": "dashboard", + "lazy": "ImportStart'./app/routes/($lang).dashboard.lazy.tsx'ImportEnd" + } + ] + } +] diff --git a/packages/react-router/playground/feat/route.ts b/packages/react-router/playground/feat/route.ts new file mode 100644 index 0000000..b6ccdc7 --- /dev/null +++ b/packages/react-router/playground/feat/route.ts @@ -0,0 +1,63 @@ +import * as route57321 from '../routes/concerts_.your.tsx' +import * as route86759 from '../routes/concerts_.mine.tsx' +import * as route26116 from '../routes/concerts.tsx' +import * as route19440 from '../routes/concerts.trending.tsx' +import * as route82174 from '../routes/concerts._index.tsx' +import * as route76427 from '../routes/concerts.$city.tsx' +import * as route88004 from '../routes/concerts.$.tsx' +import * as route82398 from '../routes/auth.$test.tsx' +import * as route29280 from '../routes/auth.$.tsx' +import * as route20320 from '../routes/_index.tsx' +import * as route71204 from '../routes/_auth.login.tsx' + + +function moduleFactory(module) { + const { default: Component, clientLoader: loader, clientAction: action, loader: _loader, action: _action, Component: _Component, ...rest } = module; + return { Component, loader, action, ...rest }; +} + +export const routes = [ + { "path": "notes", "lazy": () => import('../routes/notes.lazy.tsx').then(moduleFactory) }, + { "path": "concerts/your", ...moduleFactory(route57321) }, + { "path": "concerts/mine", ...moduleFactory(route86759) }, + { + "path": "concerts", ...moduleFactory(route26116), + "children": [ + { "path": "trending", ...moduleFactory(route19440) }, + { "index": true, ...moduleFactory(route82174) }, + { "path": ":city", ...moduleFactory(route76427) }, + { "path": "*", ...moduleFactory(route88004) } + ] + }, + { + "path": "auth", "lazy": () => import('../routes/auth.lazy.tsx').then(moduleFactory), + "children": [ + { + "path": "recover", "lazy": () => import('../routes/auth.recover/route.lazy.tsx').then(moduleFactory), + "children": [{ "path": "test", "lazy": () => import('../routes/auth.recover.test.lazy.tsx').then(moduleFactory) }] + }, + { + "path": "new", "children": [{ + "path": "without", + "children": [{ "path": "parent", "lazy": () => import('../routes/auth.new.without.parent.lazy.tsx').then(moduleFactory) }] + }] + }, + { "path": "forgot-pass", "lazy": () => import('../routes/auth.forgot-pass.lazy.tsx').then(moduleFactory) }, + { + "path": "deploy", "lazy": () => import('../routes/auth.deploy.lazy.tsx').then(moduleFactory), + "children": [{ "path": "test", "lazy": () => import('../routes/auth.deploy.test.lazy.tsx').then(moduleFactory) }] + }, + { "index": true, "lazy": () => import('../routes/auth._index.lazy.tsx').then(moduleFactory) }, + { "path": ":test", ...moduleFactory(route82398) }, { "path": "*", ...moduleFactory(route29280) } + ] + }, + { "index": true, ...moduleFactory(route20320) }, + { + "lazy": () => import('../routes/_auth.lazy.tsx').then(moduleFactory), + "children": [{ "path": "login", ...moduleFactory(route71204) }] + }, + { + "path": ":lang?", "children": + [{ "path": "dashboard", "lazy": () => import('../routes/($lang).dashboard.lazy.tsx').then(moduleFactory) }] + }] + diff --git a/packages/react-router/playground/routes/($lang).dashboard.lazy.tsx b/packages/react-router/playground/routes/($lang).dashboard.lazy.tsx new file mode 100644 index 0000000..7e9dc29 --- /dev/null +++ b/packages/react-router/playground/routes/($lang).dashboard.lazy.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

dashboard

+} diff --git a/packages/react-router/playground/routes/_auth.lazy.tsx b/packages/react-router/playground/routes/_auth.lazy.tsx new file mode 100644 index 0000000..b635129 --- /dev/null +++ b/packages/react-router/playground/routes/_auth.lazy.tsx @@ -0,0 +1,13 @@ +// add context +

hidden auth layout

+ + + ) +} diff --git a/packages/react-router/playground/routes/_auth.login.tsx b/packages/react-router/playground/routes/_auth.login.tsx new file mode 100644 index 0000000..5e5431d --- /dev/null +++ b/packages/react-router/playground/routes/_auth.login.tsx @@ -0,0 +1,19 @@ +import React from 'react' +import { useLoaderData } from 'react-router-dom' + +export async function clientLoader() { + // sleep 2 seconds then return data + await new Promise(resolve => setTimeout(resolve, 2000)) + return ['Note 1', 'Note 2', 'Note 3'] +} + +export default function Component() { + const notes = useLoaderData() as string[] + + return ( + <> +

Notes

+ {notes.map(note =>

{note}

)} + + ) +} diff --git a/packages/react-router/playground/routes/_index.tsx b/packages/react-router/playground/routes/_index.tsx new file mode 100644 index 0000000..6f6d871 --- /dev/null +++ b/packages/react-router/playground/routes/_index.tsx @@ -0,0 +1,38 @@ +import React, { useState } from 'react' +import { useLoaderData } from 'react-router-dom' + +export async function clientLoader() { + return 'Vite + React' +} + +export default function Component() { + const [count, setCount] = useState(0) + const data = useLoaderData() as string + + return ( + <> +
+
+

{ data }

+
+ +

+ Edit + {' '} + src/App.tsx + {' '} + and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} diff --git a/packages/react-router/playground/routes/auth.$.tsx b/packages/react-router/playground/routes/auth.$.tsx new file mode 100644 index 0000000..4d78b0c --- /dev/null +++ b/packages/react-router/playground/routes/auth.$.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

Splat Route

+} diff --git a/packages/react-router/playground/routes/auth.$test.tsx b/packages/react-router/playground/routes/auth.$test.tsx new file mode 100644 index 0000000..553d71a --- /dev/null +++ b/packages/react-router/playground/routes/auth.$test.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

Dynamic Route

+} diff --git a/packages/react-router/playground/routes/auth._index.lazy.tsx b/packages/react-router/playground/routes/auth._index.lazy.tsx new file mode 100644 index 0000000..371ff21 --- /dev/null +++ b/packages/react-router/playground/routes/auth._index.lazy.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

login

+} diff --git a/packages/react-router/playground/routes/auth.deploy.lazy.tsx b/packages/react-router/playground/routes/auth.deploy.lazy.tsx new file mode 100644 index 0000000..d2f308e --- /dev/null +++ b/packages/react-router/playground/routes/auth.deploy.lazy.tsx @@ -0,0 +1,11 @@ +import React from 'react' +import { Outlet } from 'react-router-dom' + +export default function Component() { + return ( + <> +

deploy

+ + + ) +} diff --git a/packages/react-router/playground/routes/auth.deploy.test.lazy.tsx b/packages/react-router/playground/routes/auth.deploy.test.lazy.tsx new file mode 100644 index 0000000..8316fd0 --- /dev/null +++ b/packages/react-router/playground/routes/auth.deploy.test.lazy.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

deploy test

+} diff --git a/packages/react-router/playground/routes/auth.forgot-pass.lazy.tsx b/packages/react-router/playground/routes/auth.forgot-pass.lazy.tsx new file mode 100644 index 0000000..9f4bf19 --- /dev/null +++ b/packages/react-router/playground/routes/auth.forgot-pass.lazy.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

forgot password

+} diff --git a/packages/react-router/playground/routes/auth.lazy.tsx b/packages/react-router/playground/routes/auth.lazy.tsx new file mode 100644 index 0000000..54f7b15 --- /dev/null +++ b/packages/react-router/playground/routes/auth.lazy.tsx @@ -0,0 +1,13 @@ +// add context +

auth layout

+ + + ) +} diff --git a/packages/react-router/playground/routes/auth.new.without.parent.lazy.tsx b/packages/react-router/playground/routes/auth.new.without.parent.lazy.tsx new file mode 100644 index 0000000..5c21d6d --- /dev/null +++ b/packages/react-router/playground/routes/auth.new.without.parent.lazy.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

without parent

+} diff --git a/packages/react-router/playground/routes/auth.recover.test.lazy.tsx b/packages/react-router/playground/routes/auth.recover.test.lazy.tsx new file mode 100644 index 0000000..7922f5f --- /dev/null +++ b/packages/react-router/playground/routes/auth.recover.test.lazy.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

recover/test

+} diff --git a/packages/react-router/playground/routes/auth.recover/index.tsx b/packages/react-router/playground/routes/auth.recover/index.tsx new file mode 100644 index 0000000..e69de29 diff --git a/packages/react-router/playground/routes/auth.recover/route.lazy.tsx b/packages/react-router/playground/routes/auth.recover/route.lazy.tsx new file mode 100644 index 0000000..bcefad5 --- /dev/null +++ b/packages/react-router/playground/routes/auth.recover/route.lazy.tsx @@ -0,0 +1,11 @@ +import React from 'react' +import { Outlet } from 'react-router-dom' + +export default function Component() { + return ( + <> +

recover

+ + + ) +} diff --git a/packages/react-router/playground/routes/auth.recover/store.tsx b/packages/react-router/playground/routes/auth.recover/store.tsx new file mode 100644 index 0000000..e69de29 diff --git a/packages/react-router/playground/routes/concerts.$.tsx b/packages/react-router/playground/routes/concerts.$.tsx new file mode 100644 index 0000000..4340bf5 --- /dev/null +++ b/packages/react-router/playground/routes/concerts.$.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

Splat

+} diff --git a/packages/react-router/playground/routes/concerts.$city.tsx b/packages/react-router/playground/routes/concerts.$city.tsx new file mode 100644 index 0000000..9b4aab6 --- /dev/null +++ b/packages/react-router/playground/routes/concerts.$city.tsx @@ -0,0 +1,13 @@ +import React from 'react' + +export async function clientLoader() { + return 'loader' +} + +export async function clientAction() { + return 'action' +} + +export default function Component() { + return

Dynamic

+} diff --git a/packages/react-router/playground/routes/concerts._index.tsx b/packages/react-router/playground/routes/concerts._index.tsx new file mode 100644 index 0000000..805c53f --- /dev/null +++ b/packages/react-router/playground/routes/concerts._index.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

concerts index

+} diff --git a/packages/react-router/playground/routes/concerts.trending.tsx b/packages/react-router/playground/routes/concerts.trending.tsx new file mode 100644 index 0000000..1dd8174 --- /dev/null +++ b/packages/react-router/playground/routes/concerts.trending.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

concerts trending

+} diff --git a/packages/react-router/playground/routes/concerts.tsx b/packages/react-router/playground/routes/concerts.tsx new file mode 100644 index 0000000..f95e167 --- /dev/null +++ b/packages/react-router/playground/routes/concerts.tsx @@ -0,0 +1,11 @@ +import React from 'react' +import { Outlet } from 'react-router-dom' + +export default function Component() { + return ( + <> +

concerts layout

+ + + ) +} diff --git a/packages/react-router/playground/routes/concerts_.mine.tsx b/packages/react-router/playground/routes/concerts_.mine.tsx new file mode 100644 index 0000000..6abb701 --- /dev/null +++ b/packages/react-router/playground/routes/concerts_.mine.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

mine is out of concerts layout

+} diff --git a/packages/react-router/playground/routes/concerts_.your.tsx b/packages/react-router/playground/routes/concerts_.your.tsx new file mode 100644 index 0000000..525422a --- /dev/null +++ b/packages/react-router/playground/routes/concerts_.your.tsx @@ -0,0 +1,5 @@ +import React from 'react' + +export default function Component() { + return

your is out of concerts layout

+} diff --git a/packages/react-router/playground/routes/notes.lazy.tsx b/packages/react-router/playground/routes/notes.lazy.tsx new file mode 100644 index 0000000..5e5431d --- /dev/null +++ b/packages/react-router/playground/routes/notes.lazy.tsx @@ -0,0 +1,19 @@ +import React from 'react' +import { useLoaderData } from 'react-router-dom' + +export async function clientLoader() { + // sleep 2 seconds then return data + await new Promise(resolve => setTimeout(resolve, 2000)) + return ['Note 1', 'Note 2', 'Note 3'] +} + +export default function Component() { + const notes = useLoaderData() as string[] + + return ( + <> +

Notes

+ {notes.map(note =>

{note}

)} + + ) +} diff --git a/packages/react-router/src/interface.rs b/packages/react-router/src/interface.rs new file mode 100644 index 0000000..d4caf52 --- /dev/null +++ b/packages/react-router/src/interface.rs @@ -0,0 +1,20 @@ +enum Mark { + Clint, + Server, +} + +fn file_sign_default() -> FileSign { + Mark::Clint +} + +#[derive(Debug)] +struct Route { + index: Option, + path: String, + component: Option, + error_boundary: Option, + lazy: Option, + #[serde(file_sign_default)] + mark: Option, + children: Vec, +} diff --git a/packages/react-router/src/lib.rs b/packages/react-router/src/lib.rs index 973afe9..9f2d1fe 100644 --- a/packages/react-router/src/lib.rs +++ b/packages/react-router/src/lib.rs @@ -1,5 +1,8 @@ #![deny(clippy::all)] +mod parse; +mod interface; + use farmfe_core::{config::Config, plugin::Plugin}; use farmfe_macro_plugin::farm_plugin; diff --git a/packages/react-router/src/parse.rs b/packages/react-router/src/parse.rs new file mode 100644 index 0000000..07f18e6 --- /dev/null +++ b/packages/react-router/src/parse.rs @@ -0,0 +1,82 @@ +use std::fs; +use std::path::{Path, PathBuf}; + +enum Mark { + Clint, + Server, +} + +fn file_sign_default() -> FileSign { + Mark::Clint +} + +#[derive(Debug)] +struct Route { + index: Option, + path: String, + component: Option, + error_boundary: Option, + + lazy: Option, + #[serde(file_sign_default)] + mark: Option, + children: Vec, +} + +fn scan_routes(dir: &Path, base_path: &str) -> Vec { + let mut routes = Vec::new(); + if let Ok(entries) = fs::read_dir(dir) { + for entry in entries { + if let Ok(entry) = entry { + let path = entry.path(); + let file_name = entry.file_name().into_string().unwrap(); + let route_path = if base_path.is_empty() { + file_name.clone() + } else { + format!("{}/{}", base_path, file_name) + }; + + if path.is_dir() { + let children = scan_routes(&path, &route_path); + routes.push(Route { + path: parse_route_path(&route_path), + component: file_name, + children, + }); + } else if path.is_file() && file_name.ends_with(".tsx") { + routes.push(Route { + path: parse_route_path(&route_path), + component: file_name.replace(".tsx", ""), + children: Vec::new(), + }); + } + } + } + } + routes +} + +fn parse_route_path(file_path: &str) -> String { + file_path + .replace("\\", "/") + .replace("/index.tsx", "/") + .replace(".tsx", "") + .replace("[", ":") + .replace("]", "") +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_parse_route_path() { + let routes_dir = Path::new( + "/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-components/playground/src/routes", + ); + let routes = scan_routes(routes_dir, ""); + for route in routes { + println!("{:?}", route); + } + } +} From 68e6d5e29ec136e8e412f7bc8aded28b01996760 Mon Sep 17 00:00:00 2001 From: CCherry07 <2405693142@qq.com> Date: Wed, 28 Aug 2024 10:35:07 +0800 Subject: [PATCH 03/10] chore: add parse --- .../react-router/playground/feat/route.ts | 26 ++-- packages/react-router/src/interface.rs | 20 --- packages/react-router/src/lib.rs | 1 - packages/react-router/src/parse.rs | 132 +++++++++++------- packages/react-router/src/test.rs | 83 +++++++++++ 5 files changed, 180 insertions(+), 82 deletions(-) delete mode 100644 packages/react-router/src/interface.rs create mode 100644 packages/react-router/src/test.rs diff --git a/packages/react-router/playground/feat/route.ts b/packages/react-router/playground/feat/route.ts index b6ccdc7..88e74ad 100644 --- a/packages/react-router/playground/feat/route.ts +++ b/packages/react-router/playground/feat/route.ts @@ -34,13 +34,20 @@ export const routes = [ "children": [ { "path": "recover", "lazy": () => import('../routes/auth.recover/route.lazy.tsx').then(moduleFactory), - "children": [{ "path": "test", "lazy": () => import('../routes/auth.recover.test.lazy.tsx').then(moduleFactory) }] + "children": [ + { "path": "test", "lazy": () => import('../routes/auth.recover.test.lazy.tsx').then(moduleFactory) } + ] }, { - "path": "new", "children": [{ - "path": "without", - "children": [{ "path": "parent", "lazy": () => import('../routes/auth.new.without.parent.lazy.tsx').then(moduleFactory) }] - }] + "path": "new", "children": [ + { + "path": "without", + "children": [ + { + "path": "parent", "lazy": () => import('../routes/auth.new.without.parent.lazy.tsx').then(moduleFactory) + }] + } + ] }, { "path": "forgot-pass", "lazy": () => import('../routes/auth.forgot-pass.lazy.tsx').then(moduleFactory) }, { @@ -48,7 +55,8 @@ export const routes = [ "children": [{ "path": "test", "lazy": () => import('../routes/auth.deploy.test.lazy.tsx').then(moduleFactory) }] }, { "index": true, "lazy": () => import('../routes/auth._index.lazy.tsx').then(moduleFactory) }, - { "path": ":test", ...moduleFactory(route82398) }, { "path": "*", ...moduleFactory(route29280) } + { "path": ":test", ...moduleFactory(route82398) }, + { "path": "*", ...moduleFactory(route29280) } ] }, { "index": true, ...moduleFactory(route20320) }, @@ -57,7 +65,9 @@ export const routes = [ "children": [{ "path": "login", ...moduleFactory(route71204) }] }, { - "path": ":lang?", "children": - [{ "path": "dashboard", "lazy": () => import('../routes/($lang).dashboard.lazy.tsx').then(moduleFactory) }] + "path": ":lang?", + "children": [ + { "path": "dashboard", "lazy": () => import('../routes/($lang).dashboard.lazy.tsx').then(moduleFactory) } + ] }] diff --git a/packages/react-router/src/interface.rs b/packages/react-router/src/interface.rs deleted file mode 100644 index d4caf52..0000000 --- a/packages/react-router/src/interface.rs +++ /dev/null @@ -1,20 +0,0 @@ -enum Mark { - Clint, - Server, -} - -fn file_sign_default() -> FileSign { - Mark::Clint -} - -#[derive(Debug)] -struct Route { - index: Option, - path: String, - component: Option, - error_boundary: Option, - lazy: Option, - #[serde(file_sign_default)] - mark: Option, - children: Vec, -} diff --git a/packages/react-router/src/lib.rs b/packages/react-router/src/lib.rs index 9f2d1fe..3f7e2fe 100644 --- a/packages/react-router/src/lib.rs +++ b/packages/react-router/src/lib.rs @@ -1,7 +1,6 @@ #![deny(clippy::all)] mod parse; -mod interface; use farmfe_core::{config::Config, plugin::Plugin}; diff --git a/packages/react-router/src/parse.rs b/packages/react-router/src/parse.rs index 07f18e6..0f13811 100644 --- a/packages/react-router/src/parse.rs +++ b/packages/react-router/src/parse.rs @@ -1,70 +1,88 @@ -use std::fs; -use std::path::{Path, PathBuf}; +use farmfe_toolkit::pluginutils::normalize_path::normalize_path; +use std::{collections::HashMap, path::Path}; +use walkdir::WalkDir; +#[derive(Debug)] enum Mark { Clint, Server, } -fn file_sign_default() -> FileSign { - Mark::Clint -} - -#[derive(Debug)] +#[derive(Default, Debug)] struct Route { index: Option, path: String, - component: Option, + component: String, error_boundary: Option, - lazy: Option, - #[serde(file_sign_default)] mark: Option, children: Vec, } -fn scan_routes(dir: &Path, base_path: &str) -> Vec { - let mut routes = Vec::new(); - if let Ok(entries) = fs::read_dir(dir) { - for entry in entries { - if let Ok(entry) = entry { - let path = entry.path(); - let file_name = entry.file_name().into_string().unwrap(); - let route_path = if base_path.is_empty() { - file_name.clone() - } else { - format!("{}/{}", base_path, file_name) - }; - - if path.is_dir() { - let children = scan_routes(&path, &route_path); - routes.push(Route { - path: parse_route_path(&route_path), - component: file_name, - children, - }); - } else if path.is_file() && file_name.ends_with(".tsx") { - routes.push(Route { - path: parse_route_path(&route_path), - component: file_name.replace(".tsx", ""), - children: Vec::new(), - }); - } +fn get_route_files(dir: &Path) -> Vec { + let dir_str = dir.to_str().unwrap(); + WalkDir::new(dir) + .into_iter() + .filter_map(|e| e.ok()) + .filter_map(|e| { + if e.path().is_file() && e.path().extension().map_or(false, |ext| ext == "tsx") { + Some(normalize_path(e.path().to_str().unwrap()).replace(dir_str, "")) + } else { + None } - } - } - routes + }) + .collect::>() } -fn parse_route_path(file_path: &str) -> String { - file_path - .replace("\\", "/") - .replace("/index.tsx", "/") - .replace(".tsx", "") - .replace("[", ":") - .replace("]", "") -} +fn parse_routes(segments: Vec, level: usize) -> Vec { + let mut result = Vec::new(); + let mut route_map: HashMap = HashMap::new(); + + for segment in segments { + let filtered_strings: Vec = segments + .iter() + .filter(|s| { + let parts: Vec<&str> = s.split('.').collect(); + parts.len() > level + && (parts[level] == segment || parts[level] == format!("{}/route", segment)) + }) + .collect(); + + if filtered_strings.len() < 1 { + continue; + } + + let route_path = segment + .replace(r"\(([^)]*)\)\??$", "$1?") + .replace(r"\$+$", "*") + .replace(r"^\$", ":"); + let is_lazy = segment.ends_with(".lazy.tsx") || segment.ends_with(".lazy.route.tsx"); + let mut new_node = Route { + path: route_path.clone(), + index: Some(false), + component: format!("{}{}", route_path, ".tsx"), + lazy: Some(is_lazy), + ..Default::default() + }; + + if route_path == "_index" { + new_node.index = Some(true); + } else if !route_path.starts_with('_') { + new_node.path = route_path; + } + + let children = parse_routes(filtered_strings.clone(), level + 1); + if children.len() > 0 { + new_node.children = children; + } + for (_, route) in route_map { + result.push(route); + } + + return result; + } +} #[cfg(test)] mod tests { use super::*; @@ -72,11 +90,19 @@ mod tests { #[test] fn test_parse_route_path() { let routes_dir = Path::new( - "/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-components/playground/src/routes", + "/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/", ); - let routes = scan_routes(routes_dir, ""); - for route in routes { - println!("{:?}", route); - } + + let files = get_route_files(routes_dir); + // 处理一下 files 的路径 home.a.b.lazy.tsx -> [home, a, b, lazy] + + // let enters = files + // .iter() + // .map(|f| f.split('.').collect::>()) + // .collect::>>(); + + let routes = parse_routes(files, 0); + // 有格式的输出 + println!("{:#?}", routes); } } diff --git a/packages/react-router/src/test.rs b/packages/react-router/src/test.rs new file mode 100644 index 0000000..d5e302c --- /dev/null +++ b/packages/react-router/src/test.rs @@ -0,0 +1,83 @@ +use std::collections::HashSet; + +#[derive(Debug)] +struct Route { + path: Option, + index: bool, +} + +fn build_routes_map(strings: Vec, level: usize) -> Vec { + let mut result: Vec = Vec::new(); + let mut internal_imports = String::new(); + + let first_segments: HashSet = strings + .iter() + .map(|s| { + let parts: Vec<&str> = s.split('.').collect(); + if parts.len() > level { + parts[level].replace("/route", "") + } else { + String::new() + } + }) + .filter(|s| !s.is_empty() && s != "tsx" && s != "lazy") + .collect(); + + if first_segments.is_empty() { + return result; + } + + let mut reversed_segments: Vec = first_segments.into_iter().collect(); + reversed_segments.reverse(); + + for segment in reversed_segments { + let filtered_strings: Vec<&String> = strings + .iter() + .filter(|s| { + let parts: Vec<&str> = s.split('.').collect(); + parts.len() > level && (parts[level] == segment || parts[level] == format!("{}/route", segment)) + }) + .collect(); + + let route_path = segment + .replace(r"\(([^)]*)\)\??$", "$1?") + .replace(r"\$+$", "*") + .replace(r"^\$", ":"); + + if filtered_strings.is_empty() { + continue; + } + + let mut new_node = Route { + path: None, + index: false, + }; + + if route_path == "_index" { + new_node.index = true; + } else if !route_path.starts_with('_') { + new_node.path = Some(route_path); + } + + let page = filtered_strings.iter().find(|s| { + s.ends_with(&format!("{}.tsx", segment)) || s.ends_with(&format!("{}/route.tsx", segment)) + }); + + result.push(new_node); + } + + result +} + +fn main() { + let strings = vec![ + "home.route.tsx".to_string(), + "about.route.tsx".to_string(), + "contact.route.tsx".to_string(), + ]; + let level = 0; + let routes = build_routes_map(strings, level); + for route in routes { + println!("{:?}", route); + } +} From 0124b570b1548c41a72d4543d804b02a63365f30 Mon Sep 17 00:00:00 2001 From: CCherry07 <2405693142@qq.com> Date: Thu, 29 Aug 2024 10:39:19 +0800 Subject: [PATCH 04/10] chore: add parse --- packages/react-router/Cargo.toml | 1 + .../react-router/playground/feat/parse.ts | 13 ++ .../playground/feat/plugin_code.ts | 150 +++++++++++++ .../react-router/playground/src/index.tsx | 1 - packages/react-router/src/parse.rs | 206 +++++++++++++----- 5 files changed, 318 insertions(+), 53 deletions(-) create mode 100644 packages/react-router/playground/feat/parse.ts create mode 100644 packages/react-router/playground/feat/plugin_code.ts diff --git a/packages/react-router/Cargo.toml b/packages/react-router/Cargo.toml index dd92731..0da8249 100644 --- a/packages/react-router/Cargo.toml +++ b/packages/react-router/Cargo.toml @@ -16,3 +16,4 @@ farmfe_toolkit = { workspace = true } serde = { version = "1.0.197", features = ["derive"] } glob = "0.3.1" walkdir = "2.5.0" + diff --git a/packages/react-router/playground/feat/parse.ts b/packages/react-router/playground/feat/parse.ts new file mode 100644 index 0000000..738e9fb --- /dev/null +++ b/packages/react-router/playground/feat/parse.ts @@ -0,0 +1,13 @@ +import * as farmfe_plugin_react_router_4fa9f607 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/_index.tsx'; +import * as farmfe_plugin_react_router_0da27a10 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover/store.tsx'; +import * as farmfe_plugin_react_router_c1095542 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover/index.tsx'; +import * as farmfe_plugin_react_router_fa180d5e from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.$.tsx'; +import * as farmfe_plugin_react_router_c3f09479 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.$test.tsx'; +import * as farmfe_plugin_react_router_090cd3b4 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.tsx'; +import * as farmfe_plugin_react_router_23551dfd from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.$.tsx'; +import * as farmfe_plugin_react_router_dae204bb from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts._index.tsx'; +import * as farmfe_plugin_react_router_18ababe8 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.trending.tsx'; +import * as farmfe_plugin_react_router_870d5865 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.$city.tsx'; +import * as farmfe_plugin_react_router_2e71f9f8 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts_.mine.tsx'; +import * as farmfe_plugin_react_router_a5020bac from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts_.your.tsx'; +import * as farmfe_plugin_react_router_339bb3b2 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/_auth.login.tsx'; diff --git a/packages/react-router/playground/feat/plugin_code.ts b/packages/react-router/playground/feat/plugin_code.ts new file mode 100644 index 0000000..b28f145 --- /dev/null +++ b/packages/react-router/playground/feat/plugin_code.ts @@ -0,0 +1,150 @@ +import * as farmfe_plugin_react_router_2e71f9f8 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts_.mine.tsx'; +import * as farmfe_plugin_react_router_a5020bac from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts_.your.tsx'; +import * as farmfe_plugin_react_router_0da27a10 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover/store.tsx'; +import * as farmfe_plugin_react_router_c3f09479 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.$test.tsx'; +import * as farmfe_plugin_react_router_c1095542 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover/index.tsx'; +import * as farmfe_plugin_react_router_fa180d5e from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.$.tsx'; +import * as farmfe_plugin_react_router_090cd3b4 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.tsx'; +import * as farmfe_plugin_react_router_dae204bb from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts._index.tsx'; +import * as farmfe_plugin_react_router_870d5865 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.$city.tsx'; +import * as farmfe_plugin_react_router_23551dfd from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.$.tsx'; +import * as farmfe_plugin_react_router_18ababe8 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.trending.tsx'; +import * as farmfe_plugin_react_router_4fa9f607 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/_index.tsx'; +import * as farmfe_plugin_react_router_339bb3b2 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/_auth.login.tsx'; + + +const routes = [ + { + "children": [ + { + "path": "dashboard", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/(lang).dashboard.lazy.tsx').then(adapter))$" + } + ], + "path": ":lang?", + "component": "lazy(() => import('').then(adapter))" + }, + { + "children": [ + { + "path": "mine", + "component": "...adapter(farmfe_plugin_react_router_2e71f9f8)" + }, + { + "path": "your", + "component": "...adapter(farmfe_plugin_react_router_a5020bac)" + } + ], + "path": "concerts_", + "component": "lazy(() => import('').then(adapter))" + }, + { + "children": [ + { + "path": "recover/store", + "component": "...adapter(farmfe_plugin_react_router_0da27a10)" + }, + { + "index": true, + "path": "", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth._index.lazy.tsx').then(adapter))" + }, + { + "children": [ + { + "path": "test", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover.test.lazy.tsx').then(adapter))" + } + ], + "path": "recover", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover/route.lazy.tsx').then(adapter))" + }, + { + "path": ":test", + "component": "...adapter(farmfe_plugin_react_router_c3f09479)" + }, + { + "children": [ + { + "children": [ + { + "path": "parent", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.new.without.parent.lazy.tsx').then(adapter))" + } + ], + "path": "without", + "component": "lazy(() => import('').then(adapter))" + } + ], + "path": "new", + "component": "lazy(() => import('').then(adapter))" + }, + { + "path": "recover/index", + "component": "...adapter(farmfe_plugin_react_router_c1095542)" + }, + { + "path": "*", + "component": "...adapter(farmfe_plugin_react_router_fa180d5e)" + }, + { + "children": [ + { + "path": "test", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.deploy.test.lazy.tsx').then(adapter))" + } + ], + "path": "deploy", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.deploy.lazy.tsx').then(adapter))" + }, + { + "path": "forgot-pass", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.forgot-pass.lazy.tsx').then(adapter))" + } + ], + "path": "auth", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.lazy.tsx').then(adapter))" + }, + { + "children": [ + { + "index": true, + "path": "", + "component": "...adapter(farmfe_plugin_react_router_dae204bb)" + }, + { + "path": ":city", + "component": "...adapter(farmfe_plugin_react_router_870d5865)" + }, + { + "path": "*", + "component": "...adapter(farmfe_plugin_react_router_23551dfd)" + }, + { + "path": "trending", + "component": "...adapter(farmfe_plugin_react_router_18ababe8)" + } + ], + "path": "concerts", + "component": "...adapter(farmfe_plugin_react_router_090cd3b4)" + }, + { + "index": true, + "path": "", + "component": "...adapter(farmfe_plugin_react_router_4fa9f607)" + }, + { + "children": [ + { + "path": "login", + "component": "...adapter(farmfe_plugin_react_router_339bb3b2)" + } + ], + "path": "", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/_auth.lazy.tsx').then(adapter))" + }, + { + "path": "notes", + "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/notes.lazy.tsx').then(adapter))" + } +]; diff --git a/packages/react-router/playground/src/index.tsx b/packages/react-router/playground/src/index.tsx index 06a4dd2..b50ad2b 100644 --- a/packages/react-router/playground/src/index.tsx +++ b/packages/react-router/playground/src/index.tsx @@ -3,7 +3,6 @@ import { createRoot } from 'react-dom/client'; import { Main } from './main'; import './index.css' - const container = document.querySelector('#root'); const root = createRoot(container); diff --git a/packages/react-router/src/parse.rs b/packages/react-router/src/parse.rs index 0f13811..493bc1b 100644 --- a/packages/react-router/src/parse.rs +++ b/packages/react-router/src/parse.rs @@ -1,22 +1,77 @@ +use farmfe_core::regex::Regex; +use farmfe_core::serde_json; +use farmfe_toolkit::hash::sha256; use farmfe_toolkit::pluginutils::normalize_path::normalize_path; -use std::{collections::HashMap, path::Path}; +use serde::de::{self, EnumAccess, MapAccess, VariantAccess, Visitor}; +use serde::ser::SerializeStruct; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use std::fmt; +use std::{collections::HashSet, path::Path}; use walkdir::WalkDir; -#[derive(Debug)] -enum Mark { - Clint, - Server, -} - -#[derive(Default, Debug)] +#[derive(Default, Debug, Deserialize, Clone)] struct Route { index: Option, path: String, component: String, - error_boundary: Option, - lazy: Option, - mark: Option, - children: Vec, + children: Option>, +} + +impl Serialize for Route { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + let mut state = serializer.serialize_struct("Route", 4)?; + if let Some(ref index) = self.index { + state.serialize_field("index", index)?; + } + if let Some(ref children) = self.children { + state.serialize_field("children", children)?; + } + state.serialize_field("path", &self.path)?; + state.serialize_field("component", &format!("{}{}{}", "$", &self.component, "$"))?; + state.end() + } +} + +fn process_route_path(segment: &str) -> String { + let patterns = [(r"\(([^)]*)\)\??$", "$1?"), (r"\$+$", "*"), (r"^\$", ":")]; + + let mut segment = segment.to_string(); + for (pat, repl) in patterns.iter() { + let re = Regex::new(pat).unwrap(); + segment = re.replace_all(&segment, *repl).into_owned(); + } + + segment +} + +fn process_page( + filtered_route_files: &[String], + segment: &str, + routes_path: &str, +) -> (String, bool) { + let mut component = String::new(); + let mut is_lazy = false; + for page_type in &[("", false), (".lazy", true)] { + let suffix = page_type.0; + is_lazy = page_type.1; + + let page_condition = format!("{}{}.tsx", segment, suffix); + let route_page_condition = format!("{}/route{}.tsx", segment, suffix); + + if let Some(page) = filtered_route_files + .iter() + .find(|str| str.ends_with(&page_condition) || str.ends_with(&route_page_condition)) + { + let absolute_path = format!("{}/{}", routes_path, page); + component = absolute_path; + break; + } + } + + (component, is_lazy) } fn get_route_files(dir: &Path) -> Vec { @@ -34,57 +89,97 @@ fn get_route_files(dir: &Path) -> Vec { .collect::>() } -fn parse_routes(segments: Vec, level: usize) -> Vec { - let mut result = Vec::new(); - let mut route_map: HashMap = HashMap::new(); +fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec, String) { + let mut routes: Vec = Vec::new(); + let mut imports = String::new(); + let first_segments: HashSet<_> = route_files + .iter() + .filter_map(|str| str.split('.').nth(level)) + .filter_map(|segment| match segment { + "tsx" | "lazy" => None, + _ => Some(segment.replace("/route", "")), + }) + .collect(); + if first_segments.is_empty() { + return (routes, imports); + } + + let reversed_segments: Vec<_> = first_segments.into_iter().collect(); - for segment in segments { - let filtered_strings: Vec = segments + for segment in reversed_segments.into_iter().rev() { + let filtered_route_files: Vec<_> = route_files .iter() - .filter(|s| { - let parts: Vec<&str> = s.split('.').collect(); - parts.len() > level - && (parts[level] == segment || parts[level] == format!("{}/route", segment)) + .filter(|str| { + str + .split('.') + .nth(level) + .map_or(false, |s| s == segment || s == format!("{}/route", segment)) }) + .cloned() .collect(); - if filtered_strings.len() < 1 { + let route_path = process_route_path(&segment); + if filtered_route_files.is_empty() { continue; } - let route_path = segment - .replace(r"\(([^)]*)\)\??$", "$1?") - .replace(r"\$+$", "*") - .replace(r"^\$", ":"); - - let is_lazy = segment.ends_with(".lazy.tsx") || segment.ends_with(".lazy.route.tsx"); - let mut new_node = Route { - path: route_path.clone(), - index: Some(false), - component: format!("{}{}", route_path, ".tsx"), - lazy: Some(is_lazy), - ..Default::default() - }; + let mut route = Route::default(); if route_path == "_index" { - new_node.index = Some(true); + route.index = Some(true); } else if !route_path.starts_with('_') { - new_node.path = route_path; + route.path = route_path; } - let children = parse_routes(filtered_strings.clone(), level + 1); - if children.len() > 0 { - new_node.children = children; - } - for (_, route) in route_map { - result.push(route); + let (component_file_path, is_lazy) = process_page(&filtered_route_files, &segment, routes_path); + + if !is_lazy { + let import_name = format!( + "{}{}", + "farmfe_plugin_react_router_", + sha256(&component_file_path.as_bytes(), 8) + ); + imports.push_str(&format!( + "import * as {} from '{}';\n", + import_name, component_file_path + )); + route.component = format!("...adapter({})", import_name); + } else { + route.component = format!( + "lazy(() => import('{}').then(adapter))", + component_file_path + ); } - return result; + let (routes_map, imps) = parse(filtered_route_files, routes_path, level + 1); + if !routes_map.is_empty() { + route.children = Some(routes_map); + imports.push_str(&imps); + } + routes.push(route); } + + (routes, imports) +} + +fn build_routes_virtual_code(routes: Vec, imports: String) -> String { + let mut code = String::new(); + code.push_str(&imports); + code.push_str("\n\n"); + code.push_str("const routes = "); + let re = Regex::new(r"\$(.*?)\$").unwrap(); + let json_string = serde_json::to_string_pretty(&routes) + .unwrap(); + let json_string = re.replace_all(&json_string, "$1").into_owned(); + code.push_str(&json_string); + code.push_str(";\n"); + code } + #[cfg(test)] mod tests { + use std::fs; + use super::*; #[test] @@ -94,15 +189,22 @@ mod tests { ); let files = get_route_files(routes_dir); - // 处理一下 files 的路径 home.a.b.lazy.tsx -> [home, a, b, lazy] - // let enters = files - // .iter() - // .map(|f| f.split('.').collect::>()) - // .collect::>>(); + let (routes, imports) = parse( + files, + "/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes", + 0, + ); + let code = build_routes_virtual_code(routes, imports); + fs::write("/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/feat/plugin_code.ts", code); + } - let routes = parse_routes(files, 0); - // 有格式的输出 - println!("{:#?}", routes); + #[test] + fn test_process_route_path() { + assert_eq!(process_route_path("user(id)"), "userid?"); + assert_eq!(process_route_path("find$"), "find*"); + assert_eq!(process_route_path("$edit"), ":edit"); + assert_eq!(process_route_path("user(id)$"), "user(id)*"); + assert_eq!(process_route_path("$(id)"), ":id?"); } } From 006c8c8389d80cdbc08257fde611bc700ca234b8 Mon Sep 17 00:00:00 2001 From: CCherry07 <2405693142@qq.com> Date: Thu, 29 Aug 2024 22:15:37 +0800 Subject: [PATCH 05/10] feat: react router remix style --- packages/react-router/src/lib.rs | 53 ++++++- packages/react-router/src/parser/mod.rs | 1 + .../src/{parse.rs => parser/remix_parser.rs} | 143 +++++++++--------- packages/react-router/src/test.rs | 83 ---------- 4 files changed, 120 insertions(+), 160 deletions(-) create mode 100644 packages/react-router/src/parser/mod.rs rename packages/react-router/src/{parse.rs => parser/remix_parser.rs} (55%) delete mode 100644 packages/react-router/src/test.rs diff --git a/packages/react-router/src/lib.rs b/packages/react-router/src/lib.rs index 3f7e2fe..781f580 100644 --- a/packages/react-router/src/lib.rs +++ b/packages/react-router/src/lib.rs @@ -1,17 +1,42 @@ #![deny(clippy::all)] -mod parse; +mod parser; +use std::path::Path; -use farmfe_core::{config::Config, plugin::Plugin}; +use farmfe_core::{ + config::Config, + module::ModuleType, + plugin::{Plugin, PluginLoadHookResult}, + serde_json, +}; +use parser::remix_parser::{build_routes_virtual_code, get_route_files, parse}; use farmfe_macro_plugin::farm_plugin; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Deserialize, Serialize, Clone)] +enum Mode { + Remix, + Next, +} + +#[derive(Deserialize, Serialize, Clone, Debug)] +#[serde(rename_all = "camelCase")] +pub struct Options { + mode: Mode, + routes_path: String, + emit_file: Option, +} #[farm_plugin] -pub struct FarmPluginReactRouter {} +pub struct FarmPluginReactRouter { + options: Options, +} impl FarmPluginReactRouter { - fn new(config: &Config, options: String) -> Self { - Self {} + fn new(_config: &Config, options: String) -> Self { + let options: Options = serde_json::from_str(&options).unwrap(); + Self { options } } } @@ -19,4 +44,22 @@ impl Plugin for FarmPluginReactRouter { fn name(&self) -> &str { "FarmPluginReactRouter" } + fn load( + &self, + param: &farmfe_core::plugin::PluginLoadHookParam, + _context: &std::sync::Arc, + _hook_context: &farmfe_core::plugin::PluginHookContext, + ) -> farmfe_core::error::Result> { + if param.module_id == "virtual:routes" { + let route_files = get_route_files(Path::new(¶m.resolved_path)); + let (routes, imports) = parse(route_files, ¶m.resolved_path, 0); + let code = build_routes_virtual_code(routes, imports); + return Ok(Some(PluginLoadHookResult { + content: code, + module_type: ModuleType::Js, + source_map: None, + })); + } + Ok(None) + } } diff --git a/packages/react-router/src/parser/mod.rs b/packages/react-router/src/parser/mod.rs new file mode 100644 index 0000000..1d3d4e0 --- /dev/null +++ b/packages/react-router/src/parser/mod.rs @@ -0,0 +1 @@ +pub mod remix_parser; diff --git a/packages/react-router/src/parse.rs b/packages/react-router/src/parser/remix_parser.rs similarity index 55% rename from packages/react-router/src/parse.rs rename to packages/react-router/src/parser/remix_parser.rs index 493bc1b..f20b2a2 100644 --- a/packages/react-router/src/parse.rs +++ b/packages/react-router/src/parser/remix_parser.rs @@ -1,20 +1,19 @@ -use farmfe_core::regex::Regex; +use farmfe_core::regex::{Captures, Regex}; use farmfe_core::serde_json; use farmfe_toolkit::hash::sha256; use farmfe_toolkit::pluginutils::normalize_path::normalize_path; -use serde::de::{self, EnumAccess, MapAccess, VariantAccess, Visitor}; use serde::ser::SerializeStruct; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use std::fmt; +use serde::{Deserialize, Serialize, Serializer}; use std::{collections::HashSet, path::Path}; use walkdir::WalkDir; #[derive(Default, Debug, Deserialize, Clone)] -struct Route { - index: Option, +pub struct Route { path: String, - component: String, + index: bool, + spread_module: Option, children: Option>, + lazy: Option, } impl Serialize for Route { @@ -23,14 +22,21 @@ impl Serialize for Route { S: Serializer, { let mut state = serializer.serialize_struct("Route", 4)?; - if let Some(ref index) = self.index { - state.serialize_field("index", index)?; + if !self.path.is_empty() { + state.serialize_field("path", &self.path)?; + } + if self.index { + state.serialize_field("index", &self.index)?; + } + if let Some(ref spread_module) = self.spread_module { + state.serialize_field("spread_module", &format!("{}{}{}", "$", spread_module, "$"))?; + } + if let Some(ref lazy) = self.lazy { + state.serialize_field("lazy", &format!("{}{}{}", "$", lazy, "$"))?; } if let Some(ref children) = self.children { state.serialize_field("children", children)?; } - state.serialize_field("path", &self.path)?; - state.serialize_field("component", &format!("{}{}{}", "$", &self.component, "$"))?; state.end() } } @@ -41,7 +47,7 @@ fn process_route_path(segment: &str) -> String { let mut segment = segment.to_string(); for (pat, repl) in patterns.iter() { let re = Regex::new(pat).unwrap(); - segment = re.replace_all(&segment, *repl).into_owned(); + segment = re.replace(&segment, *repl).into_owned(); } segment @@ -74,7 +80,7 @@ fn process_page( (component, is_lazy) } -fn get_route_files(dir: &Path) -> Vec { +pub fn get_route_files(dir: &Path) -> Vec { let dir_str = dir.to_str().unwrap(); WalkDir::new(dir) .into_iter() @@ -89,7 +95,7 @@ fn get_route_files(dir: &Path) -> Vec { .collect::>() } -fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec, String) { +pub fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec, String) { let mut routes: Vec = Vec::new(); let mut imports = String::new(); let first_segments: HashSet<_> = route_files @@ -126,33 +132,43 @@ fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec import('{}').then(adapter))", - component_file_path - ); + if !component_file_path.is_empty() { + if !is_lazy { + let import_name = format!( + "{}{}", + "farmfe_plugin_react_router_", + sha256(&component_file_path.as_bytes(), 8) + ); + imports.push_str(&format!( + "import * as {} from '{}';\n", + import_name, component_file_path + )); + route.spread_module = Some(format!("...adapter({})", import_name)); + } else { + route.lazy = Some(format!( + "() => import('{}').then(adapter)", + component_file_path + )); + } } - let (routes_map, imps) = parse(filtered_route_files, routes_path, level + 1); + let (mut routes_map, imps) = parse(filtered_route_files, routes_path, level + 1); if !routes_map.is_empty() { + if segment.ends_with("_") { + let real_segment = &segment[..segment.len() - 1]; + for mut route in routes_map.drain(..) { + if !route.index { + route.path = format!("{}/{}", real_segment, route.path); + } + routes.push(route); + } + } route.children = Some(routes_map); imports.push_str(&imps); } @@ -162,49 +178,32 @@ fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec, imports: String) -> String { - let mut code = String::new(); - code.push_str(&imports); - code.push_str("\n\n"); - code.push_str("const routes = "); - let re = Regex::new(r"\$(.*?)\$").unwrap(); - let json_string = serde_json::to_string_pretty(&routes) - .unwrap(); - let json_string = re.replace_all(&json_string, "$1").into_owned(); - code.push_str(&json_string); - code.push_str(";\n"); - code -} +pub fn build_routes_virtual_code(routes: Vec, imports: String) -> String { + // 定义适配器函数 + let adapter = "function adapterModule(module) { + const { default: Component, clientLoader: loader, clientAction: action, loader: _loader, action: _action, Component: _Component, ...rest } = module; + return { Component, loader, action, ...rest }; +}\n\n"; -#[cfg(test)] -mod tests { - use std::fs; + let mut code = format!("{}\n\n{}", imports, adapter); - use super::*; + let re = Regex::new(r#""spread_module": "\$(.*?)\$"|"\$(.*?)\$""#).expect("Invalid regex"); - #[test] - fn test_parse_route_path() { - let routes_dir = Path::new( - "/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/", - ); + let json_string = serde_json::to_string_pretty(&routes).expect("Failed to serialize routes"); - let files = get_route_files(routes_dir); + let json_string = re + .replace_all(&json_string, |caps: &Captures| { + caps + .get(1) + .or_else(|| caps.get(2)) + .map_or("", |m| m.as_str()) + .to_owned() + }) + .into_owned(); - let (routes, imports) = parse( - files, - "/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes", - 0, - ); - let code = build_routes_virtual_code(routes, imports); - fs::write("/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/feat/plugin_code.ts", code); - } + code.push_str("export const routes = "); + code.push_str(&json_string); + code.push_str(";\n"); - #[test] - fn test_process_route_path() { - assert_eq!(process_route_path("user(id)"), "userid?"); - assert_eq!(process_route_path("find$"), "find*"); - assert_eq!(process_route_path("$edit"), ":edit"); - assert_eq!(process_route_path("user(id)$"), "user(id)*"); - assert_eq!(process_route_path("$(id)"), ":id?"); - } + code } diff --git a/packages/react-router/src/test.rs b/packages/react-router/src/test.rs deleted file mode 100644 index d5e302c..0000000 --- a/packages/react-router/src/test.rs +++ /dev/null @@ -1,83 +0,0 @@ -use std::collections::HashSet; - -#[derive(Debug)] -struct Route { - path: Option, - index: bool, -} - -fn build_routes_map(strings: Vec, level: usize) -> Vec { - let mut result: Vec = Vec::new(); - let mut internal_imports = String::new(); - - let first_segments: HashSet = strings - .iter() - .map(|s| { - let parts: Vec<&str> = s.split('.').collect(); - if parts.len() > level { - parts[level].replace("/route", "") - } else { - String::new() - } - }) - .filter(|s| !s.is_empty() && s != "tsx" && s != "lazy") - .collect(); - - if first_segments.is_empty() { - return result; - } - - let mut reversed_segments: Vec = first_segments.into_iter().collect(); - reversed_segments.reverse(); - - for segment in reversed_segments { - let filtered_strings: Vec<&String> = strings - .iter() - .filter(|s| { - let parts: Vec<&str> = s.split('.').collect(); - parts.len() > level && (parts[level] == segment || parts[level] == format!("{}/route", segment)) - }) - .collect(); - - let route_path = segment - .replace(r"\(([^)]*)\)\??$", "$1?") - .replace(r"\$+$", "*") - .replace(r"^\$", ":"); - - if filtered_strings.is_empty() { - continue; - } - - let mut new_node = Route { - path: None, - index: false, - }; - - if route_path == "_index" { - new_node.index = true; - } else if !route_path.starts_with('_') { - new_node.path = Some(route_path); - } - - let page = filtered_strings.iter().find(|s| { - s.ends_with(&format!("{}.tsx", segment)) || s.ends_with(&format!("{}/route.tsx", segment)) - }); - - result.push(new_node); - } - - result -} - -fn main() { - let strings = vec![ - "home.route.tsx".to_string(), - "about.route.tsx".to_string(), - "contact.route.tsx".to_string(), - ]; - let level = 0; - let routes = build_routes_map(strings, level); - for route in routes { - println!("{:?}", route); - } -} From e8d88f637d175a67f6dd035c7efb541bc1c8eae2 Mon Sep 17 00:00:00 2001 From: CCherry07 <2405693142@qq.com> Date: Thu, 29 Aug 2024 22:31:11 +0800 Subject: [PATCH 06/10] feat: react router --- packages/react-router/src/lib.rs | 36 +++++++++++-------- .../react-router/src/parser/remix_parser.rs | 7 ++-- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/packages/react-router/src/lib.rs b/packages/react-router/src/lib.rs index 781f580..5974e24 100644 --- a/packages/react-router/src/lib.rs +++ b/packages/react-router/src/lib.rs @@ -1,7 +1,6 @@ #![deny(clippy::all)] mod parser; -use std::path::Path; use farmfe_core::{ config::Config, @@ -9,9 +8,9 @@ use farmfe_core::{ plugin::{Plugin, PluginLoadHookResult}, serde_json, }; -use parser::remix_parser::{build_routes_virtual_code, get_route_files, parse}; - use farmfe_macro_plugin::farm_plugin; +use farmfe_toolkit::pluginutils::normalize_path::normalize_path; +use parser::remix_parser::{build_routes_virtual_code, get_route_files, parse}; use serde::{Deserialize, Serialize}; #[derive(Debug, Deserialize, Serialize, Clone)] @@ -23,8 +22,8 @@ enum Mode { #[derive(Deserialize, Serialize, Clone, Debug)] #[serde(rename_all = "camelCase")] pub struct Options { - mode: Mode, - routes_path: String, + mode: Option, + routes_path: Option, emit_file: Option, } @@ -34,8 +33,15 @@ pub struct FarmPluginReactRouter { } impl FarmPluginReactRouter { - fn new(_config: &Config, options: String) -> Self { + fn new(config: &Config, options: String) -> Self { + let root_path = config.root.clone(); + let default_routes_path = normalize_path(&format!("{}/src/routes", root_path)); let options: Options = serde_json::from_str(&options).unwrap(); + let options = Options { + mode: Some(options.mode.unwrap_or(Mode::Remix)), + routes_path: Some(options.routes_path.unwrap_or(default_routes_path)), + emit_file: options.emit_file, + }; Self { options } } } @@ -51,14 +57,16 @@ impl Plugin for FarmPluginReactRouter { _hook_context: &farmfe_core::plugin::PluginHookContext, ) -> farmfe_core::error::Result> { if param.module_id == "virtual:routes" { - let route_files = get_route_files(Path::new(¶m.resolved_path)); - let (routes, imports) = parse(route_files, ¶m.resolved_path, 0); - let code = build_routes_virtual_code(routes, imports); - return Ok(Some(PluginLoadHookResult { - content: code, - module_type: ModuleType::Js, - source_map: None, - })); + if matches!(self.options.mode, Some(Mode::Remix)) { + let route_files = get_route_files(&self.options.routes_path.clone().unwrap()); + let (routes, imports) = parse(route_files, ¶m.resolved_path, 0); + let code = build_routes_virtual_code(routes, imports); + return Ok(Some(PluginLoadHookResult { + content: code, + module_type: ModuleType::Js, + source_map: None, + })); + } } Ok(None) } diff --git a/packages/react-router/src/parser/remix_parser.rs b/packages/react-router/src/parser/remix_parser.rs index f20b2a2..e767eda 100644 --- a/packages/react-router/src/parser/remix_parser.rs +++ b/packages/react-router/src/parser/remix_parser.rs @@ -4,7 +4,7 @@ use farmfe_toolkit::hash::sha256; use farmfe_toolkit::pluginutils::normalize_path::normalize_path; use serde::ser::SerializeStruct; use serde::{Deserialize, Serialize, Serializer}; -use std::{collections::HashSet, path::Path}; +use std::collections::HashSet; use walkdir::WalkDir; #[derive(Default, Debug, Deserialize, Clone)] @@ -80,14 +80,13 @@ fn process_page( (component, is_lazy) } -pub fn get_route_files(dir: &Path) -> Vec { - let dir_str = dir.to_str().unwrap(); +pub fn get_route_files(dir: &str) -> Vec { WalkDir::new(dir) .into_iter() .filter_map(|e| e.ok()) .filter_map(|e| { if e.path().is_file() && e.path().extension().map_or(false, |ext| ext == "tsx") { - Some(normalize_path(e.path().to_str().unwrap()).replace(dir_str, "")) + Some(normalize_path(e.path().to_str().unwrap()).replace(dir, "")) } else { None } From 6cff0ff24dcad90f08cbb972df56231c069bf2e3 Mon Sep 17 00:00:00 2001 From: CCherry07 <2405693142@qq.com> Date: Fri, 30 Aug 2024 10:33:40 +0800 Subject: [PATCH 07/10] feat: react router --- .../react-router/playground/farm.config.ts | 4 +- .../react-router/playground/feat/parse.ts | 13 -- .../playground/feat/plugin_code.ts | 150 ------------------ .../react-router/playground/feat/route.json | 114 ------------- .../react-router/playground/feat/route.ts | 73 --------- packages/react-router/playground/package.json | 7 +- packages/react-router/playground/src/main.tsx | 4 + .../routes/($lang).dashboard.lazy.tsx | 0 .../{ => src}/routes/_auth.lazy.tsx | 0 .../{ => src}/routes/_auth.login.tsx | 0 .../playground/{ => src}/routes/_index.tsx | 0 .../playground/{ => src}/routes/auth.$.tsx | 0 .../{ => src}/routes/auth.$test.tsx | 0 .../{ => src}/routes/auth._index.lazy.tsx | 0 .../{ => src}/routes/auth.deploy.lazy.tsx | 0 .../routes/auth.deploy.test.lazy.tsx | 0 .../routes/auth.forgot-pass.lazy.tsx | 0 .../playground/{ => src}/routes/auth.lazy.tsx | 0 .../routes/auth.new.without.parent.lazy.tsx | 0 .../routes/auth.recover.test.lazy.tsx | 0 .../{ => src}/routes/auth.recover/index.tsx | 0 .../routes/auth.recover/route.lazy.tsx | 0 .../{ => src}/routes/auth.recover/store.tsx | 0 .../{ => src}/routes/concerts.$.tsx | 0 .../{ => src}/routes/concerts.$city.tsx | 0 .../{ => src}/routes/concerts._index.tsx | 0 .../{ => src}/routes/concerts.trending.tsx | 0 .../playground/{ => src}/routes/concerts.tsx | 0 .../{ => src}/routes/concerts_.mine.tsx | 0 .../{ => src}/routes/concerts_.your.tsx | 0 .../{ => src}/routes/notes.lazy.tsx | 0 packages/react-router/pnpm-lock.yaml | 40 ++++- packages/react-router/src/lib.rs | 27 +++- .../react-router/src/parser/remix_parser.rs | 58 ++++--- 34 files changed, 109 insertions(+), 381 deletions(-) delete mode 100644 packages/react-router/playground/feat/parse.ts delete mode 100644 packages/react-router/playground/feat/plugin_code.ts delete mode 100644 packages/react-router/playground/feat/route.json delete mode 100644 packages/react-router/playground/feat/route.ts rename packages/react-router/playground/{ => src}/routes/($lang).dashboard.lazy.tsx (100%) rename packages/react-router/playground/{ => src}/routes/_auth.lazy.tsx (100%) rename packages/react-router/playground/{ => src}/routes/_auth.login.tsx (100%) rename packages/react-router/playground/{ => src}/routes/_index.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.$.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.$test.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth._index.lazy.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.deploy.lazy.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.deploy.test.lazy.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.forgot-pass.lazy.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.lazy.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.new.without.parent.lazy.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.recover.test.lazy.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.recover/index.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.recover/route.lazy.tsx (100%) rename packages/react-router/playground/{ => src}/routes/auth.recover/store.tsx (100%) rename packages/react-router/playground/{ => src}/routes/concerts.$.tsx (100%) rename packages/react-router/playground/{ => src}/routes/concerts.$city.tsx (100%) rename packages/react-router/playground/{ => src}/routes/concerts._index.tsx (100%) rename packages/react-router/playground/{ => src}/routes/concerts.trending.tsx (100%) rename packages/react-router/playground/{ => src}/routes/concerts.tsx (100%) rename packages/react-router/playground/{ => src}/routes/concerts_.mine.tsx (100%) rename packages/react-router/playground/{ => src}/routes/concerts_.your.tsx (100%) rename packages/react-router/playground/{ => src}/routes/notes.lazy.tsx (100%) diff --git a/packages/react-router/playground/farm.config.ts b/packages/react-router/playground/farm.config.ts index 935c6e5..266a554 100644 --- a/packages/react-router/playground/farm.config.ts +++ b/packages/react-router/playground/farm.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from "@farmfe/core"; import react from '@farmfe/plugin-react'; -import farmPlugin from 'farm-plugin-react-router'; +import pluginReactRouter from '@farmfe/plugin-react-router'; export default defineConfig({ compilation: { @@ -12,6 +12,6 @@ export default defineConfig({ }, plugins: [ react({ runtime: "automatic" }), - farmPlugin() + pluginReactRouter() ], }); diff --git a/packages/react-router/playground/feat/parse.ts b/packages/react-router/playground/feat/parse.ts deleted file mode 100644 index 738e9fb..0000000 --- a/packages/react-router/playground/feat/parse.ts +++ /dev/null @@ -1,13 +0,0 @@ -import * as farmfe_plugin_react_router_4fa9f607 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/_index.tsx'; -import * as farmfe_plugin_react_router_0da27a10 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover/store.tsx'; -import * as farmfe_plugin_react_router_c1095542 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover/index.tsx'; -import * as farmfe_plugin_react_router_fa180d5e from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.$.tsx'; -import * as farmfe_plugin_react_router_c3f09479 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.$test.tsx'; -import * as farmfe_plugin_react_router_090cd3b4 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.tsx'; -import * as farmfe_plugin_react_router_23551dfd from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.$.tsx'; -import * as farmfe_plugin_react_router_dae204bb from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts._index.tsx'; -import * as farmfe_plugin_react_router_18ababe8 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.trending.tsx'; -import * as farmfe_plugin_react_router_870d5865 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.$city.tsx'; -import * as farmfe_plugin_react_router_2e71f9f8 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts_.mine.tsx'; -import * as farmfe_plugin_react_router_a5020bac from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts_.your.tsx'; -import * as farmfe_plugin_react_router_339bb3b2 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/_auth.login.tsx'; diff --git a/packages/react-router/playground/feat/plugin_code.ts b/packages/react-router/playground/feat/plugin_code.ts deleted file mode 100644 index b28f145..0000000 --- a/packages/react-router/playground/feat/plugin_code.ts +++ /dev/null @@ -1,150 +0,0 @@ -import * as farmfe_plugin_react_router_2e71f9f8 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts_.mine.tsx'; -import * as farmfe_plugin_react_router_a5020bac from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts_.your.tsx'; -import * as farmfe_plugin_react_router_0da27a10 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover/store.tsx'; -import * as farmfe_plugin_react_router_c3f09479 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.$test.tsx'; -import * as farmfe_plugin_react_router_c1095542 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover/index.tsx'; -import * as farmfe_plugin_react_router_fa180d5e from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.$.tsx'; -import * as farmfe_plugin_react_router_090cd3b4 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.tsx'; -import * as farmfe_plugin_react_router_dae204bb from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts._index.tsx'; -import * as farmfe_plugin_react_router_870d5865 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.$city.tsx'; -import * as farmfe_plugin_react_router_23551dfd from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.$.tsx'; -import * as farmfe_plugin_react_router_18ababe8 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/concerts.trending.tsx'; -import * as farmfe_plugin_react_router_4fa9f607 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/_index.tsx'; -import * as farmfe_plugin_react_router_339bb3b2 from '/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/_auth.login.tsx'; - - -const routes = [ - { - "children": [ - { - "path": "dashboard", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/(lang).dashboard.lazy.tsx').then(adapter))$" - } - ], - "path": ":lang?", - "component": "lazy(() => import('').then(adapter))" - }, - { - "children": [ - { - "path": "mine", - "component": "...adapter(farmfe_plugin_react_router_2e71f9f8)" - }, - { - "path": "your", - "component": "...adapter(farmfe_plugin_react_router_a5020bac)" - } - ], - "path": "concerts_", - "component": "lazy(() => import('').then(adapter))" - }, - { - "children": [ - { - "path": "recover/store", - "component": "...adapter(farmfe_plugin_react_router_0da27a10)" - }, - { - "index": true, - "path": "", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth._index.lazy.tsx').then(adapter))" - }, - { - "children": [ - { - "path": "test", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover.test.lazy.tsx').then(adapter))" - } - ], - "path": "recover", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.recover/route.lazy.tsx').then(adapter))" - }, - { - "path": ":test", - "component": "...adapter(farmfe_plugin_react_router_c3f09479)" - }, - { - "children": [ - { - "children": [ - { - "path": "parent", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.new.without.parent.lazy.tsx').then(adapter))" - } - ], - "path": "without", - "component": "lazy(() => import('').then(adapter))" - } - ], - "path": "new", - "component": "lazy(() => import('').then(adapter))" - }, - { - "path": "recover/index", - "component": "...adapter(farmfe_plugin_react_router_c1095542)" - }, - { - "path": "*", - "component": "...adapter(farmfe_plugin_react_router_fa180d5e)" - }, - { - "children": [ - { - "path": "test", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.deploy.test.lazy.tsx').then(adapter))" - } - ], - "path": "deploy", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.deploy.lazy.tsx').then(adapter))" - }, - { - "path": "forgot-pass", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.forgot-pass.lazy.tsx').then(adapter))" - } - ], - "path": "auth", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/auth.lazy.tsx').then(adapter))" - }, - { - "children": [ - { - "index": true, - "path": "", - "component": "...adapter(farmfe_plugin_react_router_dae204bb)" - }, - { - "path": ":city", - "component": "...adapter(farmfe_plugin_react_router_870d5865)" - }, - { - "path": "*", - "component": "...adapter(farmfe_plugin_react_router_23551dfd)" - }, - { - "path": "trending", - "component": "...adapter(farmfe_plugin_react_router_18ababe8)" - } - ], - "path": "concerts", - "component": "...adapter(farmfe_plugin_react_router_090cd3b4)" - }, - { - "index": true, - "path": "", - "component": "...adapter(farmfe_plugin_react_router_4fa9f607)" - }, - { - "children": [ - { - "path": "login", - "component": "...adapter(farmfe_plugin_react_router_339bb3b2)" - } - ], - "path": "", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/_auth.lazy.tsx').then(adapter))" - }, - { - "path": "notes", - "component": "lazy(() => import('/Users/cherry7/Documents/open/farm-fe/plugins/packages/react-router/playground/routes/notes.lazy.tsx').then(adapter))" - } -]; diff --git a/packages/react-router/playground/feat/route.json b/packages/react-router/playground/feat/route.json deleted file mode 100644 index 2a304dc..0000000 --- a/packages/react-router/playground/feat/route.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "path": "notes", - "lazy": "ImportStart'./app/routes/notes.lazy.tsx'ImportEnd" - }, - { - "path": "concerts/your", - "spread": "SpreadStartroute46236SpreadEnd" - }, - { - "path": "concerts/mine", - "spread": "SpreadStartroute99661SpreadEnd" - }, - { - "path": "concerts", - "spread": "SpreadStartroute34862SpreadEnd", - "children": [ - { - "path": "trending", - "spread": "SpreadStartroute17192SpreadEnd" - }, - { - "index": true, - "spread": "SpreadStartroute75517SpreadEnd" - }, - { - "path": ":city", - "spread": "SpreadStartroute6772SpreadEnd" - }, - { - "path": "*", - "spread": "SpreadStartroute93961SpreadEnd" - } - ] - }, - { - "path": "auth", - "lazy": "ImportStart'./app/routes/auth.lazy.tsx'ImportEnd", - "children": [ - { - "path": "recover", - "lazy": "ImportStart'./app/routes/auth.recover/route.lazy.tsx'ImportEnd", - "children": [ - { - "path": "test", - "lazy": "ImportStart'./app/routes/auth.recover.test.lazy.tsx'ImportEnd" - } - ] - }, - { - "path": "new", - "children": [ - { - "path": "without", - "children": [ - { - "path": "parent", - "lazy": "ImportStart'./app/routes/auth.new.without.parent.lazy.tsx'ImportEnd" - } - ] - } - ] - }, - { - "path": "forgot-pass", - "lazy": "ImportStart'./app/routes/auth.forgot-pass.lazy.tsx'ImportEnd" - }, - { - "path": "deploy", - "lazy": "ImportStart'./app/routes/auth.deploy.lazy.tsx'ImportEnd", - "children": [ - { - "path": "test", - "lazy": "ImportStart'./app/routes/auth.deploy.test.lazy.tsx'ImportEnd" - } - ] - }, - { - "index": true, - "lazy": "ImportStart'./app/routes/auth._index.lazy.tsx'ImportEnd" - }, - { - "path": ":test", - "spread": "SpreadStartroute70894SpreadEnd" - }, - { - "path": "*", - "spread": "SpreadStartroute16242SpreadEnd" - } - ] - }, - { - "index": true, - "spread": "SpreadStartroute79732SpreadEnd" - }, - { - "lazy": "ImportStart'./app/routes/_auth.lazy.tsx'ImportEnd", - "children": [ - { - "path": "login", - "spread": "SpreadStartroute12440SpreadEnd" - } - ] - }, - { - "path": ":lang?", - "children": [ - { - "path": "dashboard", - "lazy": "ImportStart'./app/routes/($lang).dashboard.lazy.tsx'ImportEnd" - } - ] - } -] diff --git a/packages/react-router/playground/feat/route.ts b/packages/react-router/playground/feat/route.ts deleted file mode 100644 index 88e74ad..0000000 --- a/packages/react-router/playground/feat/route.ts +++ /dev/null @@ -1,73 +0,0 @@ -import * as route57321 from '../routes/concerts_.your.tsx' -import * as route86759 from '../routes/concerts_.mine.tsx' -import * as route26116 from '../routes/concerts.tsx' -import * as route19440 from '../routes/concerts.trending.tsx' -import * as route82174 from '../routes/concerts._index.tsx' -import * as route76427 from '../routes/concerts.$city.tsx' -import * as route88004 from '../routes/concerts.$.tsx' -import * as route82398 from '../routes/auth.$test.tsx' -import * as route29280 from '../routes/auth.$.tsx' -import * as route20320 from '../routes/_index.tsx' -import * as route71204 from '../routes/_auth.login.tsx' - - -function moduleFactory(module) { - const { default: Component, clientLoader: loader, clientAction: action, loader: _loader, action: _action, Component: _Component, ...rest } = module; - return { Component, loader, action, ...rest }; -} - -export const routes = [ - { "path": "notes", "lazy": () => import('../routes/notes.lazy.tsx').then(moduleFactory) }, - { "path": "concerts/your", ...moduleFactory(route57321) }, - { "path": "concerts/mine", ...moduleFactory(route86759) }, - { - "path": "concerts", ...moduleFactory(route26116), - "children": [ - { "path": "trending", ...moduleFactory(route19440) }, - { "index": true, ...moduleFactory(route82174) }, - { "path": ":city", ...moduleFactory(route76427) }, - { "path": "*", ...moduleFactory(route88004) } - ] - }, - { - "path": "auth", "lazy": () => import('../routes/auth.lazy.tsx').then(moduleFactory), - "children": [ - { - "path": "recover", "lazy": () => import('../routes/auth.recover/route.lazy.tsx').then(moduleFactory), - "children": [ - { "path": "test", "lazy": () => import('../routes/auth.recover.test.lazy.tsx').then(moduleFactory) } - ] - }, - { - "path": "new", "children": [ - { - "path": "without", - "children": [ - { - "path": "parent", "lazy": () => import('../routes/auth.new.without.parent.lazy.tsx').then(moduleFactory) - }] - } - ] - }, - { "path": "forgot-pass", "lazy": () => import('../routes/auth.forgot-pass.lazy.tsx').then(moduleFactory) }, - { - "path": "deploy", "lazy": () => import('../routes/auth.deploy.lazy.tsx').then(moduleFactory), - "children": [{ "path": "test", "lazy": () => import('../routes/auth.deploy.test.lazy.tsx').then(moduleFactory) }] - }, - { "index": true, "lazy": () => import('../routes/auth._index.lazy.tsx').then(moduleFactory) }, - { "path": ":test", ...moduleFactory(route82398) }, - { "path": "*", ...moduleFactory(route29280) } - ] - }, - { "index": true, ...moduleFactory(route20320) }, - { - "lazy": () => import('../routes/_auth.lazy.tsx').then(moduleFactory), - "children": [{ "path": "login", ...moduleFactory(route71204) }] - }, - { - "path": ":lang?", - "children": [ - { "path": "dashboard", "lazy": () => import('../routes/($lang).dashboard.lazy.tsx').then(moduleFactory) } - ] - }] - diff --git a/packages/react-router/playground/package.json b/packages/react-router/playground/package.json index 871ae6c..7b9c548 100644 --- a/packages/react-router/playground/package.json +++ b/packages/react-router/playground/package.json @@ -10,18 +10,19 @@ "clean": "farm clean" }, "dependencies": { + "@farmfe/plugin-react-router": "workspace:*", "clsx": "^1.2.1", "react": "18", "react-dom": "18", - "farm-plugin-react-router": "workspace:*" + "react-router-dom": "^6.26.1" }, "devDependencies": { "@farmfe/cli": "^1.0.2", "@farmfe/core": "^1.3.0", "@farmfe/plugin-react": "^1.2.0", "@types/react": "18", - "core-js": "^3.36.1", "@types/react-dom": "18", + "core-js": "^3.36.1", "react-refresh": "^0.14.0" } -} \ No newline at end of file +} diff --git a/packages/react-router/playground/src/main.tsx b/packages/react-router/playground/src/main.tsx index 67c183c..e52fc9d 100644 --- a/packages/react-router/playground/src/main.tsx +++ b/packages/react-router/playground/src/main.tsx @@ -2,6 +2,10 @@ import React, { useState } from "react"; import "./main.css"; import reactLogo from "./assets/react.svg"; import FarmLogo from "./assets/logo.png"; +// @ts-ignore +import { routes } from "virtual:__REACT_VIRTUAL_ROUTER__"; +console.log(routes); + export function Main() { const [count, setCount] = useState(0); console.log("rendering Main component") diff --git a/packages/react-router/playground/routes/($lang).dashboard.lazy.tsx b/packages/react-router/playground/src/routes/($lang).dashboard.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/($lang).dashboard.lazy.tsx rename to packages/react-router/playground/src/routes/($lang).dashboard.lazy.tsx diff --git a/packages/react-router/playground/routes/_auth.lazy.tsx b/packages/react-router/playground/src/routes/_auth.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/_auth.lazy.tsx rename to packages/react-router/playground/src/routes/_auth.lazy.tsx diff --git a/packages/react-router/playground/routes/_auth.login.tsx b/packages/react-router/playground/src/routes/_auth.login.tsx similarity index 100% rename from packages/react-router/playground/routes/_auth.login.tsx rename to packages/react-router/playground/src/routes/_auth.login.tsx diff --git a/packages/react-router/playground/routes/_index.tsx b/packages/react-router/playground/src/routes/_index.tsx similarity index 100% rename from packages/react-router/playground/routes/_index.tsx rename to packages/react-router/playground/src/routes/_index.tsx diff --git a/packages/react-router/playground/routes/auth.$.tsx b/packages/react-router/playground/src/routes/auth.$.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.$.tsx rename to packages/react-router/playground/src/routes/auth.$.tsx diff --git a/packages/react-router/playground/routes/auth.$test.tsx b/packages/react-router/playground/src/routes/auth.$test.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.$test.tsx rename to packages/react-router/playground/src/routes/auth.$test.tsx diff --git a/packages/react-router/playground/routes/auth._index.lazy.tsx b/packages/react-router/playground/src/routes/auth._index.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/auth._index.lazy.tsx rename to packages/react-router/playground/src/routes/auth._index.lazy.tsx diff --git a/packages/react-router/playground/routes/auth.deploy.lazy.tsx b/packages/react-router/playground/src/routes/auth.deploy.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.deploy.lazy.tsx rename to packages/react-router/playground/src/routes/auth.deploy.lazy.tsx diff --git a/packages/react-router/playground/routes/auth.deploy.test.lazy.tsx b/packages/react-router/playground/src/routes/auth.deploy.test.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.deploy.test.lazy.tsx rename to packages/react-router/playground/src/routes/auth.deploy.test.lazy.tsx diff --git a/packages/react-router/playground/routes/auth.forgot-pass.lazy.tsx b/packages/react-router/playground/src/routes/auth.forgot-pass.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.forgot-pass.lazy.tsx rename to packages/react-router/playground/src/routes/auth.forgot-pass.lazy.tsx diff --git a/packages/react-router/playground/routes/auth.lazy.tsx b/packages/react-router/playground/src/routes/auth.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.lazy.tsx rename to packages/react-router/playground/src/routes/auth.lazy.tsx diff --git a/packages/react-router/playground/routes/auth.new.without.parent.lazy.tsx b/packages/react-router/playground/src/routes/auth.new.without.parent.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.new.without.parent.lazy.tsx rename to packages/react-router/playground/src/routes/auth.new.without.parent.lazy.tsx diff --git a/packages/react-router/playground/routes/auth.recover.test.lazy.tsx b/packages/react-router/playground/src/routes/auth.recover.test.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.recover.test.lazy.tsx rename to packages/react-router/playground/src/routes/auth.recover.test.lazy.tsx diff --git a/packages/react-router/playground/routes/auth.recover/index.tsx b/packages/react-router/playground/src/routes/auth.recover/index.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.recover/index.tsx rename to packages/react-router/playground/src/routes/auth.recover/index.tsx diff --git a/packages/react-router/playground/routes/auth.recover/route.lazy.tsx b/packages/react-router/playground/src/routes/auth.recover/route.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.recover/route.lazy.tsx rename to packages/react-router/playground/src/routes/auth.recover/route.lazy.tsx diff --git a/packages/react-router/playground/routes/auth.recover/store.tsx b/packages/react-router/playground/src/routes/auth.recover/store.tsx similarity index 100% rename from packages/react-router/playground/routes/auth.recover/store.tsx rename to packages/react-router/playground/src/routes/auth.recover/store.tsx diff --git a/packages/react-router/playground/routes/concerts.$.tsx b/packages/react-router/playground/src/routes/concerts.$.tsx similarity index 100% rename from packages/react-router/playground/routes/concerts.$.tsx rename to packages/react-router/playground/src/routes/concerts.$.tsx diff --git a/packages/react-router/playground/routes/concerts.$city.tsx b/packages/react-router/playground/src/routes/concerts.$city.tsx similarity index 100% rename from packages/react-router/playground/routes/concerts.$city.tsx rename to packages/react-router/playground/src/routes/concerts.$city.tsx diff --git a/packages/react-router/playground/routes/concerts._index.tsx b/packages/react-router/playground/src/routes/concerts._index.tsx similarity index 100% rename from packages/react-router/playground/routes/concerts._index.tsx rename to packages/react-router/playground/src/routes/concerts._index.tsx diff --git a/packages/react-router/playground/routes/concerts.trending.tsx b/packages/react-router/playground/src/routes/concerts.trending.tsx similarity index 100% rename from packages/react-router/playground/routes/concerts.trending.tsx rename to packages/react-router/playground/src/routes/concerts.trending.tsx diff --git a/packages/react-router/playground/routes/concerts.tsx b/packages/react-router/playground/src/routes/concerts.tsx similarity index 100% rename from packages/react-router/playground/routes/concerts.tsx rename to packages/react-router/playground/src/routes/concerts.tsx diff --git a/packages/react-router/playground/routes/concerts_.mine.tsx b/packages/react-router/playground/src/routes/concerts_.mine.tsx similarity index 100% rename from packages/react-router/playground/routes/concerts_.mine.tsx rename to packages/react-router/playground/src/routes/concerts_.mine.tsx diff --git a/packages/react-router/playground/routes/concerts_.your.tsx b/packages/react-router/playground/src/routes/concerts_.your.tsx similarity index 100% rename from packages/react-router/playground/routes/concerts_.your.tsx rename to packages/react-router/playground/src/routes/concerts_.your.tsx diff --git a/packages/react-router/playground/routes/notes.lazy.tsx b/packages/react-router/playground/src/routes/notes.lazy.tsx similarity index 100% rename from packages/react-router/playground/routes/notes.lazy.tsx rename to packages/react-router/playground/src/routes/notes.lazy.tsx diff --git a/packages/react-router/pnpm-lock.yaml b/packages/react-router/pnpm-lock.yaml index 1b148af..8e12b15 100644 --- a/packages/react-router/pnpm-lock.yaml +++ b/packages/react-router/pnpm-lock.yaml @@ -14,18 +14,21 @@ importers: playground: dependencies: + '@farmfe/plugin-react-router': + specifier: workspace:* + version: link:.. clsx: specifier: ^1.2.1 version: 1.2.1 - farm-plugin-react-router: - specifier: workspace:* - version: link:.. react: specifier: '18' version: 18.3.1 react-dom: specifier: '18' version: 18.3.1(react@18.3.1) + react-router-dom: + specifier: ^6.26.1 + version: 6.26.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@farmfe/cli': specifier: ^1.0.2 @@ -283,6 +286,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@remix-run/router@1.19.1': + resolution: {integrity: sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==} + engines: {node: '>=14.0.0'} + '@swc/helpers@0.5.12': resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} @@ -1213,6 +1220,19 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} + react-router-dom@6.26.1: + resolution: {integrity: sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router@6.26.1: + resolution: {integrity: sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -1816,6 +1836,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@remix-run/router@1.19.1': {} + '@swc/helpers@0.5.12': dependencies: tslib: 2.7.0 @@ -2712,6 +2734,18 @@ snapshots: react-refresh@0.14.2: {} + react-router-dom@6.26.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@remix-run/router': 1.19.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.26.1(react@18.3.1) + + react-router@6.26.1(react@18.3.1): + dependencies: + '@remix-run/router': 1.19.1 + react: 18.3.1 + react@18.3.1: dependencies: loose-envify: 1.4.0 diff --git a/packages/react-router/src/lib.rs b/packages/react-router/src/lib.rs index 5974e24..8bdb203 100644 --- a/packages/react-router/src/lib.rs +++ b/packages/react-router/src/lib.rs @@ -5,7 +5,7 @@ mod parser; use farmfe_core::{ config::Config, module::ModuleType, - plugin::{Plugin, PluginLoadHookResult}, + plugin::{Plugin, PluginLoadHookResult, PluginResolveHookResult}, serde_json, }; use farmfe_macro_plugin::farm_plugin; @@ -46,20 +46,41 @@ impl FarmPluginReactRouter { } } +const REACT_VIRTUAL_ROUTER: &str = "virtual:__REACT_VIRTUAL_ROUTER__:"; + impl Plugin for FarmPluginReactRouter { fn name(&self) -> &str { "FarmPluginReactRouter" } + fn priority(&self) -> i32 { + 105 + } + fn resolve( + &self, + param: &farmfe_core::plugin::PluginResolveHookParam, + _context: &std::sync::Arc, + _hook_context: &farmfe_core::plugin::PluginHookContext, + ) -> farmfe_core::error::Result> { + if param.source == "virtual:__REACT_VIRTUAL_ROUTER__" { + return Ok(Some(PluginResolveHookResult { + resolved_path: REACT_VIRTUAL_ROUTER.to_string(), + side_effects: false, + external: false, + ..Default::default() + })); + } + Ok(None) + } fn load( &self, param: &farmfe_core::plugin::PluginLoadHookParam, _context: &std::sync::Arc, _hook_context: &farmfe_core::plugin::PluginHookContext, ) -> farmfe_core::error::Result> { - if param.module_id == "virtual:routes" { + if param.resolved_path == REACT_VIRTUAL_ROUTER { if matches!(self.options.mode, Some(Mode::Remix)) { let route_files = get_route_files(&self.options.routes_path.clone().unwrap()); - let (routes, imports) = parse(route_files, ¶m.resolved_path, 0); + let (routes, imports) = parse(route_files, &self.options.routes_path.clone().unwrap(), 0); let code = build_routes_virtual_code(routes, imports); return Ok(Some(PluginLoadHookResult { content: code, diff --git a/packages/react-router/src/parser/remix_parser.rs b/packages/react-router/src/parser/remix_parser.rs index e767eda..ebd3744 100644 --- a/packages/react-router/src/parser/remix_parser.rs +++ b/packages/react-router/src/parser/remix_parser.rs @@ -16,6 +16,11 @@ pub struct Route { lazy: Option, } +const ADAPTER_MODULE:&str = "function adapterModule(module) { + const { default: Component, clientLoader: loader, clientAction: action, loader: _loader, action: _action, Component: _Component, ...rest } = module; + return { Component, loader, action, ...rest }; +}\n\n"; + impl Serialize for Route { fn serialize(&self, serializer: S) -> Result where @@ -64,12 +69,17 @@ fn process_page( let suffix = page_type.0; is_lazy = page_type.1; - let page_condition = format!("{}{}.tsx", segment, suffix); - let route_page_condition = format!("{}/route{}.tsx", segment, suffix); + let page_condition = format!("{}{}", segment, suffix); + let route_page_condition = format!("{}/route{}", segment, suffix); if let Some(page) = filtered_route_files .iter() - .find(|str| str.ends_with(&page_condition) || str.ends_with(&route_page_condition)) + .find(|str: &&String|{ + let str_ext = str.split('.').last(); + let page_condition = format!("{}.{}", page_condition, str_ext.unwrap()); + let route_page_condition = format!("{}.{}", route_page_condition, str_ext.unwrap()); + str.contains(&page_condition) || str.contains(&route_page_condition) + }) { let absolute_path = format!("{}/{}", routes_path, page); component = absolute_path; @@ -81,12 +91,21 @@ fn process_page( } pub fn get_route_files(dir: &str) -> Vec { - WalkDir::new(dir) + let mut dir = dir.to_string(); + if !dir.ends_with('/') { + dir.push_str("/"); + } + WalkDir::new(&dir) .into_iter() .filter_map(|e| e.ok()) .filter_map(|e| { - if e.path().is_file() && e.path().extension().map_or(false, |ext| ext == "tsx") { - Some(normalize_path(e.path().to_str().unwrap()).replace(dir, "")) + if e.path().is_file() + && e + .path() + .extension() + .map_or(false, |e| e == "jsx" || e == "tsx") + { + Some(normalize_path(e.path().to_str().unwrap()).replace(&dir, "")) } else { None } @@ -94,14 +113,18 @@ pub fn get_route_files(dir: &str) -> Vec { .collect::>() } -pub fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec, String) { +pub fn parse( + route_files: Vec, + routes_path: &str, + level: usize, +) -> (Vec, String) { let mut routes: Vec = Vec::new(); let mut imports = String::new(); let first_segments: HashSet<_> = route_files .iter() .filter_map(|str| str.split('.').nth(level)) .filter_map(|segment| match segment { - "tsx" | "lazy" => None, + "jsx" | "tsx" | "lazy" => None, _ => Some(segment.replace("/route", "")), }) .collect(); @@ -136,7 +159,8 @@ pub fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec< route.path = route_path; } - let (component_file_path, is_lazy) = process_page(&filtered_route_files, &segment, routes_path); + let (component_file_path, is_lazy) = + process_page(&filtered_route_files, &segment, routes_path); if !component_file_path.is_empty() { if !is_lazy { let import_name = format!( @@ -148,16 +172,16 @@ pub fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec< "import * as {} from '{}';\n", import_name, component_file_path )); - route.spread_module = Some(format!("...adapter({})", import_name)); + route.spread_module = Some(format!("...adapterModule({})", import_name)); } else { route.lazy = Some(format!( - "() => import('{}').then(adapter)", + "() => import('{}').then(adapterModule)", component_file_path )); } } - let (mut routes_map, imps) = parse(filtered_route_files, routes_path, level + 1); + let (mut routes_map, ims) = parse(filtered_route_files, routes_path, level + 1); if !routes_map.is_empty() { if segment.ends_with("_") { let real_segment = &segment[..segment.len() - 1]; @@ -169,7 +193,7 @@ pub fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec< } } route.children = Some(routes_map); - imports.push_str(&imps); + imports.push_str(&ims); } routes.push(route); } @@ -178,13 +202,7 @@ pub fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec< } pub fn build_routes_virtual_code(routes: Vec, imports: String) -> String { - // 定义适配器函数 - let adapter = "function adapterModule(module) { - const { default: Component, clientLoader: loader, clientAction: action, loader: _loader, action: _action, Component: _Component, ...rest } = module; - return { Component, loader, action, ...rest }; -}\n\n"; - - let mut code = format!("{}\n\n{}", imports, adapter); + let mut code = format!("{}\n\n{}", imports, ADAPTER_MODULE); let re = Regex::new(r#""spread_module": "\$(.*?)\$"|"\$(.*?)\$""#).expect("Invalid regex"); From 9731fdb36c21d92c2c660f67cafc3aaa0d338331 Mon Sep 17 00:00:00 2001 From: CCherry07 <2405693142@qq.com> Date: Sat, 31 Aug 2024 10:18:08 +0800 Subject: [PATCH 08/10] feat: REACT_VIRTUAL_ROUTER --- Cargo.lock | 111 ++++++++++++++++++ packages/react-router/Cargo.toml | 2 +- .../react-router/playground/src/index.tsx | 28 ++++- packages/react-router/playground/src/main.tsx | 36 ------ .../playground/src/routes/_index.tsx | 57 +++++---- .../playground/src/routes/aaa.tsx | 3 + .../playground/src/routes/auth.$.tsx | 2 +- .../playground/src/routes/auth.lazy.tsx | 2 +- .../playground/src/routes/concerts_.mine.tsx | 2 +- .../playground/src/routes/concerts_.your.tsx | 11 +- packages/react-router/src/lib.rs | 24 +++- .../react-router/src/parser/remix_parser.rs | 40 +++---- 12 files changed, 221 insertions(+), 97 deletions(-) delete mode 100644 packages/react-router/playground/src/main.tsx create mode 100644 packages/react-router/playground/src/routes/aaa.tsx diff --git a/Cargo.lock b/Cargo.lock index 2788cff..5dde7a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -510,6 +510,15 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403" +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.5" @@ -804,6 +813,7 @@ dependencies = [ "farmfe_toolkit", "farmfe_toolkit_plugin_types", "glob", + "notify", "serde", "walkdir", ] @@ -1016,6 +1026,18 @@ dependencies = [ "swc_core 0.90.37", ] +[[package]] +name = "filetime" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.59.0", +] + [[package]] name = "fixedbitset" version = "0.4.2" @@ -1048,6 +1070,15 @@ dependencies = [ "syn 2.0.71", ] +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + [[package]] name = "funty" version = "2.0.0" @@ -1245,6 +1276,26 @@ dependencies = [ "serde", ] +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + [[package]] name = "inventory" version = "0.1.11" @@ -1331,6 +1382,26 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "kqueue" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -1426,6 +1497,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -1552,6 +1634,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", + "log", "wasi", "windows-sys 0.48.0", ] @@ -1581,6 +1664,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "notify" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +dependencies = [ + "bitflags 2.6.0", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio", + "walkdir", + "windows-sys 0.48.0", +] + [[package]] name = "num-bigint" version = "0.4.6" @@ -4598,6 +4700,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.48.5" diff --git a/packages/react-router/Cargo.toml b/packages/react-router/Cargo.toml index 0da8249..997b791 100644 --- a/packages/react-router/Cargo.toml +++ b/packages/react-router/Cargo.toml @@ -16,4 +16,4 @@ farmfe_toolkit = { workspace = true } serde = { version = "1.0.197", features = ["derive"] } glob = "0.3.1" walkdir = "2.5.0" - +notify = "6.1.1" diff --git a/packages/react-router/playground/src/index.tsx b/packages/react-router/playground/src/index.tsx index b50ad2b..a6e64a0 100644 --- a/packages/react-router/playground/src/index.tsx +++ b/packages/react-router/playground/src/index.tsx @@ -1,9 +1,27 @@ -import React from 'react'; +import React, { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; -import { Main } from './main'; import './index.css' +// @ts-ignore +import { routes } from "virtual:__REACT_VIRTUAL_ROUTER__"; -const container = document.querySelector('#root'); -const root = createRoot(container); +import { createBrowserRouter, RouterProvider } from 'react-router-dom'; +console.log(routes); +const router = createBrowserRouter(routes, { + future: { + v7_fetcherPersist: true, + v7_normalizeFormMethod: true, + v7_partialHydration: true, + v7_relativeSplatPath: true, + v7_skipActionErrorRevalidation: true, + }, +}) -root.render(
); +// const container = document.querySelector('#root'); +// const root = createRoot(container); + +// root.render(
); +export default createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/packages/react-router/playground/src/main.tsx b/packages/react-router/playground/src/main.tsx deleted file mode 100644 index e52fc9d..0000000 --- a/packages/react-router/playground/src/main.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React, { useState } from "react"; -import "./main.css"; -import reactLogo from "./assets/react.svg"; -import FarmLogo from "./assets/logo.png"; -// @ts-ignore -import { routes } from "virtual:__REACT_VIRTUAL_ROUTER__"; -console.log(routes); - -export function Main() { - const [count, setCount] = useState(0); - console.log("rendering Main component") - return ( - <> - -

Farm + React

-
- -

- Edit src/main.tsx and save to test HMR -

-
-

- Click on the Farm and React logos to learn more -

- - ); -} diff --git a/packages/react-router/playground/src/routes/_index.tsx b/packages/react-router/playground/src/routes/_index.tsx index 6f6d871..de2d2b8 100644 --- a/packages/react-router/playground/src/routes/_index.tsx +++ b/packages/react-router/playground/src/routes/_index.tsx @@ -1,38 +1,47 @@ -import React, { useState } from 'react' -import { useLoaderData } from 'react-router-dom' +import { useState } from "react"; +import "../main.css" +import reactLogo from "../assets/react.svg"; +import FarmLogo from "../assets/logo.png"; +import { useLoaderData, useNavigate } from "react-router-dom"; -export async function clientLoader() { - return 'Vite + React' +export const clientLoader = () => { + return { + name: 'asdasdas', + age: 19, + } } - -export default function Component() { - const [count, setCount] = useState(0) - const data = useLoaderData() as string - +export default function Main() { + const [count, setCount] = useState(0); + console.log("rendering Main Page") + const data = useLoaderData(); + const navigate = useNavigate(); + console.log(data); return ( <> -
+ -

{ data }

+

Farm + React

- +

- Edit - {' '} - src/App.tsx - {' '} - and save to test HMR + Edit src/main.tsx and save to test HMR

- Click on the Vite and React logos to learn more + Click on the Farm and React logos to learn more

- ) + ); } diff --git a/packages/react-router/playground/src/routes/aaa.tsx b/packages/react-router/playground/src/routes/aaa.tsx new file mode 100644 index 0000000..01cbd49 --- /dev/null +++ b/packages/react-router/playground/src/routes/aaa.tsx @@ -0,0 +1,3 @@ +export default function Component() { + return

AAAA

+} diff --git a/packages/react-router/playground/src/routes/auth.$.tsx b/packages/react-router/playground/src/routes/auth.$.tsx index 4d78b0c..3a0fb15 100644 --- a/packages/react-router/playground/src/routes/auth.$.tsx +++ b/packages/react-router/playground/src/routes/auth.$.tsx @@ -1,5 +1,5 @@ import React from 'react' export default function Component() { - return

Splat Route

+ return

Splat 阿斯顿撒大 阿萨德 ad啊的啊啊

} diff --git a/packages/react-router/playground/src/routes/auth.lazy.tsx b/packages/react-router/playground/src/routes/auth.lazy.tsx index 54f7b15..f0b1a63 100644 --- a/packages/react-router/playground/src/routes/auth.lazy.tsx +++ b/packages/react-router/playground/src/routes/auth.lazy.tsx @@ -6,7 +6,7 @@ import { Outlet } from 'react-router-dom' export default function Component() { return ( <> -

auth layout

+

BBBBB

) diff --git a/packages/react-router/playground/src/routes/concerts_.mine.tsx b/packages/react-router/playground/src/routes/concerts_.mine.tsx index 6abb701..40e46f2 100644 --- a/packages/react-router/playground/src/routes/concerts_.mine.tsx +++ b/packages/react-router/playground/src/routes/concerts_.mine.tsx @@ -1,5 +1,5 @@ import React from 'react' export default function Component() { - return

mine is out of concerts layout

+ return

xxxxxx

} diff --git a/packages/react-router/playground/src/routes/concerts_.your.tsx b/packages/react-router/playground/src/routes/concerts_.your.tsx index 525422a..0024680 100644 --- a/packages/react-router/playground/src/routes/concerts_.your.tsx +++ b/packages/react-router/playground/src/routes/concerts_.your.tsx @@ -1,5 +1,14 @@ import React from 'react' +export const clientLoader = () => { + return { + name: 'asdasdas', + age: 19, + } +} + export default function Component() { - return

your is out of concerts layout

+ const data = clientLoader(); + console.log(data); + return

AAAA

} diff --git a/packages/react-router/src/lib.rs b/packages/react-router/src/lib.rs index 8bdb203..cc98b96 100644 --- a/packages/react-router/src/lib.rs +++ b/packages/react-router/src/lib.rs @@ -2,6 +2,8 @@ mod parser; +use std::path::Path; + use farmfe_core::{ config::Config, module::ModuleType, @@ -10,15 +12,20 @@ use farmfe_core::{ }; use farmfe_macro_plugin::farm_plugin; use farmfe_toolkit::pluginutils::normalize_path::normalize_path; +use notify::{RecommendedWatcher, RecursiveMode, Result, Watcher}; use parser::remix_parser::{build_routes_virtual_code, get_route_files, parse}; use serde::{Deserialize, Serialize}; +const REACT_VIRTUAL_ROUTER: &str = "virtual:__REACT_VIRTUAL_ROUTER__"; + #[derive(Debug, Deserialize, Serialize, Clone)] enum Mode { Remix, Next, } +// 监听 文件夹 -> deps {} -> watcher -> deps + #[derive(Deserialize, Serialize, Clone, Debug)] #[serde(rename_all = "camelCase")] pub struct Options { @@ -46,8 +53,6 @@ impl FarmPluginReactRouter { } } -const REACT_VIRTUAL_ROUTER: &str = "virtual:__REACT_VIRTUAL_ROUTER__:"; - impl Plugin for FarmPluginReactRouter { fn name(&self) -> &str { "FarmPluginReactRouter" @@ -58,10 +63,19 @@ impl Plugin for FarmPluginReactRouter { fn resolve( &self, param: &farmfe_core::plugin::PluginResolveHookParam, - _context: &std::sync::Arc, - _hook_context: &farmfe_core::plugin::PluginHookContext, + context: &std::sync::Arc, + hook_context: &farmfe_core::plugin::PluginHookContext, ) -> farmfe_core::error::Result> { - if param.source == "virtual:__REACT_VIRTUAL_ROUTER__" { + if param.source == REACT_VIRTUAL_ROUTER { + let mut watcher = notify::recommended_watcher(|res| match res { + Ok(event) => println!("event: {:?}", event), + Err(e) => println!("watch error: {:?}", e), + }) + .unwrap(); + let routes_path = self.options.routes_path.clone().unwrap(); + println!("watching: {:?}", routes_path); + let routes_path = Path::new(&routes_path); + let _ = watcher.watch(routes_path, RecursiveMode::Recursive); return Ok(Some(PluginResolveHookResult { resolved_path: REACT_VIRTUAL_ROUTER.to_string(), side_effects: false, diff --git a/packages/react-router/src/parser/remix_parser.rs b/packages/react-router/src/parser/remix_parser.rs index ebd3744..aae5c70 100644 --- a/packages/react-router/src/parser/remix_parser.rs +++ b/packages/react-router/src/parser/remix_parser.rs @@ -17,8 +17,8 @@ pub struct Route { } const ADAPTER_MODULE:&str = "function adapterModule(module) { - const { default: Component, clientLoader: loader, clientAction: action, loader: _loader, action: _action, Component: _Component, ...rest } = module; - return { Component, loader, action, ...rest }; + const { default: Component, clientLoader: loader, clientAction: action, loader: _loader, action: _action, Component: _Component, ...other } = module; + return { Component, loader, action, ...other }; }\n\n"; impl Serialize for Route { @@ -72,15 +72,12 @@ fn process_page( let page_condition = format!("{}{}", segment, suffix); let route_page_condition = format!("{}/route{}", segment, suffix); - if let Some(page) = filtered_route_files - .iter() - .find(|str: &&String|{ - let str_ext = str.split('.').last(); - let page_condition = format!("{}.{}", page_condition, str_ext.unwrap()); - let route_page_condition = format!("{}.{}", route_page_condition, str_ext.unwrap()); - str.contains(&page_condition) || str.contains(&route_page_condition) - }) - { + if let Some(page) = filtered_route_files.iter().find(|str: &&String| { + let str_ext = str.split('.').last(); + let page_condition = format!("{}.{}", page_condition, str_ext.unwrap()); + let route_page_condition = format!("{}.{}", route_page_condition, str_ext.unwrap()); + str.ends_with(&page_condition) || str.ends_with(&route_page_condition) + }) { let absolute_path = format!("{}/{}", routes_path, page); component = absolute_path; break; @@ -91,7 +88,7 @@ fn process_page( } pub fn get_route_files(dir: &str) -> Vec { - let mut dir = dir.to_string(); + let mut dir = dir.to_string(); if !dir.ends_with('/') { dir.push_str("/"); } @@ -113,11 +110,7 @@ pub fn get_route_files(dir: &str) -> Vec { .collect::>() } -pub fn parse( - route_files: Vec, - routes_path: &str, - level: usize, -) -> (Vec, String) { +pub fn parse(route_files: Vec, routes_path: &str, level: usize) -> (Vec, String) { let mut routes: Vec = Vec::new(); let mut imports = String::new(); let first_segments: HashSet<_> = route_files @@ -159,8 +152,7 @@ pub fn parse( route.path = route_path; } - let (component_file_path, is_lazy) = - process_page(&filtered_route_files, &segment, routes_path); + let (component_file_path, is_lazy) = process_page(&filtered_route_files, &segment, routes_path); if !component_file_path.is_empty() { if !is_lazy { let import_name = format!( @@ -183,6 +175,7 @@ pub fn parse( let (mut routes_map, ims) = parse(filtered_route_files, routes_path, level + 1); if !routes_map.is_empty() { + imports.push_str(&ims); if segment.ends_with("_") { let real_segment = &segment[..segment.len() - 1]; for mut route in routes_map.drain(..) { @@ -191,11 +184,14 @@ pub fn parse( } routes.push(route); } + route.children = Some(routes_map); + } else { + route.children = Some(routes_map); + routes.push(route); } - route.children = Some(routes_map); - imports.push_str(&ims); + } else { + routes.push(route); } - routes.push(route); } (routes, imports) From 3d8c6befc0072af40f28638d1b5f00e705c66bbc Mon Sep 17 00:00:00 2001 From: CCherry07 <2405693142@qq.com> Date: Sat, 31 Aug 2024 16:32:15 +0800 Subject: [PATCH 09/10] feat: react router --- Cargo.lock | 363 ++-- Cargo.toml | 5 +- packages/dsv/rustfmt.toml | 2 - packages/icons/rustfmt.toml | 2 - packages/image/rustfmt.toml | 2 - packages/react-components/rustfmt.toml | 2 - packages/react-router/Cargo.lock | 2192 --------------------- packages/react-router/playground/index.js | 1 - packages/react-router/rust-toolchain.toml | 3 - packages/react-router/rustfmt.toml | 2 - packages/react-router/src/lib.rs | 12 - packages/strip/rustfmt.toml | 2 - packages/url/rustfmt.toml | 2 - packages/virtual/rustfmt.toml | 2 - packages/yaml/rustfmt.toml | 2 - pnpm-lock.yaml | 6 + rustfmt.toml | 2 +- 17 files changed, 213 insertions(+), 2389 deletions(-) delete mode 100644 packages/dsv/rustfmt.toml delete mode 100644 packages/icons/rustfmt.toml delete mode 100644 packages/image/rustfmt.toml delete mode 100644 packages/react-components/rustfmt.toml delete mode 100644 packages/react-router/Cargo.lock delete mode 100644 packages/react-router/playground/index.js delete mode 100644 packages/react-router/rust-toolchain.toml delete mode 100644 packages/react-router/rustfmt.toml delete mode 100644 packages/strip/rustfmt.toml delete mode 100644 packages/url/rustfmt.toml delete mode 100644 packages/virtual/rustfmt.toml delete mode 100644 packages/yaml/rustfmt.toml diff --git a/Cargo.lock b/Cargo.lock index 5dde7a8..bd3e31c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -78,9 +78,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -93,33 +93,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -136,9 +136,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ast_node" @@ -149,7 +149,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -172,7 +172,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -277,7 +277,7 @@ dependencies = [ "ahash 0.8.11", "chrono", "either", - "indexmap 2.2.6", + "indexmap 2.5.0", "itertools 0.13.0", "nom", "once_cell", @@ -288,9 +288,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", "serde", @@ -354,15 +354,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "camino" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] @@ -392,9 +392,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.6" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -416,9 +419,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.9" +version = "4.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64acc1846d54c1fe936a78dc189c34e28d3f5afc348403f28ecf53660b9b8462" +checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" dependencies = [ "clap_builder", "clap_derive", @@ -426,9 +429,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.9" +version = "4.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8393d67ba2e7bfaf28a23458e4e2b543cc73a99595511eb207fdb8aede942" +checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" dependencies = [ "anstream", "anstyle", @@ -438,27 +441,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.8" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "clap_lex" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "const_format" @@ -482,15 +485,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] @@ -676,7 +679,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1067,7 +1070,7 @@ checksum = "32016f1242eb82af5474752d00fd8ebcd9004bd69b462b1c91de833972d08ed4" dependencies = [ "proc-macro2", "swc_macros_common", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1135,7 +1138,7 @@ checksum = "b0e085ded9f1267c32176b40921b9754c474f7dd96f7e808d4a982e48aa1e854" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1204,9 +1207,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hstr" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96274be293b8877e61974a607105d09c84caebe9620b47774aa8a6b942042dd4" +checksum = "dae404c0c5d4e95d4858876ab02eecd6a196bb8caa42050dfa809938833fc412" dependencies = [ "hashbrown 0.14.5", "new_debug_unreachable", @@ -1267,9 +1270,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -1333,21 +1336,21 @@ dependencies = [ [[package]] name = "is-macro" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a85abdc13717906baccb5a1e435556ce0df215f242892f721dff62bf25288f" +checksum = "2069faacbe981460232f880d26bf3c7634e322d49053aa48c27e3ae642f728f1" dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -1375,9 +1378,9 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -1483,9 +1486,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libloading" @@ -1582,7 +1585,7 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1593,7 +1596,7 @@ checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1639,6 +1642,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + [[package]] name = "new_debug_unreachable" version = "1.0.6" @@ -1678,7 +1693,7 @@ dependencies = [ "kqueue", "libc", "log", - "mio", + "mio 0.8.11", "walkdir", "windows-sys 0.48.0", ] @@ -1730,9 +1745,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.1" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] @@ -1806,7 +1821,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap 2.5.0", ] [[package]] @@ -1874,7 +1889,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1929,9 +1944,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -2027,9 +2045,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -2107,9 +2125,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -2315,32 +2333,33 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.204" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "itoa", + "memchr", "ryu", "serde", ] @@ -2351,7 +2370,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "itoa", "ryu", "serde", @@ -2380,6 +2399,12 @@ dependencies = [ "digest", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -2478,11 +2503,30 @@ dependencies = [ "url", ] +[[package]] +name = "sourcemap" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab08a862c70980b8e23698b507e272317ae52a608a164a844111f5372374f1f" +dependencies = [ + "base64-simd", + "bitvec", + "data-encoding", + "debugid", + "if_chain", + "rustc-hash", + "rustc_version", + "serde", + "serde_json", + "unicode-id-start", + "url", +] + [[package]] name = "st-map" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8a5c4e5cc839409346495370b2df67489cafd7fa83616d0547a9697a6a89a1" +checksum = "8257dd592de7614be71a2342d36ba2d527ddad3f9a0c8d09d6ceed4c371531e4" dependencies = [ "arrayvec", "static-map-macro", @@ -2496,26 +2540,26 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "static-map-macro" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf483ea7e0e3a03d1b91687895814425149ad77facd3e2b6839dde26da98454" +checksum = "710e9696ef338691287aeb937ee6ffe60022f579d3c8d2fd9d58973a9a10a466" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -2559,7 +2603,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -2747,15 +2791,15 @@ dependencies = [ [[package]] name = "swc_config" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b67e115ab136fe0eb03558bb0508ca7782eeb446a96d165508c48617e3fd94" +checksum = "4740e53eaf68b101203c1df0937d5161a29f3c13bceed0836ddfe245b72dd000" dependencies = [ "anyhow", - "indexmap 2.2.6", + "indexmap 2.5.0", "serde", "serde_json", - "sourcemap 8.0.1", + "sourcemap 9.0.0", "swc_cached", "swc_config_macro", ] @@ -2769,7 +2813,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -2810,7 +2854,7 @@ version = "0.140.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be69b267990e9727881125d39b3a2b8204bb2f85b9ece2ad3e212a1fe5c79bea" dependencies = [ - "is-macro 0.3.5", + "is-macro 0.3.6", "string_enum", "swc_atoms 0.6.7", "swc_common 0.33.26", @@ -2822,7 +2866,7 @@ version = "0.141.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a5f28ff625a89de2a269bde3ed3b99be74bb9d3dc78dea6f3b071991b2cbf4" dependencies = [ - "is-macro 0.3.5", + "is-macro 0.3.6", "rkyv", "string_enum", "swc_atoms 0.6.7", @@ -2872,7 +2916,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3028,7 +3072,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70656acd47c91918635f1e8589963428cb3170975b71d786c79fb7a25605f687" dependencies = [ "bitflags 2.6.0", - "is-macro 0.3.5", + "is-macro 0.3.6", "num-bigint", "phf 0.11.2", "scoped-tls", @@ -3046,7 +3090,7 @@ checksum = "7be1306930c235435a892104c00c2b5e16231043c085d5a10bd3e7537b15659b" dependencies = [ "bitflags 2.6.0", "bytecheck 0.6.12", - "is-macro 0.3.5", + "is-macro 0.3.6", "num-bigint", "phf 0.11.2", "rkyv", @@ -3117,14 +3161,14 @@ dependencies = [ [[package]] name = "swc_ecma_codegen_macros" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090e409af49c8d1a3c13b3aab1ed09dd4eda982207eb3e63c2ad342f072b49c8" +checksum = "859fabde36db38634f3fad548dd5e3410c1aebba1b67a3c63e67018fa57a0bca" dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3164,8 +3208,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d23a9a192078d1d074113d77d8ad811f2a81a4447ae967739824da5d391616bf" dependencies = [ "arrayvec", - "indexmap 2.2.6", - "is-macro 0.3.5", + "indexmap 2.5.0", + "is-macro 0.3.6", "serde", "serde_derive", "smallvec", @@ -3361,7 +3405,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adde00302d7ddb37f312ee6d07078c7f3c7ede36c0f81c5050bae1d4c3fe501c" dependencies = [ "arrayvec", - "indexmap 2.2.6", + "indexmap 2.5.0", "num-bigint", "num_cpus", "once_cell", @@ -3460,7 +3504,7 @@ checksum = "9cd4847a3356a01bb9a73ccdd1c462dfdaed66d27d7ea6d6785ee1b54c9556ce" dependencies = [ "anyhow", "dashmap", - "indexmap 2.2.6", + "indexmap 2.5.0", "once_cell", "preset_env_base", "rustc-hash", @@ -3528,7 +3572,7 @@ checksum = "660badfe2eed8b6213ec9dcd71aa0786f8fb46ffa012e0313bcba1fe4a9a5c73" dependencies = [ "better_scoped_tls", "bitflags 2.6.0", - "indexmap 2.2.6", + "indexmap 2.5.0", "once_cell", "phf 0.11.2", "rustc-hash", @@ -3551,7 +3595,7 @@ checksum = "d37dc505c92af56d0f77cf6f31a6ccd37ac40cad1e01ff77277e0b1c70e8f8ff" dependencies = [ "better_scoped_tls", "bitflags 2.6.0", - "indexmap 2.2.6", + "indexmap 2.5.0", "once_cell", "phf 0.11.2", "rayon", @@ -3588,8 +3632,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626198f214d4c09adc98ab14565c19d72b6df9630f7e806ef9b2ef05a5fd17a5" dependencies = [ "arrayvec", - "indexmap 2.2.6", - "is-macro 0.3.5", + "indexmap 2.5.0", + "is-macro 0.3.6", "num-bigint", "rayon", "serde", @@ -3627,7 +3671,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3639,8 +3683,8 @@ dependencies = [ "Inflector", "anyhow", "bitflags 2.6.0", - "indexmap 2.2.6", - "is-macro 0.3.5", + "indexmap 2.5.0", + "is-macro 0.3.6", "path-clean", "pathdiff", "regex", @@ -3689,7 +3733,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "724a8306e98c1b1f9640fc44c1acc0c971f6daa17651919e06b64f905d4a4564" dependencies = [ "dashmap", - "indexmap 2.2.6", + "indexmap 2.5.0", "once_cell", "petgraph", "rayon", @@ -3735,7 +3779,7 @@ checksum = "446da32cac8299973aaf1d37496562bfd0c1e4f3c3ab5d0af6f07f42e8184102" dependencies = [ "base64 0.21.7", "dashmap", - "indexmap 2.2.6", + "indexmap 2.5.0", "once_cell", "rayon", "serde", @@ -3775,7 +3819,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146562ac3515c8de0fa9d479c43ae673cf9df9ece814f8b8130686080a7251ac" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "rustc-hash", "swc_atoms 0.6.7", "swc_common 0.34.4", @@ -3810,7 +3854,7 @@ version = "0.127.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15d40abfc4f3a7bfdf54d11ac705cc9dd0836c48bf085b359143b4d40b50cb31" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "num_cpus", "once_cell", "rustc-hash", @@ -3828,7 +3872,7 @@ version = "0.130.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13e62b199454a576c5fdbd7e1bef8ab88a395427456d8a713d994b7d469833aa" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "num_cpus", "once_cell", "rayon", @@ -3892,7 +3936,7 @@ checksum = "63db0adcff29d220c3d151c5b25c0eabe7e32dd936212b84cdaa1392e3130497" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3926,7 +3970,7 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c00cf5c1687e9858fb9de1ffa90a3e21369095406e97ace870a389320d105b0a" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "petgraph", "rustc-hash", "swc_common 0.34.4", @@ -3951,7 +3995,7 @@ version = "0.33.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59957df8048be691db04e6e358b29c6ff1274cd60ee2b4c2141e1d90b598d24e" dependencies = [ - "is-macro 0.3.5", + "is-macro 0.3.6", "string_enum", "swc_atoms 0.6.7", "swc_common 0.33.26", @@ -3963,7 +4007,7 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b909aca7c9cbd630a461d4a0a1d476ac13704dc515d2a79264c93d3280b02d23" dependencies = [ - "is-macro 0.3.5", + "is-macro 0.3.6", "rkyv", "string_enum", "swc_atoms 0.6.7", @@ -3995,7 +4039,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -4092,13 +4136,13 @@ dependencies = [ [[package]] name = "swc_macros_common" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "378577b6caa62da3a206e8f91ebba501ed03b3f719c493ccc28fca8b3f1f4b6b" +checksum = "f486687bfb7b5c560868f69ed2d458b880cebc9babebcb67e49f31b55c5bf847" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -4118,7 +4162,7 @@ checksum = "ff9719b6085dd2824fd61938a881937be14b08f95e2d27c64c825a9f65e052ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -4141,7 +4185,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -4192,7 +4236,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -4232,9 +4276,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.71" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -4285,7 +4329,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -4346,32 +4390,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.1" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", "libc", - "mio", - "num_cpus", + "mio 1.0.2", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -4393,7 +4436,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -4483,9 +4526,9 @@ checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" [[package]] name = "unsafe-libyaml" @@ -4551,9 +4594,9 @@ dependencies = [ [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "walkdir" @@ -4573,34 +4616,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4608,22 +4652,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wax" @@ -4660,11 +4704,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4841,9 +4885,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" +checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601" [[package]] name = "xmltree" @@ -4860,6 +4904,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -4871,5 +4916,5 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] diff --git a/Cargo.toml b/Cargo.toml index 7dcb19f..672ab48 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,7 @@ [workspace] -members = [ - "packages/*", -] +members = ["packages/*",] resolver = "2" + [workspace.dependencies] farmfe_core = { version = "0.6.2" } farmfe_utils = { version = "0.1.5" } diff --git a/packages/dsv/rustfmt.toml b/packages/dsv/rustfmt.toml deleted file mode 100644 index cab5731..0000000 --- a/packages/dsv/rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -tab_spaces = 2 -edition = "2021" diff --git a/packages/icons/rustfmt.toml b/packages/icons/rustfmt.toml deleted file mode 100644 index cab5731..0000000 --- a/packages/icons/rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -tab_spaces = 2 -edition = "2021" diff --git a/packages/image/rustfmt.toml b/packages/image/rustfmt.toml deleted file mode 100644 index cab5731..0000000 --- a/packages/image/rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -tab_spaces = 2 -edition = "2021" diff --git a/packages/react-components/rustfmt.toml b/packages/react-components/rustfmt.toml deleted file mode 100644 index cab5731..0000000 --- a/packages/react-components/rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -tab_spaces = 2 -edition = "2021" diff --git a/packages/react-router/Cargo.lock b/packages/react-router/Cargo.lock deleted file mode 100644 index 7fdd132..0000000 --- a/packages/react-router/Cargo.lock +++ /dev/null @@ -1,2192 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cd52102d3df161c77a887b608d7a4897d7cc112886a9537b738a887a03aaff" -dependencies = [ - "cfg-if", - "getrandom", - "once_cell", - "serde", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" -dependencies = [ - "memchr", -] - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anyhow" -version = "1.0.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" - -[[package]] -name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "ast_node" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab31376d309dd3bfc9cfb3c11c93ce0e0741bbe0354b20e7f8c60b044730b79" -dependencies = [ - "proc-macro2", - "quote", - "swc_macros_common", - "syn 2.0.65", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64-simd" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5" -dependencies = [ - "simd-abstraction", -] - -[[package]] -name = "better_scoped_tls" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794edcc9b3fb07bb4aecaa11f093fd45663b4feadb782d68303a2268bc2701de" -dependencies = [ - "scoped-tls", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "browserslist-rs" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf0ca73de70c3da94e4194e4a01fe732378f55d47cf4c0588caab22a0dbfa14" -dependencies = [ - "ahash 0.8.8", - "chrono", - "either", - "indexmap", - "itertools 0.13.0", - "nom", - "once_cell", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "bstr" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytecheck" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" -dependencies = [ - "bytecheck_derive 0.6.11", - "ptr_meta", - "simdutf8", -] - -[[package]] -name = "bytecheck" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41502630fe304ce54cbb2f8389e017784dee2b0328147779fcbe43b9db06d35d" -dependencies = [ - "bytecheck_derive 0.7.0", - "ptr_meta", - "simdutf8", -] - -[[package]] -name = "bytecheck_derive" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "bytecheck_derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda88c587085bc07dc201ab9df871bd9baa5e07f7754b745e4d7194b43ac1eda" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "windows-targets 0.52.0", -] - -[[package]] -name = "const_format" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" -dependencies = [ - "const_format_proc_macros", -] - -[[package]] -name = "const_format_proc_macros" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.3", - "lock_api", - "once_cell", - "parking_lot_core", -] - -[[package]] -name = "data-encoding" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" - -[[package]] -name = "debugid" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" -dependencies = [ - "serde", - "uuid", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", - "subtle", -] - -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - -[[package]] -name = "enhanced-magic-string" -version = "0.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6082b74cc322c69840d97a7d7cba3ee9ed34fa70536fb51a69824f36742960f5" -dependencies = [ - "base64 0.22.1", - "farmfe_utils", - "parking_lot", - "regex", - "sourcemap", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "farm_plugin_test1" -version = "0.0.0" -dependencies = [ - "farmfe_core", - "farmfe_macro_plugin", - "farmfe_toolkit_plugin_types", -] - -[[package]] -name = "farmfe_core" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ace47d8f9846d426af3462d631690d5eba8ae778f58ce4b096d410975d9df6f" -dependencies = [ - "blake2", - "bytecheck 0.7.0", - "dashmap", - "downcast-rs", - "enhanced-magic-string", - "farmfe_macro_cache_item", - "farmfe_utils", - "globset", - "heck", - "hex", - "parking_lot", - "petgraph", - "ptr_meta", - "rayon", - "regex", - "relative-path", - "rkyv", - "rkyv_dyn", - "rkyv_typename", - "serde", - "serde_json", - "swc_common", - "swc_css_ast", - "swc_css_prefixer", - "swc_ecma_ast", - "swc_ecma_parser", - "swc_html_ast", - "thiserror", - "wax", -] - -[[package]] -name = "farmfe_macro_cache_item" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61782617a57f8fa265ce3b4111763d703d457fef83c06341d2eed55cbc06297" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "farmfe_macro_plugin" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "055ed906d281675468dc70294716c6af0b6b904f09fdd7b111865cc72b4f4933" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "farmfe_toolkit_plugin_types" -version = "0.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b9933e059e6d28fb4c81e78aabfd1ca9288feb7a9e2c0516b4f08ca8b2d5c80" -dependencies = [ - "farmfe_core", - "lazy_static", - "libloading", -] - -[[package]] -name = "farmfe_utils" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d797c8fb2b5c357bd730dc119169e663f8ae7dfbc606696350c104e39324749d" -dependencies = [ - "base64 0.21.7", - "pathdiff", - "sha2", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "from_variant" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc9cc75639b041067353b9bce2450d6847e547276c6fbe4487d7407980e07db" -dependencies = [ - "proc-macro2", - "swc_macros_common", - "syn 2.0.65", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "ghost" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0e085ded9f1267c32176b40921b9754c474f7dd96f7e808d4a982e48aa1e854" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[package]] -name = "globset" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" -dependencies = [ - "aho-corasick", - "bstr", - "log", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hstr" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0f5356d62012374578cd3a5c013d6586de3efbca3b53379fc1edfbb95c9db14" -dependencies = [ - "hashbrown 0.14.3", - "new_debug_unreachable", - "once_cell", - "phf", - "rustc-hash", - "triomphe", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "if_chain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" - -[[package]] -name = "indexmap" -version = "2.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" -dependencies = [ - "equivalent", - "hashbrown 0.14.3", - "serde", -] - -[[package]] -name = "inventory" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb5160c60ba1e809707918ee329adb99d222888155835c6feedba19f6c3fd4" -dependencies = [ - "ctor", - "ghost", - "inventory-impl", -] - -[[package]] -name = "inventory-impl" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e41b53715c6f0c4be49510bb82dee2c1e51c8586d885abe65396e82ed518548" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "is-macro" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a85abdc13717906baccb5a1e435556ce0df215f242892f721dff62bf25288f" -dependencies = [ - "Inflector", - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "js-sys" -version = "0.3.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.155" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" - -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "lock_api" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "miette" -version = "5.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" -dependencies = [ - "miette-derive", - "once_cell", - "thiserror", - "unicode-width", -] - -[[package]] -name = "miette-derive" -version = "5.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", - "serde", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "outref" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" -dependencies = [ - "backtrace", - "cfg-if", - "libc", - "petgraph", - "redox_syscall", - "smallvec", - "thread-id", - "windows-targets 0.48.5", -] - -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "phf" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" -dependencies = [ - "phf_macros", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" -dependencies = [ - "phf_shared", - "rand", -] - -[[package]] -name = "phf_macros" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "phf_shared" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pori" -version = "0.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a63d338dec139f56dacc692ca63ad35a6be6a797442479b55acd611d79e906" -dependencies = [ - "nom", -] - -[[package]] -name = "preset_env_base" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b30eab18be480c194938e433e269d5298a279f6410f02fbc73f3576a325c110" -dependencies = [ - "ahash 0.8.8", - "anyhow", - "browserslist-rs", - "dashmap", - "from_variant", - "once_cell", - "semver 1.0.21", - "serde", - "st-map", - "tracing", -] - -[[package]] -name = "proc-macro2" -version = "1.0.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "psm" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" -dependencies = [ - "cc", -] - -[[package]] -name = "ptr_meta" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "quote" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" - -[[package]] -name = "rayon" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "regex" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - -[[package]] -name = "relative-path" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e898588f33fdd5b9420719948f9f2a32c922a246964576f71ba7f24f80610fbc" - -[[package]] -name = "rend" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" -dependencies = [ - "bytecheck 0.6.11", -] - -[[package]] -name = "rkyv" -version = "0.7.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" -dependencies = [ - "bitvec", - "bytecheck 0.6.11", - "bytes", - "hashbrown 0.12.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", - "uuid", -] - -[[package]] -name = "rkyv_derive" -version = "0.7.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "rkyv_dyn" -version = "0.7.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7087f1bf1fdffcf7391cd0755df81c47f8a87fe863bab93f99d9f6bbf16b40b7" -dependencies = [ - "inventory", - "lazy_static", - "ptr_meta", - "rkyv", - "rkyv_dyn_derive", - "rkyv_typename", -] - -[[package]] -name = "rkyv_dyn_derive" -version = "0.7.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f21d9c9cfb6d952b4baf89f1ffcfaccd56e0f8c81510f5a7b04de2c034bad18" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "rkyv_typename" -version = "0.7.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f3b496694520c6001309c86ab52cf126d084778eb8a372b6bed1400f0562b8" -dependencies = [ - "rkyv_typename_derive", -] - -[[package]] -name = "rkyv_typename_derive" -version = "0.7.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05589f3fceeb5ad55f3a68b6ac56274feeb3c1b8215b4734d2562b78134a3551" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" -dependencies = [ - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.197" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.197" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "serde_json" -version = "1.0.115" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "simd-abstraction" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987" -dependencies = [ - "outref", -] - -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "smallvec" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e" - -[[package]] -name = "smartstring" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" -dependencies = [ - "autocfg", - "static_assertions", - "version_check", -] - -[[package]] -name = "sourcemap" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "208d40b9e8cad9f93613778ea295ed8f3c2b1824217c6cfc7219d3f6f45b96d4" -dependencies = [ - "base64-simd", - "bitvec", - "data-encoding", - "debugid", - "if_chain", - "rustc-hash", - "rustc_version", - "serde", - "serde_json", - "unicode-id-start", - "url", -] - -[[package]] -name = "st-map" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8a5c4e5cc839409346495370b2df67489cafd7fa83616d0547a9697a6a89a1" -dependencies = [ - "arrayvec", - "static-map-macro", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "stacker" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" -dependencies = [ - "cc", - "cfg-if", - "libc", - "psm", - "winapi", -] - -[[package]] -name = "static-map-macro" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf483ea7e0e3a03d1b91687895814425149ad77facd3e2b6839dde26da98454" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "string_enum" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e383308aebc257e7d7920224fa055c632478d92744eca77f99be8fa1545b90" -dependencies = [ - "proc-macro2", - "quote", - "swc_macros_common", - "syn 2.0.65", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "swc_atoms" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6567e4e67485b3e7662b486f1565bdae54bd5b9d6b16b2ba1a9babb1e42125" -dependencies = [ - "bytecheck 0.6.11", - "hstr", - "once_cell", - "rkyv", - "rustc-hash", - "serde", -] - -[[package]] -name = "swc_common" -version = "0.34.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9087befec6b63911f9d2f239e4f91c9b21589c169b86ed2d616944d23cf4a243" -dependencies = [ - "ast_node", - "better_scoped_tls", - "bytecheck 0.6.11", - "cfg-if", - "either", - "from_variant", - "new_debug_unreachable", - "num-bigint", - "once_cell", - "parking_lot", - "rkyv", - "rustc-hash", - "serde", - "siphasher", - "sourcemap", - "swc_atoms", - "swc_eq_ignore_macros", - "swc_visit", - "tracing", - "unicode-width", - "url", -] - -[[package]] -name = "swc_css_ast" -version = "0.141.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a5f28ff625a89de2a269bde3ed3b99be74bb9d3dc78dea6f3b071991b2cbf4" -dependencies = [ - "is-macro", - "rkyv", - "string_enum", - "swc_atoms", - "swc_common", -] - -[[package]] -name = "swc_css_prefixer" -version = "0.155.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9930655060121c32d829e13fe4fa11294c03e71eb84c22e039703c929dcdf7" -dependencies = [ - "once_cell", - "preset_env_base", - "serde", - "serde_json", - "swc_atoms", - "swc_common", - "swc_css_ast", - "swc_css_utils", - "swc_css_visit", -] - -[[package]] -name = "swc_css_utils" -version = "0.138.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b135df778449825f38d54664bb179c839b3285f9a553ec10dd3cc3eafb751599" -dependencies = [ - "once_cell", - "serde", - "serde_json", - "swc_atoms", - "swc_common", - "swc_css_ast", - "swc_css_visit", -] - -[[package]] -name = "swc_css_visit" -version = "0.140.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c97dceaa18c8ae7f5a4c991e15efc5c333e5880b58ee6d61e42fd1365748ff05" -dependencies = [ - "serde", - "swc_atoms", - "swc_common", - "swc_css_ast", - "swc_visit", -] - -[[package]] -name = "swc_ecma_ast" -version = "0.115.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be1306930c235435a892104c00c2b5e16231043c085d5a10bd3e7537b15659b" -dependencies = [ - "bitflags 2.5.0", - "bytecheck 0.6.11", - "is-macro", - "num-bigint", - "phf", - "rkyv", - "scoped-tls", - "serde", - "string_enum", - "swc_atoms", - "swc_common", - "unicode-id-start", -] - -[[package]] -name = "swc_ecma_parser" -version = "0.146.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e0c2e85f12c63b85c805e923079b04d1fb3e25edd069d638eed5f2098de74" -dependencies = [ - "either", - "new_debug_unreachable", - "num-bigint", - "num-traits", - "phf", - "serde", - "smallvec", - "smartstring", - "stacker", - "swc_atoms", - "swc_common", - "swc_ecma_ast", - "tracing", - "typed-arena", -] - -[[package]] -name = "swc_eq_ignore_macros" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "695a1d8b461033d32429b5befbf0ad4d7a2c4d6ba9cd5ba4e0645c615839e8e4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "swc_html_ast" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b909aca7c9cbd630a461d4a0a1d476ac13704dc515d2a79264c93d3280b02d23" -dependencies = [ - "is-macro", - "rkyv", - "string_enum", - "swc_atoms", - "swc_common", -] - -[[package]] -name = "swc_macros_common" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91745f3561057493d2da768437c427c0e979dff7396507ae02f16c981c4a8466" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "swc_visit" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043d11fe683dcb934583ead49405c0896a5af5face522e4682c16971ef7871b9" -dependencies = [ - "either", - "swc_visit_macros", -] - -[[package]] -name = "swc_visit_macros" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae9ef18ff8daffa999f729db056d2821cd2f790f3a11e46422d19f46bb193e7" -dependencies = [ - "Inflector", - "proc-macro2", - "quote", - "swc_macros_common", - "syn 2.0.65", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tardar" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900c942f83b6a8b9998cc8f74ad3ffa24b7ff3c4279ea1c1c52d95dced9f3516" -dependencies = [ - "miette", - "vec1", -] - -[[package]] -name = "thiserror" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "thread-id" -version = "4.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ec81c46e9eb50deaa257be2f148adf052d1fb7701cfd55ccfab2525280b70b" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - -[[package]] -name = "triomphe" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" -dependencies = [ - "serde", - "stable_deref_trait", -] - -[[package]] -name = "typed-arena" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - -[[package]] -name = "unicode-id-start" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02aebfa694eccbbbffdd92922c7de136b9fe764396d2f10e21bce1681477cfc1" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-width" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "uuid" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" - -[[package]] -name = "vec1" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab68b56840f69efb0fefbe3ab6661499217ffdc58e2eef7c3f6f69835386322" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "walkdir" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.65", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" - -[[package]] -name = "wax" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d12a78aa0bab22d2f26ed1a96df7ab58e8a93506a3e20adb47c51a93b4e1357" -dependencies = [ - "const_format", - "itertools 0.11.0", - "miette", - "nom", - "pori", - "regex", - "tardar", - "thiserror", - "walkdir", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] diff --git a/packages/react-router/playground/index.js b/packages/react-router/playground/index.js deleted file mode 100644 index 065718f..0000000 --- a/packages/react-router/playground/index.js +++ /dev/null @@ -1 +0,0 @@ -console.log("lib") diff --git a/packages/react-router/rust-toolchain.toml b/packages/react-router/rust-toolchain.toml deleted file mode 100644 index 0eb96b5..0000000 --- a/packages/react-router/rust-toolchain.toml +++ /dev/null @@ -1,3 +0,0 @@ -[toolchain] -channel = "nightly-2024-04-16" -components = ["clippy", "rustfmt", "rust-src", "rustc-dev"] diff --git a/packages/react-router/rustfmt.toml b/packages/react-router/rustfmt.toml deleted file mode 100644 index cab5731..0000000 --- a/packages/react-router/rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -tab_spaces = 2 -edition = "2021" diff --git a/packages/react-router/src/lib.rs b/packages/react-router/src/lib.rs index cc98b96..e89266f 100644 --- a/packages/react-router/src/lib.rs +++ b/packages/react-router/src/lib.rs @@ -12,7 +12,6 @@ use farmfe_core::{ }; use farmfe_macro_plugin::farm_plugin; use farmfe_toolkit::pluginutils::normalize_path::normalize_path; -use notify::{RecommendedWatcher, RecursiveMode, Result, Watcher}; use parser::remix_parser::{build_routes_virtual_code, get_route_files, parse}; use serde::{Deserialize, Serialize}; @@ -24,8 +23,6 @@ enum Mode { Next, } -// 监听 文件夹 -> deps {} -> watcher -> deps - #[derive(Deserialize, Serialize, Clone, Debug)] #[serde(rename_all = "camelCase")] pub struct Options { @@ -67,15 +64,6 @@ impl Plugin for FarmPluginReactRouter { hook_context: &farmfe_core::plugin::PluginHookContext, ) -> farmfe_core::error::Result> { if param.source == REACT_VIRTUAL_ROUTER { - let mut watcher = notify::recommended_watcher(|res| match res { - Ok(event) => println!("event: {:?}", event), - Err(e) => println!("watch error: {:?}", e), - }) - .unwrap(); - let routes_path = self.options.routes_path.clone().unwrap(); - println!("watching: {:?}", routes_path); - let routes_path = Path::new(&routes_path); - let _ = watcher.watch(routes_path, RecursiveMode::Recursive); return Ok(Some(PluginResolveHookResult { resolved_path: REACT_VIRTUAL_ROUTER.to_string(), side_effects: false, diff --git a/packages/strip/rustfmt.toml b/packages/strip/rustfmt.toml deleted file mode 100644 index cab5731..0000000 --- a/packages/strip/rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -tab_spaces = 2 -edition = "2021" diff --git a/packages/url/rustfmt.toml b/packages/url/rustfmt.toml deleted file mode 100644 index cab5731..0000000 --- a/packages/url/rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -tab_spaces = 2 -edition = "2021" diff --git a/packages/virtual/rustfmt.toml b/packages/virtual/rustfmt.toml deleted file mode 100644 index cab5731..0000000 --- a/packages/virtual/rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -tab_spaces = 2 -edition = "2021" diff --git a/packages/yaml/rustfmt.toml b/packages/yaml/rustfmt.toml deleted file mode 100644 index cab5731..0000000 --- a/packages/yaml/rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -tab_spaces = 2 -edition = "2021" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82af36e..ec34fe3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,6 +31,12 @@ importers: specifier: latest version: 0.1.1 + packages/react-router: + devDependencies: + '@farmfe/plugin-tools': + specifier: latest + version: 0.1.1 + packages/strip: {} packages/url: {} diff --git a/rustfmt.toml b/rustfmt.toml index 2bc17ab..cab5731 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,2 +1,2 @@ -edition = "2021" tab_spaces = 2 +edition = "2021" From 5f4fb1af4b21de6c2df31c7431cf569b0d9f14e4 Mon Sep 17 00:00:00 2001 From: CCherry07 <2405693142@qq.com> Date: Sat, 31 Aug 2024 16:58:35 +0800 Subject: [PATCH 10/10] feat: react router --- packages/react-router/playground/src/index.tsx | 2 +- packages/react-router/src/lib.rs | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/packages/react-router/playground/src/index.tsx b/packages/react-router/playground/src/index.tsx index a6e64a0..cf5d544 100644 --- a/packages/react-router/playground/src/index.tsx +++ b/packages/react-router/playground/src/index.tsx @@ -2,7 +2,7 @@ import React, { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import './index.css' // @ts-ignore -import { routes } from "virtual:__REACT_VIRTUAL_ROUTER__"; +import { routes } from "virtual:react-routes"; import { createBrowserRouter, RouterProvider } from 'react-router-dom'; console.log(routes); diff --git a/packages/react-router/src/lib.rs b/packages/react-router/src/lib.rs index e89266f..479ac2c 100644 --- a/packages/react-router/src/lib.rs +++ b/packages/react-router/src/lib.rs @@ -1,9 +1,6 @@ #![deny(clippy::all)] mod parser; - -use std::path::Path; - use farmfe_core::{ config::Config, module::ModuleType, @@ -28,7 +25,6 @@ enum Mode { pub struct Options { mode: Option, routes_path: Option, - emit_file: Option, } #[farm_plugin] @@ -44,7 +40,6 @@ impl FarmPluginReactRouter { let options = Options { mode: Some(options.mode.unwrap_or(Mode::Remix)), routes_path: Some(options.routes_path.unwrap_or(default_routes_path)), - emit_file: options.emit_file, }; Self { options } } @@ -60,10 +55,10 @@ impl Plugin for FarmPluginReactRouter { fn resolve( &self, param: &farmfe_core::plugin::PluginResolveHookParam, - context: &std::sync::Arc, - hook_context: &farmfe_core::plugin::PluginHookContext, + _context: &std::sync::Arc, + _hook_context: &farmfe_core::plugin::PluginHookContext, ) -> farmfe_core::error::Result> { - if param.source == REACT_VIRTUAL_ROUTER { + if param.source == "virtual:react-routes" { return Ok(Some(PluginResolveHookResult { resolved_path: REACT_VIRTUAL_ROUTER.to_string(), side_effects: false,