diff --git a/.gitignore b/.gitignore
index 5b9e049..0e50763 100644
--- a/.gitignore
+++ b/.gitignore
@@ -222,4 +222,7 @@ $RECYCLE.BIN/
# Temp directory
/tmp
-# End of https://www.toptal.com/developers/gitignore/api/windows,macos,node,visualstudiocode
\ No newline at end of file
+# End of https://www.toptal.com/developers/gitignore/api/windows,macos,node,visualstudiocode
+
+# Mendix Widget schema file
+custom_widget.xsd
\ No newline at end of file
diff --git a/README.md b/README.md
index 2ea1bdb..36028a8 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
# hyper-pwt
+
+
A faster, more modern, superior alternative for [Mendix PWT](https://github.com/mendix/widgets-tools).
## How to use?
@@ -29,6 +31,49 @@ Second, replace pluggable-widgets-tools to hyper-pwt in widget's package.json.
## Custom build configurations
+### Web
+
+Create vite.config.mjs on your pwt root directory.
+
+```javascript
+import { definePWTConfig } from '@repixelcorp/hyper-pwt';
+
+export default definePWTConfig(() => {
+ return {
+ // Your custom configuration in here.
+ };
+});
+```
+
+hyper-pwt uses the [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc) plugin. The settings for this plugin can be changed as follows.
+
+```javascript
+import { definePWTConfig } from '@repixelcorp/hyper-pwt';
+
+export default definePWTConfig(() => {
+ return {
+ reactPluginOptions: {
+ tsDecorators: true,
+ }
+ };
+});
+```
+
+definePWTConfig also supports asynchronous mode. It can be used as follows.
+
+```javascript
+import { definePWTConfig } from '@repixelcorp/hyper-pwt';
+
+export default definePWTConfig(async () => {
+ const promise = await somethingPromise();
+
+ return {
+ };
+});
+```
+
+### Native
+
TODO
## Performance compare with Mendix PWT
@@ -70,3 +115,5 @@ Please refer to the [LICENSE](./LICENSE).
## Disclaimers
Neither Repixel Co., Ltd., nor the project maintainers or contributors, are responsible for any problems arising from the use of this software. The user is entirely responsible.
+
+
diff --git a/package.json b/package.json
index 06a74f5..756a54b 100644
--- a/package.json
+++ b/package.json
@@ -1,48 +1,65 @@
-{
- "name": "@repixelcorp/hyper-pwt",
- "version": "0.1.0",
- "description": "A faster, more modern, superior alternative for Mendix PWT.",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/repixelcorp/hyper-pwt.git"
- },
- "scripts": {
- "build": "rslib build",
- "watch": "rslib build --watch",
- "start": "pnpm build && node ./dist/index.js",
- "link": "pnpm build && npm link --force"
- },
- "bin": {
- "hyper-pwt": "dist/index.js"
- },
- "keywords": [
- "mendix",
- "pwt",
- "mendix-pwt",
- "pluggable-widgets-tools"
- ],
- "author": "Repixel Co, Ltd.",
- "license": "MIT",
- "packageManager": "pnpm@10.15.0",
- "devDependencies": {
- "@rslib/core": "0.12.2",
- "@types/node": "22.17.2",
- "type-fest": "4.41.0"
- },
- "dependencies": {
- "@vitejs/plugin-react-swc": "4.0.1",
- "chalk": "5.6.0",
- "commander": "14.0.0",
- "vite": "7.1.3",
- "zip-a-folder": "3.1.9"
- },
- "files": [
- "dist/**/*",
- "package.json",
- "LICENSE"
- ],
- "publishConfig": {
- "access": "public",
- "registry": "https://registry.npmjs.org"
- }
-}
+{
+ "name": "@repixelcorp/hyper-pwt",
+ "version": "0.2.0",
+ "description": "A faster, more modern, superior alternative for Mendix PWT.",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/repixelcorp/hyper-pwt.git"
+ },
+ "scripts": {
+ "build": "rslib build",
+ "watch": "rslib build --watch",
+ "start": "pnpm build && node ./dist/cli.js",
+ "package": "pnpm build && pnpm pack",
+ "prepare": "node ./tools/copy-widget-schema.js"
+ },
+ "main": "dist/index.cjs",
+ "module": "dist/index.mjs",
+ "types": "dist/index.d.ts",
+ "exports": {
+ ".": {
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.cjs",
+ "types": "./dist/index.d.ts"
+ }
+ },
+ "bin": {
+ "hyper-pwt": "dist/cli.js"
+ },
+ "keywords": [
+ "mendix",
+ "pwt",
+ "mendix-pwt",
+ "pluggable-widgets-tools"
+ ],
+ "author": "Repixel Co, Ltd.",
+ "license": "MIT",
+ "packageManager": "pnpm@10.15.0",
+ "devDependencies": {
+ "@rslib/core": "0.12.2",
+ "@types/node": "22.17.2",
+ "esbuild": "0.25.9",
+ "type-fest": "4.41.0",
+ "typescript": "5.9.2"
+ },
+ "dependencies": {
+ "@vitejs/plugin-react-swc": "4.0.1",
+ "chalk": "5.6.0",
+ "commander": "14.0.0",
+ "fast-xml-parser": "5.2.5",
+ "mendix": "10.24.77222",
+ "vite": "7.1.3",
+ "zip-a-folder": "3.1.9"
+ },
+ "files": [
+ "dist/**/*",
+ "package.json",
+ "LICENSE",
+ "src/configurations/hotReload/**/*",
+ "custom_widget.xsd"
+ ],
+ "publishConfig": {
+ "access": "public",
+ "registry": "https://registry.npmjs.org"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0a42579..bf4b390 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,1843 +1,1916 @@
-lockfileVersion: '9.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-importers:
-
- .:
- dependencies:
- '@vitejs/plugin-react-swc':
- specifier: 4.0.1
- version: 4.0.1(@swc/helpers@0.5.17)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1))
- chalk:
- specifier: 5.6.0
- version: 5.6.0
- commander:
- specifier: 14.0.0
- version: 14.0.0
- vite:
- specifier: 7.1.3
- version: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)
- zip-a-folder:
- specifier: 3.1.9
- version: 3.1.9
- devDependencies:
- '@rslib/core':
- specifier: 0.12.2
- version: 0.12.2
- '@types/node':
- specifier: 22.17.2
- version: 22.17.2
- type-fest:
- specifier: 4.41.0
- version: 4.41.0
-
-packages:
-
- '@ast-grep/napi-darwin-arm64@0.37.0':
- resolution: {integrity: sha512-QAiIiaAbLvMEg/yBbyKn+p1gX2/FuaC0SMf7D7capm/oG4xGMzdeaQIcSosF4TCxxV+hIH4Bz9e4/u7w6Bnk3Q==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
-
- '@ast-grep/napi-darwin-x64@0.37.0':
- resolution: {integrity: sha512-zvcvdgekd4ySV3zUbUp8HF5nk5zqwiMXTuVzTUdl/w08O7JjM6XPOIVT+d2o/MqwM9rsXdzdergY5oY2RdhSPA==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [darwin]
-
- '@ast-grep/napi-linux-arm64-gnu@0.37.0':
- resolution: {integrity: sha512-L7Sj0lXy8X+BqSMgr1LB8cCoWk0rericdeu+dC8/c8zpsav5Oo2IQKY1PmiZ7H8IHoFBbURLf8iklY9wsD+cyA==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@ast-grep/napi-linux-arm64-musl@0.37.0':
- resolution: {integrity: sha512-LF9sAvYy6es/OdyJDO3RwkX3I82Vkfsng1sqUBcoWC1jVb1wX5YVzHtpQox9JrEhGl+bNp7FYxB4Qba9OdA5GA==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@ast-grep/napi-linux-x64-gnu@0.37.0':
- resolution: {integrity: sha512-TViz5/klqre6aSmJzswEIjApnGjJzstG/SE8VDWsrftMBMYt2PTu3MeluZVwzSqDao8doT/P+6U11dU05UOgxw==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@ast-grep/napi-linux-x64-musl@0.37.0':
- resolution: {integrity: sha512-/BcCH33S9E3ovOAEoxYngUNXgb+JLg991sdyiNP2bSoYd30a9RHrG7CYwW6fMgua3ijQ474eV6cq9yZO1bCpXg==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@ast-grep/napi-win32-arm64-msvc@0.37.0':
- resolution: {integrity: sha512-TjQA4cFoIEW2bgjLkaL9yqT4XWuuLa5MCNd0VCDhGRDMNQ9+rhwi9eLOWRaap3xzT7g+nlbcEHL3AkVCD2+b3A==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [win32]
-
- '@ast-grep/napi-win32-ia32-msvc@0.37.0':
- resolution: {integrity: sha512-uNmVka8fJCdYsyOlF9aZqQMLTatEYBynjChVTzUfFMDfmZ0bihs/YTqJVbkSm8TZM7CUX82apvn50z/dX5iWRA==}
- engines: {node: '>= 10'}
- cpu: [ia32]
- os: [win32]
-
- '@ast-grep/napi-win32-x64-msvc@0.37.0':
- resolution: {integrity: sha512-vCiFOT3hSCQuHHfZ933GAwnPzmL0G04JxQEsBRfqONywyT8bSdDc/ECpAfr3S9VcS4JZ9/F6tkePKW/Om2Dq2g==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
-
- '@ast-grep/napi@0.37.0':
- resolution: {integrity: sha512-Hb4o6h1Pf6yRUAX07DR4JVY7dmQw+RVQMW5/m55GoiAT/VRoKCWBtIUPPOnqDVhbx1Cjfil9b6EDrgJsUAujEQ==}
- engines: {node: '>= 10'}
-
- '@emnapi/core@1.4.5':
- resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==}
-
- '@emnapi/runtime@1.4.5':
- resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==}
-
- '@emnapi/wasi-threads@1.0.4':
- resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==}
-
- '@esbuild/aix-ppc64@0.25.9':
- resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/android-arm64@0.25.9':
- resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.25.9':
- resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.25.9':
- resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/darwin-arm64@0.25.9':
- resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.25.9':
- resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/freebsd-arm64@0.25.9':
- resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.25.9':
- resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/linux-arm64@0.25.9':
- resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm@0.25.9':
- resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-ia32@0.25.9':
- resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.25.9':
- resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.25.9':
- resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.25.9':
- resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.25.9':
- resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-s390x@0.25.9':
- resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.25.9':
- resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-arm64@0.25.9':
- resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.25.9':
- resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/openbsd-arm64@0.25.9':
- resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
- '@esbuild/openbsd-x64@0.25.9':
- resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/openharmony-arm64@0.25.9':
- resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
-
- '@esbuild/sunos-x64@0.25.9':
- resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/win32-arm64@0.25.9':
- resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-ia32@0.25.9':
- resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-x64@0.25.9':
- resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
- '@isaacs/balanced-match@4.0.1':
- resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
- engines: {node: 20 || >=22}
-
- '@isaacs/brace-expansion@5.0.0':
- resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
- engines: {node: 20 || >=22}
-
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
-
- '@jridgewell/sourcemap-codec@1.5.5':
- resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
-
- '@module-federation/error-codes@0.18.0':
- resolution: {integrity: sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ==}
-
- '@module-federation/runtime-core@0.18.0':
- resolution: {integrity: sha512-ZyYhrDyVAhUzriOsVfgL6vwd+5ebYm595Y13KeMf6TKDRoUHBMTLGQ8WM4TDj8JNsy7LigncK8C03fn97of0QQ==}
-
- '@module-federation/runtime-tools@0.18.0':
- resolution: {integrity: sha512-fSga9o4t1UfXNV/Kh6qFvRyZpPp3EHSPRISNeyT8ZoTpzDNiYzhtw0BPUSSD8m6C6XQh2s/11rI4g80UY+d+hA==}
-
- '@module-federation/runtime@0.18.0':
- resolution: {integrity: sha512-+C4YtoSztM7nHwNyZl6dQKGUVJdsPrUdaf3HIKReg/GQbrt9uvOlUWo2NXMZ8vDAnf/QRrpSYAwXHmWDn9Obaw==}
-
- '@module-federation/sdk@0.18.0':
- resolution: {integrity: sha512-Lo/Feq73tO2unjmpRfyyoUkTVoejhItXOk/h5C+4cistnHbTV8XHrW/13fD5e1Iu60heVdAhhelJd6F898Ve9A==}
-
- '@module-federation/webpack-bundler-runtime@0.18.0':
- resolution: {integrity: sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ==}
-
- '@napi-rs/wasm-runtime@1.0.3':
- resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==}
-
- '@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
-
- '@rolldown/pluginutils@1.0.0-beta.32':
- resolution: {integrity: sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==}
-
- '@rollup/rollup-android-arm-eabi@4.46.4':
- resolution: {integrity: sha512-B2wfzCJ+ps/OBzRjeds7DlJumCU3rXMxJJS1vzURyj7+KBHGONm7c9q1TfdBl4vCuNMkDvARn3PBl2wZzuR5mw==}
- cpu: [arm]
- os: [android]
-
- '@rollup/rollup-android-arm64@4.46.4':
- resolution: {integrity: sha512-FGJYXvYdn8Bs6lAlBZYT5n+4x0ciEp4cmttsvKAZc/c8/JiPaQK8u0c/86vKX8lA7OY/+37lIQSe0YoAImvBAA==}
- cpu: [arm64]
- os: [android]
-
- '@rollup/rollup-darwin-arm64@4.46.4':
- resolution: {integrity: sha512-/9qwE/BM7ATw/W/OFEMTm3dmywbJyLQb4f4v5nmOjgYxPIGpw7HaxRi6LnD4Pjn/q7k55FGeHe1/OD02w63apA==}
- cpu: [arm64]
- os: [darwin]
-
- '@rollup/rollup-darwin-x64@4.46.4':
- resolution: {integrity: sha512-QkWfNbeRuzFnv2d0aPlrzcA3Ebq2mE8kX/5Pl7VdRShbPBjSnom7dbT8E3Jmhxo2RL784hyqGvR5KHavCJQciw==}
- cpu: [x64]
- os: [darwin]
-
- '@rollup/rollup-freebsd-arm64@4.46.4':
- resolution: {integrity: sha512-+ToyOMYnSfV8D+ckxO6NthPln/PDNp1P6INcNypfZ7muLmEvPKXqduUiD8DlJpMMT8LxHcE5W0dK9kXfJke9Zw==}
- cpu: [arm64]
- os: [freebsd]
-
- '@rollup/rollup-freebsd-x64@4.46.4':
- resolution: {integrity: sha512-cGT6ey/W+sje6zywbLiqmkfkO210FgRz7tepWAzzEVgQU8Hn91JJmQWNqs55IuglG8sJdzk7XfNgmGRtcYlo1w==}
- cpu: [x64]
- os: [freebsd]
-
- '@rollup/rollup-linux-arm-gnueabihf@4.46.4':
- resolution: {integrity: sha512-9fhTJyOb275w5RofPSl8lpr4jFowd+H4oQKJ9XTYzD1JWgxdZKE8bA6d4npuiMemkecQOcigX01FNZNCYnQBdA==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm-musleabihf@4.46.4':
- resolution: {integrity: sha512-+6kCIM5Zjvz2HwPl/udgVs07tPMIp1VU2Y0c72ezjOvSvEfAIWsUgpcSDvnC7g9NrjYR6X9bZT92mZZ90TfvXw==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-gnu@4.46.4':
- resolution: {integrity: sha512-SWuXdnsayCZL4lXoo6jn0yyAj7TTjWE4NwDVt9s7cmu6poMhtiras5c8h6Ih6Y0Zk6Z+8t/mLumvpdSPTWub2Q==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-musl@4.46.4':
- resolution: {integrity: sha512-vDknMDqtMhrrroa5kyX6tuC0aRZZlQ+ipDfbXd2YGz5HeV2t8HOl/FDAd2ynhs7Ki5VooWiiZcCtxiZ4IjqZwQ==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-loongarch64-gnu@4.46.4':
- resolution: {integrity: sha512-mCBkjRZWhvjtl/x+Bd4fQkWZT8canStKDxGrHlBiTnZmJnWygGcvBylzLVCZXka4dco5ymkWhZlLwKCGFF4ivw==}
- cpu: [loong64]
- os: [linux]
-
- '@rollup/rollup-linux-ppc64-gnu@4.46.4':
- resolution: {integrity: sha512-YMdz2phOTFF+Z66dQfGf0gmeDSi5DJzY5bpZyeg9CPBkV9QDzJ1yFRlmi/j7WWRf3hYIWrOaJj5jsfwgc8GTHQ==}
- cpu: [ppc64]
- os: [linux]
-
- '@rollup/rollup-linux-riscv64-gnu@4.46.4':
- resolution: {integrity: sha512-r0WKLSfFAK8ucG024v2yiLSJMedoWvk8yWqfNICX28NHDGeu3F/wBf8KG6mclghx4FsLePxJr/9N8rIj1PtCnw==}
- cpu: [riscv64]
- os: [linux]
-
- '@rollup/rollup-linux-riscv64-musl@4.46.4':
- resolution: {integrity: sha512-IaizpPP2UQU3MNyPH1u0Xxbm73D+4OupL0bjo4Hm0496e2wg3zuvoAIhubkD1NGy9fXILEExPQy87mweujEatA==}
- cpu: [riscv64]
- os: [linux]
-
- '@rollup/rollup-linux-s390x-gnu@4.46.4':
- resolution: {integrity: sha512-aCM29orANR0a8wk896p6UEgIfupReupnmISz6SUwMIwTGaTI8MuKdE0OD2LvEg8ondDyZdMvnaN3bW4nFbATPA==}
- cpu: [s390x]
- os: [linux]
-
- '@rollup/rollup-linux-x64-gnu@4.46.4':
- resolution: {integrity: sha512-0Xj1vZE3cbr/wda8d/m+UeuSL+TDpuozzdD4QaSzu/xSOMK0Su5RhIkF7KVHFQsobemUNHPLEcYllL7ZTCP/Cg==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-linux-x64-musl@4.46.4':
- resolution: {integrity: sha512-kM/orjpolfA5yxsx84kI6bnK47AAZuWxglGKcNmokw2yy9i5eHY5UAjcX45jemTJnfHAWo3/hOoRqEeeTdL5hw==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-win32-arm64-msvc@4.46.4':
- resolution: {integrity: sha512-cNLH4psMEsWKILW0isbpQA2OvjXLbKvnkcJFmqAptPQbtLrobiapBJVj6RoIvg6UXVp5w0wnIfd/Q56cNpF+Ew==}
- cpu: [arm64]
- os: [win32]
-
- '@rollup/rollup-win32-ia32-msvc@4.46.4':
- resolution: {integrity: sha512-OiEa5lRhiANpv4SfwYVgQ3opYWi/QmPDC5ve21m8G9pf6ZO+aX1g2EEF1/IFaM1xPSP7mK0msTRXlPs6mIagkg==}
- cpu: [ia32]
- os: [win32]
-
- '@rollup/rollup-win32-x64-msvc@4.46.4':
- resolution: {integrity: sha512-IKL9mewGZ5UuuX4NQlwOmxPyqielvkAPUS2s1cl6yWjjQvyN3h5JTdVFGD5Jr5xMjRC8setOfGQDVgX8V+dkjg==}
- cpu: [x64]
- os: [win32]
-
- '@rsbuild/core@1.5.0-beta.4':
- resolution: {integrity: sha512-h1jqpjZunalsdxTcJCbY8DovLu6F4MQgsYdZyxDjUp0xuggQayi1tpcE6MhLs3WWa077g+LZ2Am4gKt/pl/W9Q==}
- engines: {node: '>=18.12.0'}
- hasBin: true
-
- '@rslib/core@0.12.2':
- resolution: {integrity: sha512-5DPVxmzzyoQlLqSt8Y/8kbYNtbJ0AEVUXd1hDFQ0Iq5Eb5XA4363PDeLdfeKJ1h93YqT7M9WZ3Cyhvosx1EimQ==}
- engines: {node: '>=18.12.0'}
- hasBin: true
- peerDependencies:
- '@microsoft/api-extractor': ^7
- typescript: ^5
- peerDependenciesMeta:
- '@microsoft/api-extractor':
- optional: true
- typescript:
- optional: true
-
- '@rspack/binding-darwin-arm64@1.5.0-beta.1':
- resolution: {integrity: sha512-aXSbz9Bo480xNDK6v64SZ19I/bmMuxaOuex6V9q0S+v3qx/ZsUWL+5aUd71scq7EfAb3KkvQFsYACpt5PMZ9DQ==}
- cpu: [arm64]
- os: [darwin]
-
- '@rspack/binding-darwin-x64@1.5.0-beta.1':
- resolution: {integrity: sha512-addeCT0bXtfOfvJZdVuHWBl20Cd8RmweOX03OiEH4AmQc9EgUEP/oCGpOmakBXxUCl3x/RnlrXx2nD1uDyuyLA==}
- cpu: [x64]
- os: [darwin]
-
- '@rspack/binding-linux-arm64-gnu@1.5.0-beta.1':
- resolution: {integrity: sha512-fYgOfSsA0J0rUA40ZEexrMRKyIVAUo4m0KShTm6yVaAzQHWVZ0xjjcoLFNxCVE7EvAPI7wl9fDOyr7Y8EylVfQ==}
- cpu: [arm64]
- os: [linux]
-
- '@rspack/binding-linux-arm64-musl@1.5.0-beta.1':
- resolution: {integrity: sha512-wWlOzsoJU2HJyPxoCDScW4zt3+5WO6NI8B7jSmhVA9dfmvCYUKktt/YZpskcgMsvCgtzXTE62wDc+VTQ5ucp9A==}
- cpu: [arm64]
- os: [linux]
-
- '@rspack/binding-linux-x64-gnu@1.5.0-beta.1':
- resolution: {integrity: sha512-OlgQIQLDLDDXvbUYBEfZmofO3uTDi0rGfIr58PXz/wTF87KdwqlU0HyjIeaeDUaQlV+lNXNysuCwvI0hl/o2tw==}
- cpu: [x64]
- os: [linux]
-
- '@rspack/binding-linux-x64-musl@1.5.0-beta.1':
- resolution: {integrity: sha512-LkQSyfyf5Jy0UGD0tvm2Gz+0VjboawtRrYd+qYHE0Pm4h7tTJWyqnh02LRTROxOl3GrssC1VGn6J8XYTxOAWug==}
- cpu: [x64]
- os: [linux]
-
- '@rspack/binding-wasm32-wasi@1.5.0-beta.1':
- resolution: {integrity: sha512-ysnuVnqC9byoYfoAi/TsV0U5ZUxU0snnVPa/SvQEO6ew3J2GaNDq1vS1zWo0SOA4eLmwkop0/UcH8n3VXOy7NA==}
- cpu: [wasm32]
-
- '@rspack/binding-win32-arm64-msvc@1.5.0-beta.1':
- resolution: {integrity: sha512-vcMXybMchQomBODyi6aIMCur8/oQktw+iVv0dH3hiiWy0v2g8xS9VLMjWXfGZAhonhRe7YWTP12dxCPbWmQyZw==}
- cpu: [arm64]
- os: [win32]
-
- '@rspack/binding-win32-ia32-msvc@1.5.0-beta.1':
- resolution: {integrity: sha512-fCj904xjc5iKOdUS0VLUE/LbAQZWlub/TF0ZKhzq2UK8WWwrfhA5U8ZHximU0A0LVDoMVZCM5M12rO12P0uHKw==}
- cpu: [ia32]
- os: [win32]
-
- '@rspack/binding-win32-x64-msvc@1.5.0-beta.1':
- resolution: {integrity: sha512-iWCoFMwP2aUea1mIp2+mTE7IKj6wp9hxMuZgOcEGWQidE7pUss5/Zp3wrOSWnnyovIeQLmK9wsQEA/W3i3MiAQ==}
- cpu: [x64]
- os: [win32]
-
- '@rspack/binding@1.5.0-beta.1':
- resolution: {integrity: sha512-qZ+cxvsNvXBOPX0NEP+KfxQlJI7TDZR2XLS8Jl+zHl2kgulEOBWsBa7Q1Dcw73YQgz2owxP3OWl3f8LWXnnC1Q==}
-
- '@rspack/core@1.5.0-beta.1':
- resolution: {integrity: sha512-o3yQreNKldm0k96wPMpXBI9p0B03LpeK3XyV4vhk24RfLIa2p6C2LPF4xn6U2M28CFQkSbeu1vwlMHnfW4xHNg==}
- engines: {node: '>=18.12.0'}
- peerDependencies:
- '@swc/helpers': '>=0.5.1'
- peerDependenciesMeta:
- '@swc/helpers':
- optional: true
-
- '@rspack/lite-tapable@1.0.1':
- resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==}
- engines: {node: '>=16.0.0'}
-
- '@swc/core-darwin-arm64@1.13.4':
- resolution: {integrity: sha512-CGbTu9dGBwgklUj+NAQAYyPjBuoHaNRWK4QXJRv1QNIkhtE27aY7QA9uEON14SODxsio3t8+Pjjl2Mzx1Pxf+g==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [darwin]
-
- '@swc/core-darwin-x64@1.13.4':
- resolution: {integrity: sha512-qLFwYmLrqHNCf+JO9YLJT6IP/f9LfbXILTaqyfluFLW1GCfJyvUrSt3CWaL2lwwyT1EbBh6BVaAAecXiJIo3vg==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [darwin]
-
- '@swc/core-linux-arm-gnueabihf@1.13.4':
- resolution: {integrity: sha512-y7SeNIA9em3+smNMpr781idKuNwJNAqewiotv+pIR5FpXdXXNjHWW+jORbqQYd61k6YirA5WQv+Af4UzqEX17g==}
- engines: {node: '>=10'}
- cpu: [arm]
- os: [linux]
-
- '@swc/core-linux-arm64-gnu@1.13.4':
- resolution: {integrity: sha512-u0c51VdzRmXaphLgghY9+B2Frzler6nIv+J788nqIh6I0ah3MmMW8LTJKZfdaJa3oFxzGNKXsJiaU2OFexNkug==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux]
-
- '@swc/core-linux-arm64-musl@1.13.4':
- resolution: {integrity: sha512-Z92GJ98x8yQHn4I/NPqwAQyHNkkMslrccNVgFcnY1msrb6iGSw5uFg2H2YpvQ5u2/Yt6CRpLIUVVh8SGg1+gFA==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux]
-
- '@swc/core-linux-x64-gnu@1.13.4':
- resolution: {integrity: sha512-rSUcxgpFF0L8Fk1CbUf946XCX1CRp6eaHfKqplqFNWCHv8HyqAtSFvgCHhT+bXru6Ca/p3sLC775SUeSWhsJ9w==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux]
-
- '@swc/core-linux-x64-musl@1.13.4':
- resolution: {integrity: sha512-qY77eFUvmdXNSmTW+I1fsz4enDuB0I2fE7gy6l9O4koSfjcCxkXw2X8x0lmKLm3FRiINS1XvZSg2G+q4NNQCRQ==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux]
-
- '@swc/core-win32-arm64-msvc@1.13.4':
- resolution: {integrity: sha512-xjPeDrOf6elCokxuyxwoskM00JJFQMTT2hTQZE24okjG3JiXzSFV+TmzYSp+LWNxPpnufnUUy/9Ee8+AcpslGw==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [win32]
-
- '@swc/core-win32-ia32-msvc@1.13.4':
- resolution: {integrity: sha512-Ta+Bblc9tE9X9vQlpa3r3+mVnHYdKn09QsZ6qQHvuXGKWSS99DiyxKTYX2vxwMuoTObR0BHvnhNbaGZSV1VwNA==}
- engines: {node: '>=10'}
- cpu: [ia32]
- os: [win32]
-
- '@swc/core-win32-x64-msvc@1.13.4':
- resolution: {integrity: sha512-pHnb4QwGiuWs4Z9ePSgJ48HP3NZIno6l75SB8YLCiPVDiLhvCLKEjz/caPRsFsmet9BEP8e3bAf2MV8MXgaTSg==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [win32]
-
- '@swc/core@1.13.4':
- resolution: {integrity: sha512-bCq2GCuKV16DSOOEdaRqHMm1Ok4YEoLoNdgdzp8BS/Hxxr/0NVCHBUgRLLRy/TlJGv20Idx+djd5FIDvsnqMaw==}
- engines: {node: '>=10'}
- peerDependencies:
- '@swc/helpers': '>=0.5.17'
- peerDependenciesMeta:
- '@swc/helpers':
- optional: true
-
- '@swc/counter@0.1.3':
- resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
-
- '@swc/helpers@0.5.17':
- resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
-
- '@swc/types@0.1.24':
- resolution: {integrity: sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==}
-
- '@tybys/wasm-util@0.10.0':
- resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
-
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
- '@types/node@22.17.2':
- resolution: {integrity: sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w==}
-
- '@vitejs/plugin-react-swc@4.0.1':
- resolution: {integrity: sha512-NQhPjysi5duItyrMd5JWZFf2vNOuSMyw+EoZyTBDzk+DkfYD8WNrsUs09sELV2cr1P15nufsN25hsUBt4CKF9Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
- peerDependencies:
- vite: ^4 || ^5 || ^6 || ^7
-
- abort-controller@3.0.0:
- resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
- engines: {node: '>=6.5'}
-
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
-
- ansi-regex@6.2.0:
- resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==}
- engines: {node: '>=12'}
-
- ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
-
- ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
- engines: {node: '>=12'}
-
- archiver-utils@5.0.2:
- resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==}
- engines: {node: '>= 14'}
-
- archiver@7.0.1:
- resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==}
- engines: {node: '>= 14'}
-
- async@3.2.6:
- resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
-
- b4a@1.6.7:
- resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==}
-
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
- bare-events@2.6.1:
- resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==}
-
- base64-js@1.5.1:
- resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
-
- brace-expansion@2.0.2:
- resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
-
- buffer-crc32@1.0.0:
- resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
- engines: {node: '>=8.0.0'}
-
- buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
-
- chalk@5.6.0:
- resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==}
- engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
-
- color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
-
- color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
- commander@14.0.0:
- resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==}
- engines: {node: '>=20'}
-
- compress-commons@6.0.2:
- resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==}
- engines: {node: '>= 14'}
-
- core-js@3.45.1:
- resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==}
-
- core-util-is@1.0.3:
- resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-
- crc-32@1.2.2:
- resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
- engines: {node: '>=0.8'}
- hasBin: true
-
- crc32-stream@6.0.0:
- resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==}
- engines: {node: '>= 14'}
-
- cross-spawn@7.0.6:
- resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
- engines: {node: '>= 8'}
-
- eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
- emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
- esbuild@0.25.9:
- resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==}
- engines: {node: '>=18'}
- hasBin: true
-
- event-target-shim@5.0.1:
- resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
- engines: {node: '>=6'}
-
- events@3.3.0:
- resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
- engines: {node: '>=0.8.x'}
-
- fast-fifo@1.3.2:
- resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
-
- fdir@6.5.0:
- resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- picomatch: ^3 || ^4
- peerDependenciesMeta:
- picomatch:
- optional: true
-
- foreground-child@3.3.1:
- resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
- engines: {node: '>=14'}
-
- fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
- glob@10.4.5:
- resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
- hasBin: true
-
- glob@11.0.3:
- resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==}
- engines: {node: 20 || >=22}
- hasBin: true
-
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
- ieee754@1.2.1:
- resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
-
- inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
- 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-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
-
- is-stream@2.0.1:
- resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
- engines: {node: '>=8'}
-
- isarray@1.0.0:
- resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
-
- isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
- jackspeak@3.4.3:
- resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
-
- jackspeak@4.1.1:
- resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
- engines: {node: 20 || >=22}
-
- jiti@2.5.1:
- resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
- hasBin: true
-
- json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
-
- lazystream@1.0.1:
- resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
- engines: {node: '>= 0.6.3'}
-
- lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
-
- lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
- lru-cache@11.1.0:
- resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==}
- engines: {node: 20 || >=22}
-
- magic-string@0.30.17:
- resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
-
- minimatch@10.0.3:
- resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
- engines: {node: 20 || >=22}
-
- minimatch@5.1.6:
- resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
- engines: {node: '>=10'}
-
- minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minimist@1.2.8:
- resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
-
- package-json-from-dist@1.0.1:
- resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
-
- path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
-
- path-scurry@1.11.1:
- resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
- engines: {node: '>=16 || 14 >=14.18'}
-
- path-scurry@2.0.0:
- resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
- engines: {node: 20 || >=22}
-
- picocolors@1.1.1:
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
- picomatch@4.0.3:
- resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
- engines: {node: '>=12'}
-
- postcss@8.5.6:
- resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
- engines: {node: ^10 || ^12 || >=14}
-
- process-nextick-args@2.0.1:
- resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
-
- process@0.11.10:
- resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
- engines: {node: '>= 0.6.0'}
-
- readable-stream@2.3.8:
- resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
-
- readable-stream@4.7.0:
- resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- readdir-glob@1.1.3:
- resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
-
- rollup@4.46.4:
- resolution: {integrity: sha512-YbxoxvoqNg9zAmw4+vzh1FkGAiZRK+LhnSrbSrSXMdZYsRPDWoshcSd/pldKRO6lWzv/e9TiJAVQyirYIeSIPQ==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
- rsbuild-plugin-dts@0.12.2:
- resolution: {integrity: sha512-qI7wwT7R6T5LzuwcBWt6dZYaS1Fv5Tg2D3OHbAX9MXYn2oJ3eJjdwXU2LcLALd1CpXUPaQCjOTHRMJzHT0++JQ==}
- engines: {node: '>=18.12.0'}
- peerDependencies:
- '@microsoft/api-extractor': ^7
- '@rsbuild/core': 1.x
- typescript: ^5
- peerDependenciesMeta:
- '@microsoft/api-extractor':
- optional: true
- typescript:
- optional: true
-
- safe-buffer@5.1.2:
- resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
-
- safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
- shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
-
- shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
-
- signal-exit@4.1.0:
- resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
- engines: {node: '>=14'}
-
- source-map-js@1.2.1:
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
- engines: {node: '>=0.10.0'}
-
- streamx@2.22.1:
- resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==}
-
- string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
-
- string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
-
- string_decoder@1.1.1:
- resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
-
- 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-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
- engines: {node: '>=12'}
-
- strip-bom@3.0.0:
- resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
- engines: {node: '>=4'}
-
- tar-stream@3.1.7:
- resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
-
- text-decoder@1.2.3:
- resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
-
- tinyglobby@0.2.14:
- resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
- engines: {node: '>=12.0.0'}
-
- tsconfig-paths@4.2.0:
- resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
- engines: {node: '>=6'}
-
- tslib@2.8.1:
- resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
-
- type-fest@4.41.0:
- resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
- engines: {node: '>=16'}
-
- undici-types@6.21.0:
- resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
-
- util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
- vite@7.1.3:
- resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^20.19.0 || >=22.12.0
- jiti: '>=1.21.0'
- less: ^4.0.0
- lightningcss: ^1.21.0
- sass: ^1.70.0
- sass-embedded: ^1.70.0
- stylus: '>=0.54.8'
- sugarss: ^5.0.0
- terser: ^5.16.0
- tsx: ^4.8.1
- yaml: ^2.4.2
- peerDependenciesMeta:
- '@types/node':
- optional: true
- jiti:
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- tsx:
- optional: true
- yaml:
- optional: true
-
- which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
-
- wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
-
- wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
-
- zip-a-folder@3.1.9:
- resolution: {integrity: sha512-0TPP3eK5mbZxHnOE8w/Jg6gwxsxZOrA3hXHMfC3I4mcTvyJwNt7GZP8i6uiAMVNu43QTmVz0ngEMKcjgpLZLmQ==}
-
- zip-stream@6.0.1:
- resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
- engines: {node: '>= 14'}
-
-snapshots:
-
- '@ast-grep/napi-darwin-arm64@0.37.0':
- optional: true
-
- '@ast-grep/napi-darwin-x64@0.37.0':
- optional: true
-
- '@ast-grep/napi-linux-arm64-gnu@0.37.0':
- optional: true
-
- '@ast-grep/napi-linux-arm64-musl@0.37.0':
- optional: true
-
- '@ast-grep/napi-linux-x64-gnu@0.37.0':
- optional: true
-
- '@ast-grep/napi-linux-x64-musl@0.37.0':
- optional: true
-
- '@ast-grep/napi-win32-arm64-msvc@0.37.0':
- optional: true
-
- '@ast-grep/napi-win32-ia32-msvc@0.37.0':
- optional: true
-
- '@ast-grep/napi-win32-x64-msvc@0.37.0':
- optional: true
-
- '@ast-grep/napi@0.37.0':
- optionalDependencies:
- '@ast-grep/napi-darwin-arm64': 0.37.0
- '@ast-grep/napi-darwin-x64': 0.37.0
- '@ast-grep/napi-linux-arm64-gnu': 0.37.0
- '@ast-grep/napi-linux-arm64-musl': 0.37.0
- '@ast-grep/napi-linux-x64-gnu': 0.37.0
- '@ast-grep/napi-linux-x64-musl': 0.37.0
- '@ast-grep/napi-win32-arm64-msvc': 0.37.0
- '@ast-grep/napi-win32-ia32-msvc': 0.37.0
- '@ast-grep/napi-win32-x64-msvc': 0.37.0
-
- '@emnapi/core@1.4.5':
- dependencies:
- '@emnapi/wasi-threads': 1.0.4
- tslib: 2.8.1
- optional: true
-
- '@emnapi/runtime@1.4.5':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@emnapi/wasi-threads@1.0.4':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@esbuild/aix-ppc64@0.25.9':
- optional: true
-
- '@esbuild/android-arm64@0.25.9':
- optional: true
-
- '@esbuild/android-arm@0.25.9':
- optional: true
-
- '@esbuild/android-x64@0.25.9':
- optional: true
-
- '@esbuild/darwin-arm64@0.25.9':
- optional: true
-
- '@esbuild/darwin-x64@0.25.9':
- optional: true
-
- '@esbuild/freebsd-arm64@0.25.9':
- optional: true
-
- '@esbuild/freebsd-x64@0.25.9':
- optional: true
-
- '@esbuild/linux-arm64@0.25.9':
- optional: true
-
- '@esbuild/linux-arm@0.25.9':
- optional: true
-
- '@esbuild/linux-ia32@0.25.9':
- optional: true
-
- '@esbuild/linux-loong64@0.25.9':
- optional: true
-
- '@esbuild/linux-mips64el@0.25.9':
- optional: true
-
- '@esbuild/linux-ppc64@0.25.9':
- optional: true
-
- '@esbuild/linux-riscv64@0.25.9':
- optional: true
-
- '@esbuild/linux-s390x@0.25.9':
- optional: true
-
- '@esbuild/linux-x64@0.25.9':
- optional: true
-
- '@esbuild/netbsd-arm64@0.25.9':
- optional: true
-
- '@esbuild/netbsd-x64@0.25.9':
- optional: true
-
- '@esbuild/openbsd-arm64@0.25.9':
- optional: true
-
- '@esbuild/openbsd-x64@0.25.9':
- optional: true
-
- '@esbuild/openharmony-arm64@0.25.9':
- optional: true
-
- '@esbuild/sunos-x64@0.25.9':
- optional: true
-
- '@esbuild/win32-arm64@0.25.9':
- optional: true
-
- '@esbuild/win32-ia32@0.25.9':
- optional: true
-
- '@esbuild/win32-x64@0.25.9':
- optional: true
-
- '@isaacs/balanced-match@4.0.1': {}
-
- '@isaacs/brace-expansion@5.0.0':
- dependencies:
- '@isaacs/balanced-match': 4.0.1
-
- '@isaacs/cliui@8.0.2':
- dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.0
- strip-ansi-cjs: strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: wrap-ansi@7.0.0
-
- '@jridgewell/sourcemap-codec@1.5.5': {}
-
- '@module-federation/error-codes@0.18.0': {}
-
- '@module-federation/runtime-core@0.18.0':
- dependencies:
- '@module-federation/error-codes': 0.18.0
- '@module-federation/sdk': 0.18.0
-
- '@module-federation/runtime-tools@0.18.0':
- dependencies:
- '@module-federation/runtime': 0.18.0
- '@module-federation/webpack-bundler-runtime': 0.18.0
-
- '@module-federation/runtime@0.18.0':
- dependencies:
- '@module-federation/error-codes': 0.18.0
- '@module-federation/runtime-core': 0.18.0
- '@module-federation/sdk': 0.18.0
-
- '@module-federation/sdk@0.18.0': {}
-
- '@module-federation/webpack-bundler-runtime@0.18.0':
- dependencies:
- '@module-federation/runtime': 0.18.0
- '@module-federation/sdk': 0.18.0
-
- '@napi-rs/wasm-runtime@1.0.3':
- dependencies:
- '@emnapi/core': 1.4.5
- '@emnapi/runtime': 1.4.5
- '@tybys/wasm-util': 0.10.0
- optional: true
-
- '@pkgjs/parseargs@0.11.0':
- optional: true
-
- '@rolldown/pluginutils@1.0.0-beta.32': {}
-
- '@rollup/rollup-android-arm-eabi@4.46.4':
- optional: true
-
- '@rollup/rollup-android-arm64@4.46.4':
- optional: true
-
- '@rollup/rollup-darwin-arm64@4.46.4':
- optional: true
-
- '@rollup/rollup-darwin-x64@4.46.4':
- optional: true
-
- '@rollup/rollup-freebsd-arm64@4.46.4':
- optional: true
-
- '@rollup/rollup-freebsd-x64@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-arm-gnueabihf@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-arm-musleabihf@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-arm64-gnu@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-arm64-musl@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-loongarch64-gnu@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-ppc64-gnu@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-riscv64-gnu@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-riscv64-musl@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-s390x-gnu@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-x64-gnu@4.46.4':
- optional: true
-
- '@rollup/rollup-linux-x64-musl@4.46.4':
- optional: true
-
- '@rollup/rollup-win32-arm64-msvc@4.46.4':
- optional: true
-
- '@rollup/rollup-win32-ia32-msvc@4.46.4':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.46.4':
- optional: true
-
- '@rsbuild/core@1.5.0-beta.4':
- dependencies:
- '@rspack/core': 1.5.0-beta.1(@swc/helpers@0.5.17)
- '@rspack/lite-tapable': 1.0.1
- '@swc/helpers': 0.5.17
- core-js: 3.45.1
- jiti: 2.5.1
-
- '@rslib/core@0.12.2':
- dependencies:
- '@rsbuild/core': 1.5.0-beta.4
- rsbuild-plugin-dts: 0.12.2(@rsbuild/core@1.5.0-beta.4)
- tinyglobby: 0.2.14
-
- '@rspack/binding-darwin-arm64@1.5.0-beta.1':
- optional: true
-
- '@rspack/binding-darwin-x64@1.5.0-beta.1':
- optional: true
-
- '@rspack/binding-linux-arm64-gnu@1.5.0-beta.1':
- optional: true
-
- '@rspack/binding-linux-arm64-musl@1.5.0-beta.1':
- optional: true
-
- '@rspack/binding-linux-x64-gnu@1.5.0-beta.1':
- optional: true
-
- '@rspack/binding-linux-x64-musl@1.5.0-beta.1':
- optional: true
-
- '@rspack/binding-wasm32-wasi@1.5.0-beta.1':
- dependencies:
- '@napi-rs/wasm-runtime': 1.0.3
- optional: true
-
- '@rspack/binding-win32-arm64-msvc@1.5.0-beta.1':
- optional: true
-
- '@rspack/binding-win32-ia32-msvc@1.5.0-beta.1':
- optional: true
-
- '@rspack/binding-win32-x64-msvc@1.5.0-beta.1':
- optional: true
-
- '@rspack/binding@1.5.0-beta.1':
- optionalDependencies:
- '@rspack/binding-darwin-arm64': 1.5.0-beta.1
- '@rspack/binding-darwin-x64': 1.5.0-beta.1
- '@rspack/binding-linux-arm64-gnu': 1.5.0-beta.1
- '@rspack/binding-linux-arm64-musl': 1.5.0-beta.1
- '@rspack/binding-linux-x64-gnu': 1.5.0-beta.1
- '@rspack/binding-linux-x64-musl': 1.5.0-beta.1
- '@rspack/binding-wasm32-wasi': 1.5.0-beta.1
- '@rspack/binding-win32-arm64-msvc': 1.5.0-beta.1
- '@rspack/binding-win32-ia32-msvc': 1.5.0-beta.1
- '@rspack/binding-win32-x64-msvc': 1.5.0-beta.1
-
- '@rspack/core@1.5.0-beta.1(@swc/helpers@0.5.17)':
- dependencies:
- '@module-federation/runtime-tools': 0.18.0
- '@rspack/binding': 1.5.0-beta.1
- '@rspack/lite-tapable': 1.0.1
- optionalDependencies:
- '@swc/helpers': 0.5.17
-
- '@rspack/lite-tapable@1.0.1': {}
-
- '@swc/core-darwin-arm64@1.13.4':
- optional: true
-
- '@swc/core-darwin-x64@1.13.4':
- optional: true
-
- '@swc/core-linux-arm-gnueabihf@1.13.4':
- optional: true
-
- '@swc/core-linux-arm64-gnu@1.13.4':
- optional: true
-
- '@swc/core-linux-arm64-musl@1.13.4':
- optional: true
-
- '@swc/core-linux-x64-gnu@1.13.4':
- optional: true
-
- '@swc/core-linux-x64-musl@1.13.4':
- optional: true
-
- '@swc/core-win32-arm64-msvc@1.13.4':
- optional: true
-
- '@swc/core-win32-ia32-msvc@1.13.4':
- optional: true
-
- '@swc/core-win32-x64-msvc@1.13.4':
- optional: true
-
- '@swc/core@1.13.4(@swc/helpers@0.5.17)':
- dependencies:
- '@swc/counter': 0.1.3
- '@swc/types': 0.1.24
- optionalDependencies:
- '@swc/core-darwin-arm64': 1.13.4
- '@swc/core-darwin-x64': 1.13.4
- '@swc/core-linux-arm-gnueabihf': 1.13.4
- '@swc/core-linux-arm64-gnu': 1.13.4
- '@swc/core-linux-arm64-musl': 1.13.4
- '@swc/core-linux-x64-gnu': 1.13.4
- '@swc/core-linux-x64-musl': 1.13.4
- '@swc/core-win32-arm64-msvc': 1.13.4
- '@swc/core-win32-ia32-msvc': 1.13.4
- '@swc/core-win32-x64-msvc': 1.13.4
- '@swc/helpers': 0.5.17
-
- '@swc/counter@0.1.3': {}
-
- '@swc/helpers@0.5.17':
- dependencies:
- tslib: 2.8.1
-
- '@swc/types@0.1.24':
- dependencies:
- '@swc/counter': 0.1.3
-
- '@tybys/wasm-util@0.10.0':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@types/estree@1.0.8': {}
-
- '@types/node@22.17.2':
- dependencies:
- undici-types: 6.21.0
-
- '@vitejs/plugin-react-swc@4.0.1(@swc/helpers@0.5.17)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1))':
- dependencies:
- '@rolldown/pluginutils': 1.0.0-beta.32
- '@swc/core': 1.13.4(@swc/helpers@0.5.17)
- vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)
- transitivePeerDependencies:
- - '@swc/helpers'
-
- abort-controller@3.0.0:
- dependencies:
- event-target-shim: 5.0.1
-
- ansi-regex@5.0.1: {}
-
- ansi-regex@6.2.0: {}
-
- ansi-styles@4.3.0:
- dependencies:
- color-convert: 2.0.1
-
- ansi-styles@6.2.1: {}
-
- archiver-utils@5.0.2:
- dependencies:
- glob: 10.4.5
- graceful-fs: 4.2.11
- is-stream: 2.0.1
- lazystream: 1.0.1
- lodash: 4.17.21
- normalize-path: 3.0.0
- readable-stream: 4.7.0
-
- archiver@7.0.1:
- dependencies:
- archiver-utils: 5.0.2
- async: 3.2.6
- buffer-crc32: 1.0.0
- readable-stream: 4.7.0
- readdir-glob: 1.1.3
- tar-stream: 3.1.7
- zip-stream: 6.0.1
-
- async@3.2.6: {}
-
- b4a@1.6.7: {}
-
- balanced-match@1.0.2: {}
-
- bare-events@2.6.1:
- optional: true
-
- base64-js@1.5.1: {}
-
- brace-expansion@2.0.2:
- dependencies:
- balanced-match: 1.0.2
-
- buffer-crc32@1.0.0: {}
-
- buffer@6.0.3:
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
-
- chalk@5.6.0: {}
-
- color-convert@2.0.1:
- dependencies:
- color-name: 1.1.4
-
- color-name@1.1.4: {}
-
- commander@14.0.0: {}
-
- compress-commons@6.0.2:
- dependencies:
- crc-32: 1.2.2
- crc32-stream: 6.0.0
- is-stream: 2.0.1
- normalize-path: 3.0.0
- readable-stream: 4.7.0
-
- core-js@3.45.1: {}
-
- core-util-is@1.0.3: {}
-
- crc-32@1.2.2: {}
-
- crc32-stream@6.0.0:
- dependencies:
- crc-32: 1.2.2
- readable-stream: 4.7.0
-
- cross-spawn@7.0.6:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
-
- eastasianwidth@0.2.0: {}
-
- emoji-regex@8.0.0: {}
-
- emoji-regex@9.2.2: {}
-
- esbuild@0.25.9:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.9
- '@esbuild/android-arm': 0.25.9
- '@esbuild/android-arm64': 0.25.9
- '@esbuild/android-x64': 0.25.9
- '@esbuild/darwin-arm64': 0.25.9
- '@esbuild/darwin-x64': 0.25.9
- '@esbuild/freebsd-arm64': 0.25.9
- '@esbuild/freebsd-x64': 0.25.9
- '@esbuild/linux-arm': 0.25.9
- '@esbuild/linux-arm64': 0.25.9
- '@esbuild/linux-ia32': 0.25.9
- '@esbuild/linux-loong64': 0.25.9
- '@esbuild/linux-mips64el': 0.25.9
- '@esbuild/linux-ppc64': 0.25.9
- '@esbuild/linux-riscv64': 0.25.9
- '@esbuild/linux-s390x': 0.25.9
- '@esbuild/linux-x64': 0.25.9
- '@esbuild/netbsd-arm64': 0.25.9
- '@esbuild/netbsd-x64': 0.25.9
- '@esbuild/openbsd-arm64': 0.25.9
- '@esbuild/openbsd-x64': 0.25.9
- '@esbuild/openharmony-arm64': 0.25.9
- '@esbuild/sunos-x64': 0.25.9
- '@esbuild/win32-arm64': 0.25.9
- '@esbuild/win32-ia32': 0.25.9
- '@esbuild/win32-x64': 0.25.9
-
- event-target-shim@5.0.1: {}
-
- events@3.3.0: {}
-
- fast-fifo@1.3.2: {}
-
- fdir@6.5.0(picomatch@4.0.3):
- optionalDependencies:
- picomatch: 4.0.3
-
- foreground-child@3.3.1:
- dependencies:
- cross-spawn: 7.0.6
- signal-exit: 4.1.0
-
- fsevents@2.3.3:
- optional: true
-
- glob@10.4.5:
- dependencies:
- foreground-child: 3.3.1
- jackspeak: 3.4.3
- minimatch: 9.0.5
- minipass: 7.1.2
- package-json-from-dist: 1.0.1
- path-scurry: 1.11.1
-
- glob@11.0.3:
- dependencies:
- foreground-child: 3.3.1
- jackspeak: 4.1.1
- minimatch: 10.0.3
- minipass: 7.1.2
- package-json-from-dist: 1.0.1
- path-scurry: 2.0.0
-
- graceful-fs@4.2.11: {}
-
- ieee754@1.2.1: {}
-
- inherits@2.0.4: {}
-
- is-extglob@2.1.1: {}
-
- is-fullwidth-code-point@3.0.0: {}
-
- is-glob@4.0.3:
- dependencies:
- is-extglob: 2.1.1
-
- is-stream@2.0.1: {}
-
- isarray@1.0.0: {}
-
- isexe@2.0.0: {}
-
- jackspeak@3.4.3:
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
-
- jackspeak@4.1.1:
- dependencies:
- '@isaacs/cliui': 8.0.2
-
- jiti@2.5.1: {}
-
- json5@2.2.3: {}
-
- lazystream@1.0.1:
- dependencies:
- readable-stream: 2.3.8
-
- lodash@4.17.21: {}
-
- lru-cache@10.4.3: {}
-
- lru-cache@11.1.0: {}
-
- magic-string@0.30.17:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
-
- minimatch@10.0.3:
- dependencies:
- '@isaacs/brace-expansion': 5.0.0
-
- minimatch@5.1.6:
- dependencies:
- brace-expansion: 2.0.2
-
- minimatch@9.0.5:
- dependencies:
- brace-expansion: 2.0.2
-
- minimist@1.2.8: {}
-
- minipass@7.1.2: {}
-
- nanoid@3.3.11: {}
-
- normalize-path@3.0.0: {}
-
- package-json-from-dist@1.0.1: {}
-
- path-key@3.1.1: {}
-
- path-scurry@1.11.1:
- dependencies:
- lru-cache: 10.4.3
- minipass: 7.1.2
-
- path-scurry@2.0.0:
- dependencies:
- lru-cache: 11.1.0
- minipass: 7.1.2
-
- picocolors@1.1.1: {}
-
- picomatch@4.0.3: {}
-
- postcss@8.5.6:
- dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
- process-nextick-args@2.0.1: {}
-
- process@0.11.10: {}
-
- readable-stream@2.3.8:
- dependencies:
- core-util-is: 1.0.3
- inherits: 2.0.4
- isarray: 1.0.0
- process-nextick-args: 2.0.1
- safe-buffer: 5.1.2
- string_decoder: 1.1.1
- util-deprecate: 1.0.2
-
- readable-stream@4.7.0:
- dependencies:
- abort-controller: 3.0.0
- buffer: 6.0.3
- events: 3.3.0
- process: 0.11.10
- string_decoder: 1.3.0
-
- readdir-glob@1.1.3:
- dependencies:
- minimatch: 5.1.6
-
- rollup@4.46.4:
- dependencies:
- '@types/estree': 1.0.8
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.46.4
- '@rollup/rollup-android-arm64': 4.46.4
- '@rollup/rollup-darwin-arm64': 4.46.4
- '@rollup/rollup-darwin-x64': 4.46.4
- '@rollup/rollup-freebsd-arm64': 4.46.4
- '@rollup/rollup-freebsd-x64': 4.46.4
- '@rollup/rollup-linux-arm-gnueabihf': 4.46.4
- '@rollup/rollup-linux-arm-musleabihf': 4.46.4
- '@rollup/rollup-linux-arm64-gnu': 4.46.4
- '@rollup/rollup-linux-arm64-musl': 4.46.4
- '@rollup/rollup-linux-loongarch64-gnu': 4.46.4
- '@rollup/rollup-linux-ppc64-gnu': 4.46.4
- '@rollup/rollup-linux-riscv64-gnu': 4.46.4
- '@rollup/rollup-linux-riscv64-musl': 4.46.4
- '@rollup/rollup-linux-s390x-gnu': 4.46.4
- '@rollup/rollup-linux-x64-gnu': 4.46.4
- '@rollup/rollup-linux-x64-musl': 4.46.4
- '@rollup/rollup-win32-arm64-msvc': 4.46.4
- '@rollup/rollup-win32-ia32-msvc': 4.46.4
- '@rollup/rollup-win32-x64-msvc': 4.46.4
- fsevents: 2.3.3
-
- rsbuild-plugin-dts@0.12.2(@rsbuild/core@1.5.0-beta.4):
- dependencies:
- '@ast-grep/napi': 0.37.0
- '@rsbuild/core': 1.5.0-beta.4
- magic-string: 0.30.17
- picocolors: 1.1.1
- tinyglobby: 0.2.14
- tsconfig-paths: 4.2.0
-
- safe-buffer@5.1.2: {}
-
- safe-buffer@5.2.1: {}
-
- shebang-command@2.0.0:
- dependencies:
- shebang-regex: 3.0.0
-
- shebang-regex@3.0.0: {}
-
- signal-exit@4.1.0: {}
-
- source-map-js@1.2.1: {}
-
- streamx@2.22.1:
- dependencies:
- fast-fifo: 1.3.2
- text-decoder: 1.2.3
- optionalDependencies:
- bare-events: 2.6.1
-
- string-width@4.2.3:
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
-
- string-width@5.1.2:
- dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.1.0
-
- string_decoder@1.1.1:
- dependencies:
- safe-buffer: 5.1.2
-
- string_decoder@1.3.0:
- dependencies:
- safe-buffer: 5.2.1
-
- strip-ansi@6.0.1:
- dependencies:
- ansi-regex: 5.0.1
-
- strip-ansi@7.1.0:
- dependencies:
- ansi-regex: 6.2.0
-
- strip-bom@3.0.0: {}
-
- tar-stream@3.1.7:
- dependencies:
- b4a: 1.6.7
- fast-fifo: 1.3.2
- streamx: 2.22.1
-
- text-decoder@1.2.3:
- dependencies:
- b4a: 1.6.7
-
- tinyglobby@0.2.14:
- dependencies:
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
-
- tsconfig-paths@4.2.0:
- dependencies:
- json5: 2.2.3
- minimist: 1.2.8
- strip-bom: 3.0.0
-
- tslib@2.8.1: {}
-
- type-fest@4.41.0: {}
-
- undici-types@6.21.0: {}
-
- util-deprecate@1.0.2: {}
-
- vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1):
- dependencies:
- esbuild: 0.25.9
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
- postcss: 8.5.6
- rollup: 4.46.4
- tinyglobby: 0.2.14
- optionalDependencies:
- '@types/node': 22.17.2
- fsevents: 2.3.3
- jiti: 2.5.1
-
- which@2.0.2:
- dependencies:
- isexe: 2.0.0
-
- wrap-ansi@7.0.0:
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
-
- wrap-ansi@8.1.0:
- dependencies:
- ansi-styles: 6.2.1
- string-width: 5.1.2
- strip-ansi: 7.1.0
-
- zip-a-folder@3.1.9:
- dependencies:
- archiver: 7.0.1
- glob: 11.0.3
- is-glob: 4.0.3
-
- zip-stream@6.0.1:
- dependencies:
- archiver-utils: 5.0.2
- compress-commons: 6.0.2
- readable-stream: 4.7.0
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@vitejs/plugin-react-swc':
+ specifier: 4.0.1
+ version: 4.0.1(@swc/helpers@0.5.17)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1))
+ chalk:
+ specifier: 5.6.0
+ version: 5.6.0
+ commander:
+ specifier: 14.0.0
+ version: 14.0.0
+ fast-xml-parser:
+ specifier: 5.2.5
+ version: 5.2.5
+ mendix:
+ specifier: 10.24.77222
+ version: 10.24.77222
+ vite:
+ specifier: 7.1.3
+ version: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)
+ zip-a-folder:
+ specifier: 3.1.9
+ version: 3.1.9
+ devDependencies:
+ '@rslib/core':
+ specifier: 0.12.2
+ version: 0.12.2(typescript@5.9.2)
+ '@types/node':
+ specifier: 22.17.2
+ version: 22.17.2
+ esbuild:
+ specifier: 0.25.9
+ version: 0.25.9
+ type-fest:
+ specifier: 4.41.0
+ version: 4.41.0
+ typescript:
+ specifier: 5.9.2
+ version: 5.9.2
+
+packages:
+
+ '@ast-grep/napi-darwin-arm64@0.37.0':
+ resolution: {integrity: sha512-QAiIiaAbLvMEg/yBbyKn+p1gX2/FuaC0SMf7D7capm/oG4xGMzdeaQIcSosF4TCxxV+hIH4Bz9e4/u7w6Bnk3Q==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@ast-grep/napi-darwin-x64@0.37.0':
+ resolution: {integrity: sha512-zvcvdgekd4ySV3zUbUp8HF5nk5zqwiMXTuVzTUdl/w08O7JjM6XPOIVT+d2o/MqwM9rsXdzdergY5oY2RdhSPA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@ast-grep/napi-linux-arm64-gnu@0.37.0':
+ resolution: {integrity: sha512-L7Sj0lXy8X+BqSMgr1LB8cCoWk0rericdeu+dC8/c8zpsav5Oo2IQKY1PmiZ7H8IHoFBbURLf8iklY9wsD+cyA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@ast-grep/napi-linux-arm64-musl@0.37.0':
+ resolution: {integrity: sha512-LF9sAvYy6es/OdyJDO3RwkX3I82Vkfsng1sqUBcoWC1jVb1wX5YVzHtpQox9JrEhGl+bNp7FYxB4Qba9OdA5GA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@ast-grep/napi-linux-x64-gnu@0.37.0':
+ resolution: {integrity: sha512-TViz5/klqre6aSmJzswEIjApnGjJzstG/SE8VDWsrftMBMYt2PTu3MeluZVwzSqDao8doT/P+6U11dU05UOgxw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@ast-grep/napi-linux-x64-musl@0.37.0':
+ resolution: {integrity: sha512-/BcCH33S9E3ovOAEoxYngUNXgb+JLg991sdyiNP2bSoYd30a9RHrG7CYwW6fMgua3ijQ474eV6cq9yZO1bCpXg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@ast-grep/napi-win32-arm64-msvc@0.37.0':
+ resolution: {integrity: sha512-TjQA4cFoIEW2bgjLkaL9yqT4XWuuLa5MCNd0VCDhGRDMNQ9+rhwi9eLOWRaap3xzT7g+nlbcEHL3AkVCD2+b3A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@ast-grep/napi-win32-ia32-msvc@0.37.0':
+ resolution: {integrity: sha512-uNmVka8fJCdYsyOlF9aZqQMLTatEYBynjChVTzUfFMDfmZ0bihs/YTqJVbkSm8TZM7CUX82apvn50z/dX5iWRA==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@ast-grep/napi-win32-x64-msvc@0.37.0':
+ resolution: {integrity: sha512-vCiFOT3hSCQuHHfZ933GAwnPzmL0G04JxQEsBRfqONywyT8bSdDc/ECpAfr3S9VcS4JZ9/F6tkePKW/Om2Dq2g==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@ast-grep/napi@0.37.0':
+ resolution: {integrity: sha512-Hb4o6h1Pf6yRUAX07DR4JVY7dmQw+RVQMW5/m55GoiAT/VRoKCWBtIUPPOnqDVhbx1Cjfil9b6EDrgJsUAujEQ==}
+ engines: {node: '>= 10'}
+
+ '@emnapi/core@1.4.5':
+ resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==}
+
+ '@emnapi/runtime@1.4.5':
+ resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==}
+
+ '@emnapi/wasi-threads@1.0.4':
+ resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==}
+
+ '@esbuild/aix-ppc64@0.25.9':
+ resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.25.9':
+ resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.25.9':
+ resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.25.9':
+ resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.25.9':
+ resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.25.9':
+ resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.25.9':
+ resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.25.9':
+ resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.25.9':
+ resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.25.9':
+ resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.25.9':
+ resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.25.9':
+ resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.25.9':
+ resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.25.9':
+ resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.25.9':
+ resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.25.9':
+ resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.25.9':
+ resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.25.9':
+ resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.25.9':
+ resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.25.9':
+ resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.25.9':
+ resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.25.9':
+ resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.25.9':
+ resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.25.9':
+ resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.25.9':
+ resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.25.9':
+ resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@isaacs/balanced-match@4.0.1':
+ resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/brace-expansion@5.0.0':
+ resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@module-federation/error-codes@0.18.0':
+ resolution: {integrity: sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ==}
+
+ '@module-federation/runtime-core@0.18.0':
+ resolution: {integrity: sha512-ZyYhrDyVAhUzriOsVfgL6vwd+5ebYm595Y13KeMf6TKDRoUHBMTLGQ8WM4TDj8JNsy7LigncK8C03fn97of0QQ==}
+
+ '@module-federation/runtime-tools@0.18.0':
+ resolution: {integrity: sha512-fSga9o4t1UfXNV/Kh6qFvRyZpPp3EHSPRISNeyT8ZoTpzDNiYzhtw0BPUSSD8m6C6XQh2s/11rI4g80UY+d+hA==}
+
+ '@module-federation/runtime@0.18.0':
+ resolution: {integrity: sha512-+C4YtoSztM7nHwNyZl6dQKGUVJdsPrUdaf3HIKReg/GQbrt9uvOlUWo2NXMZ8vDAnf/QRrpSYAwXHmWDn9Obaw==}
+
+ '@module-federation/sdk@0.18.0':
+ resolution: {integrity: sha512-Lo/Feq73tO2unjmpRfyyoUkTVoejhItXOk/h5C+4cistnHbTV8XHrW/13fD5e1Iu60heVdAhhelJd6F898Ve9A==}
+
+ '@module-federation/webpack-bundler-runtime@0.18.0':
+ resolution: {integrity: sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ==}
+
+ '@napi-rs/wasm-runtime@1.0.3':
+ resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@rolldown/pluginutils@1.0.0-beta.32':
+ resolution: {integrity: sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==}
+
+ '@rollup/rollup-android-arm-eabi@4.46.4':
+ resolution: {integrity: sha512-B2wfzCJ+ps/OBzRjeds7DlJumCU3rXMxJJS1vzURyj7+KBHGONm7c9q1TfdBl4vCuNMkDvARn3PBl2wZzuR5mw==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.46.4':
+ resolution: {integrity: sha512-FGJYXvYdn8Bs6lAlBZYT5n+4x0ciEp4cmttsvKAZc/c8/JiPaQK8u0c/86vKX8lA7OY/+37lIQSe0YoAImvBAA==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.46.4':
+ resolution: {integrity: sha512-/9qwE/BM7ATw/W/OFEMTm3dmywbJyLQb4f4v5nmOjgYxPIGpw7HaxRi6LnD4Pjn/q7k55FGeHe1/OD02w63apA==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.46.4':
+ resolution: {integrity: sha512-QkWfNbeRuzFnv2d0aPlrzcA3Ebq2mE8kX/5Pl7VdRShbPBjSnom7dbT8E3Jmhxo2RL784hyqGvR5KHavCJQciw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.46.4':
+ resolution: {integrity: sha512-+ToyOMYnSfV8D+ckxO6NthPln/PDNp1P6INcNypfZ7muLmEvPKXqduUiD8DlJpMMT8LxHcE5W0dK9kXfJke9Zw==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.46.4':
+ resolution: {integrity: sha512-cGT6ey/W+sje6zywbLiqmkfkO210FgRz7tepWAzzEVgQU8Hn91JJmQWNqs55IuglG8sJdzk7XfNgmGRtcYlo1w==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.46.4':
+ resolution: {integrity: sha512-9fhTJyOb275w5RofPSl8lpr4jFowd+H4oQKJ9XTYzD1JWgxdZKE8bA6d4npuiMemkecQOcigX01FNZNCYnQBdA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.46.4':
+ resolution: {integrity: sha512-+6kCIM5Zjvz2HwPl/udgVs07tPMIp1VU2Y0c72ezjOvSvEfAIWsUgpcSDvnC7g9NrjYR6X9bZT92mZZ90TfvXw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.46.4':
+ resolution: {integrity: sha512-SWuXdnsayCZL4lXoo6jn0yyAj7TTjWE4NwDVt9s7cmu6poMhtiras5c8h6Ih6Y0Zk6Z+8t/mLumvpdSPTWub2Q==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.46.4':
+ resolution: {integrity: sha512-vDknMDqtMhrrroa5kyX6tuC0aRZZlQ+ipDfbXd2YGz5HeV2t8HOl/FDAd2ynhs7Ki5VooWiiZcCtxiZ4IjqZwQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.46.4':
+ resolution: {integrity: sha512-mCBkjRZWhvjtl/x+Bd4fQkWZT8canStKDxGrHlBiTnZmJnWygGcvBylzLVCZXka4dco5ymkWhZlLwKCGFF4ivw==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.46.4':
+ resolution: {integrity: sha512-YMdz2phOTFF+Z66dQfGf0gmeDSi5DJzY5bpZyeg9CPBkV9QDzJ1yFRlmi/j7WWRf3hYIWrOaJj5jsfwgc8GTHQ==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.46.4':
+ resolution: {integrity: sha512-r0WKLSfFAK8ucG024v2yiLSJMedoWvk8yWqfNICX28NHDGeu3F/wBf8KG6mclghx4FsLePxJr/9N8rIj1PtCnw==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.46.4':
+ resolution: {integrity: sha512-IaizpPP2UQU3MNyPH1u0Xxbm73D+4OupL0bjo4Hm0496e2wg3zuvoAIhubkD1NGy9fXILEExPQy87mweujEatA==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.46.4':
+ resolution: {integrity: sha512-aCM29orANR0a8wk896p6UEgIfupReupnmISz6SUwMIwTGaTI8MuKdE0OD2LvEg8ondDyZdMvnaN3bW4nFbATPA==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.46.4':
+ resolution: {integrity: sha512-0Xj1vZE3cbr/wda8d/m+UeuSL+TDpuozzdD4QaSzu/xSOMK0Su5RhIkF7KVHFQsobemUNHPLEcYllL7ZTCP/Cg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.46.4':
+ resolution: {integrity: sha512-kM/orjpolfA5yxsx84kI6bnK47AAZuWxglGKcNmokw2yy9i5eHY5UAjcX45jemTJnfHAWo3/hOoRqEeeTdL5hw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-win32-arm64-msvc@4.46.4':
+ resolution: {integrity: sha512-cNLH4psMEsWKILW0isbpQA2OvjXLbKvnkcJFmqAptPQbtLrobiapBJVj6RoIvg6UXVp5w0wnIfd/Q56cNpF+Ew==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.46.4':
+ resolution: {integrity: sha512-OiEa5lRhiANpv4SfwYVgQ3opYWi/QmPDC5ve21m8G9pf6ZO+aX1g2EEF1/IFaM1xPSP7mK0msTRXlPs6mIagkg==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.46.4':
+ resolution: {integrity: sha512-IKL9mewGZ5UuuX4NQlwOmxPyqielvkAPUS2s1cl6yWjjQvyN3h5JTdVFGD5Jr5xMjRC8setOfGQDVgX8V+dkjg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rsbuild/core@1.5.0-beta.4':
+ resolution: {integrity: sha512-h1jqpjZunalsdxTcJCbY8DovLu6F4MQgsYdZyxDjUp0xuggQayi1tpcE6MhLs3WWa077g+LZ2Am4gKt/pl/W9Q==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+
+ '@rslib/core@0.12.2':
+ resolution: {integrity: sha512-5DPVxmzzyoQlLqSt8Y/8kbYNtbJ0AEVUXd1hDFQ0Iq5Eb5XA4363PDeLdfeKJ1h93YqT7M9WZ3Cyhvosx1EimQ==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+ peerDependencies:
+ '@microsoft/api-extractor': ^7
+ typescript: ^5
+ peerDependenciesMeta:
+ '@microsoft/api-extractor':
+ optional: true
+ typescript:
+ optional: true
+
+ '@rspack/binding-darwin-arm64@1.5.0-beta.1':
+ resolution: {integrity: sha512-aXSbz9Bo480xNDK6v64SZ19I/bmMuxaOuex6V9q0S+v3qx/ZsUWL+5aUd71scq7EfAb3KkvQFsYACpt5PMZ9DQ==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rspack/binding-darwin-x64@1.5.0-beta.1':
+ resolution: {integrity: sha512-addeCT0bXtfOfvJZdVuHWBl20Cd8RmweOX03OiEH4AmQc9EgUEP/oCGpOmakBXxUCl3x/RnlrXx2nD1uDyuyLA==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rspack/binding-linux-arm64-gnu@1.5.0-beta.1':
+ resolution: {integrity: sha512-fYgOfSsA0J0rUA40ZEexrMRKyIVAUo4m0KShTm6yVaAzQHWVZ0xjjcoLFNxCVE7EvAPI7wl9fDOyr7Y8EylVfQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rspack/binding-linux-arm64-musl@1.5.0-beta.1':
+ resolution: {integrity: sha512-wWlOzsoJU2HJyPxoCDScW4zt3+5WO6NI8B7jSmhVA9dfmvCYUKktt/YZpskcgMsvCgtzXTE62wDc+VTQ5ucp9A==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rspack/binding-linux-x64-gnu@1.5.0-beta.1':
+ resolution: {integrity: sha512-OlgQIQLDLDDXvbUYBEfZmofO3uTDi0rGfIr58PXz/wTF87KdwqlU0HyjIeaeDUaQlV+lNXNysuCwvI0hl/o2tw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rspack/binding-linux-x64-musl@1.5.0-beta.1':
+ resolution: {integrity: sha512-LkQSyfyf5Jy0UGD0tvm2Gz+0VjboawtRrYd+qYHE0Pm4h7tTJWyqnh02LRTROxOl3GrssC1VGn6J8XYTxOAWug==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rspack/binding-wasm32-wasi@1.5.0-beta.1':
+ resolution: {integrity: sha512-ysnuVnqC9byoYfoAi/TsV0U5ZUxU0snnVPa/SvQEO6ew3J2GaNDq1vS1zWo0SOA4eLmwkop0/UcH8n3VXOy7NA==}
+ cpu: [wasm32]
+
+ '@rspack/binding-win32-arm64-msvc@1.5.0-beta.1':
+ resolution: {integrity: sha512-vcMXybMchQomBODyi6aIMCur8/oQktw+iVv0dH3hiiWy0v2g8xS9VLMjWXfGZAhonhRe7YWTP12dxCPbWmQyZw==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rspack/binding-win32-ia32-msvc@1.5.0-beta.1':
+ resolution: {integrity: sha512-fCj904xjc5iKOdUS0VLUE/LbAQZWlub/TF0ZKhzq2UK8WWwrfhA5U8ZHximU0A0LVDoMVZCM5M12rO12P0uHKw==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rspack/binding-win32-x64-msvc@1.5.0-beta.1':
+ resolution: {integrity: sha512-iWCoFMwP2aUea1mIp2+mTE7IKj6wp9hxMuZgOcEGWQidE7pUss5/Zp3wrOSWnnyovIeQLmK9wsQEA/W3i3MiAQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rspack/binding@1.5.0-beta.1':
+ resolution: {integrity: sha512-qZ+cxvsNvXBOPX0NEP+KfxQlJI7TDZR2XLS8Jl+zHl2kgulEOBWsBa7Q1Dcw73YQgz2owxP3OWl3f8LWXnnC1Q==}
+
+ '@rspack/core@1.5.0-beta.1':
+ resolution: {integrity: sha512-o3yQreNKldm0k96wPMpXBI9p0B03LpeK3XyV4vhk24RfLIa2p6C2LPF4xn6U2M28CFQkSbeu1vwlMHnfW4xHNg==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ '@swc/helpers': '>=0.5.1'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+
+ '@rspack/lite-tapable@1.0.1':
+ resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==}
+ engines: {node: '>=16.0.0'}
+
+ '@swc/core-darwin-arm64@1.13.4':
+ resolution: {integrity: sha512-CGbTu9dGBwgklUj+NAQAYyPjBuoHaNRWK4QXJRv1QNIkhtE27aY7QA9uEON14SODxsio3t8+Pjjl2Mzx1Pxf+g==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@swc/core-darwin-x64@1.13.4':
+ resolution: {integrity: sha512-qLFwYmLrqHNCf+JO9YLJT6IP/f9LfbXILTaqyfluFLW1GCfJyvUrSt3CWaL2lwwyT1EbBh6BVaAAecXiJIo3vg==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@swc/core-linux-arm-gnueabihf@1.13.4':
+ resolution: {integrity: sha512-y7SeNIA9em3+smNMpr781idKuNwJNAqewiotv+pIR5FpXdXXNjHWW+jORbqQYd61k6YirA5WQv+Af4UzqEX17g==}
+ engines: {node: '>=10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@swc/core-linux-arm64-gnu@1.13.4':
+ resolution: {integrity: sha512-u0c51VdzRmXaphLgghY9+B2Frzler6nIv+J788nqIh6I0ah3MmMW8LTJKZfdaJa3oFxzGNKXsJiaU2OFexNkug==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-arm64-musl@1.13.4':
+ resolution: {integrity: sha512-Z92GJ98x8yQHn4I/NPqwAQyHNkkMslrccNVgFcnY1msrb6iGSw5uFg2H2YpvQ5u2/Yt6CRpLIUVVh8SGg1+gFA==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-x64-gnu@1.13.4':
+ resolution: {integrity: sha512-rSUcxgpFF0L8Fk1CbUf946XCX1CRp6eaHfKqplqFNWCHv8HyqAtSFvgCHhT+bXru6Ca/p3sLC775SUeSWhsJ9w==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-linux-x64-musl@1.13.4':
+ resolution: {integrity: sha512-qY77eFUvmdXNSmTW+I1fsz4enDuB0I2fE7gy6l9O4koSfjcCxkXw2X8x0lmKLm3FRiINS1XvZSg2G+q4NNQCRQ==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-win32-arm64-msvc@1.13.4':
+ resolution: {integrity: sha512-xjPeDrOf6elCokxuyxwoskM00JJFQMTT2hTQZE24okjG3JiXzSFV+TmzYSp+LWNxPpnufnUUy/9Ee8+AcpslGw==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@swc/core-win32-ia32-msvc@1.13.4':
+ resolution: {integrity: sha512-Ta+Bblc9tE9X9vQlpa3r3+mVnHYdKn09QsZ6qQHvuXGKWSS99DiyxKTYX2vxwMuoTObR0BHvnhNbaGZSV1VwNA==}
+ engines: {node: '>=10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@swc/core-win32-x64-msvc@1.13.4':
+ resolution: {integrity: sha512-pHnb4QwGiuWs4Z9ePSgJ48HP3NZIno6l75SB8YLCiPVDiLhvCLKEjz/caPRsFsmet9BEP8e3bAf2MV8MXgaTSg==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@swc/core@1.13.4':
+ resolution: {integrity: sha512-bCq2GCuKV16DSOOEdaRqHMm1Ok4YEoLoNdgdzp8BS/Hxxr/0NVCHBUgRLLRy/TlJGv20Idx+djd5FIDvsnqMaw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@swc/helpers': '>=0.5.17'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+
+ '@swc/counter@0.1.3':
+ resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@swc/types@0.1.24':
+ resolution: {integrity: sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==}
+
+ '@tybys/wasm-util@0.10.0':
+ resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
+
+ '@types/big.js@6.2.2':
+ resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/node@22.17.2':
+ resolution: {integrity: sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w==}
+
+ '@types/prop-types@15.7.15':
+ resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
+
+ '@types/react@18.0.38':
+ resolution: {integrity: sha512-ExsidLLSzYj4cvaQjGnQCk4HFfVT9+EZ9XZsQ8Hsrcn8QNgXtpZ3m9vSIC2MWtx7jHictK6wYhQgGh6ic58oOw==}
+
+ '@types/scheduler@0.26.0':
+ resolution: {integrity: sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA==}
+
+ '@vitejs/plugin-react-swc@4.0.1':
+ resolution: {integrity: sha512-NQhPjysi5duItyrMd5JWZFf2vNOuSMyw+EoZyTBDzk+DkfYD8WNrsUs09sELV2cr1P15nufsN25hsUBt4CKF9Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ vite: ^4 || ^5 || ^6 || ^7
+
+ abort-controller@3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.2.0:
+ resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ archiver-utils@5.0.2:
+ resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==}
+ engines: {node: '>= 14'}
+
+ archiver@7.0.1:
+ resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==}
+ engines: {node: '>= 14'}
+
+ async@3.2.6:
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+
+ b4a@1.6.7:
+ resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ bare-events@2.6.1:
+ resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ buffer-crc32@1.0.0:
+ resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
+ engines: {node: '>=8.0.0'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ chalk@5.6.0:
+ resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@14.0.0:
+ resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==}
+ engines: {node: '>=20'}
+
+ compress-commons@6.0.2:
+ resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==}
+ engines: {node: '>= 14'}
+
+ core-js@3.45.1:
+ resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ crc-32@1.2.2:
+ resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+
+ crc32-stream@6.0.0:
+ resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==}
+ engines: {node: '>= 14'}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ esbuild@0.25.9:
+ resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ event-target-shim@5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+
+ events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
+ fast-fifo@1.3.2:
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
+
+ fast-xml-parser@5.2.5:
+ resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==}
+ hasBin: true
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
+ glob@11.0.3:
+ resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ 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-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jackspeak@4.1.1:
+ resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
+ engines: {node: 20 || >=22}
+
+ jiti@2.5.1:
+ resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
+ hasBin: true
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ lazystream@1.0.1:
+ resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
+ engines: {node: '>= 0.6.3'}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@11.1.0:
+ resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==}
+ engines: {node: 20 || >=22}
+
+ magic-string@0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
+ mendix@10.24.77222:
+ resolution: {integrity: sha512-sxDa9DrGFJY65bE1XbREozEUWmYKZUc+cmATxq61mK8qMGININaN0+qCat/2Qb6iIMlcid8JUxUL7szDgRonYQ==}
+
+ minimatch@10.0.3:
+ resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
+ engines: {node: 20 || >=22}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-scurry@2.0.0:
+ resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
+ engines: {node: 20 || >=22}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+ readable-stream@4.7.0:
+ resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ readdir-glob@1.1.3:
+ resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
+
+ rollup@4.46.4:
+ resolution: {integrity: sha512-YbxoxvoqNg9zAmw4+vzh1FkGAiZRK+LhnSrbSrSXMdZYsRPDWoshcSd/pldKRO6lWzv/e9TiJAVQyirYIeSIPQ==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ rsbuild-plugin-dts@0.12.2:
+ resolution: {integrity: sha512-qI7wwT7R6T5LzuwcBWt6dZYaS1Fv5Tg2D3OHbAX9MXYn2oJ3eJjdwXU2LcLALd1CpXUPaQCjOTHRMJzHT0++JQ==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ '@microsoft/api-extractor': ^7
+ '@rsbuild/core': 1.x
+ typescript: ^5
+ peerDependenciesMeta:
+ '@microsoft/api-extractor':
+ optional: true
+ typescript:
+ optional: true
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ streamx@2.22.1:
+ resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+ 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-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strnum@2.1.1:
+ resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==}
+
+ tar-stream@3.1.7:
+ resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
+
+ text-decoder@1.2.3:
+ resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
+
+ tinyglobby@0.2.14:
+ resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
+ engines: {node: '>=12.0.0'}
+
+ tsconfig-paths@4.2.0:
+ resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
+ engines: {node: '>=6'}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-fest@4.41.0:
+ resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
+ engines: {node: '>=16'}
+
+ typescript@5.9.2:
+ resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ vite@7.1.3:
+ resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ zip-a-folder@3.1.9:
+ resolution: {integrity: sha512-0TPP3eK5mbZxHnOE8w/Jg6gwxsxZOrA3hXHMfC3I4mcTvyJwNt7GZP8i6uiAMVNu43QTmVz0ngEMKcjgpLZLmQ==}
+
+ zip-stream@6.0.1:
+ resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
+ engines: {node: '>= 14'}
+
+snapshots:
+
+ '@ast-grep/napi-darwin-arm64@0.37.0':
+ optional: true
+
+ '@ast-grep/napi-darwin-x64@0.37.0':
+ optional: true
+
+ '@ast-grep/napi-linux-arm64-gnu@0.37.0':
+ optional: true
+
+ '@ast-grep/napi-linux-arm64-musl@0.37.0':
+ optional: true
+
+ '@ast-grep/napi-linux-x64-gnu@0.37.0':
+ optional: true
+
+ '@ast-grep/napi-linux-x64-musl@0.37.0':
+ optional: true
+
+ '@ast-grep/napi-win32-arm64-msvc@0.37.0':
+ optional: true
+
+ '@ast-grep/napi-win32-ia32-msvc@0.37.0':
+ optional: true
+
+ '@ast-grep/napi-win32-x64-msvc@0.37.0':
+ optional: true
+
+ '@ast-grep/napi@0.37.0':
+ optionalDependencies:
+ '@ast-grep/napi-darwin-arm64': 0.37.0
+ '@ast-grep/napi-darwin-x64': 0.37.0
+ '@ast-grep/napi-linux-arm64-gnu': 0.37.0
+ '@ast-grep/napi-linux-arm64-musl': 0.37.0
+ '@ast-grep/napi-linux-x64-gnu': 0.37.0
+ '@ast-grep/napi-linux-x64-musl': 0.37.0
+ '@ast-grep/napi-win32-arm64-msvc': 0.37.0
+ '@ast-grep/napi-win32-ia32-msvc': 0.37.0
+ '@ast-grep/napi-win32-x64-msvc': 0.37.0
+
+ '@emnapi/core@1.4.5':
+ dependencies:
+ '@emnapi/wasi-threads': 1.0.4
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.4.5':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.0.4':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@esbuild/aix-ppc64@0.25.9':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.9':
+ optional: true
+
+ '@esbuild/android-arm@0.25.9':
+ optional: true
+
+ '@esbuild/android-x64@0.25.9':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.25.9':
+ optional: true
+
+ '@esbuild/darwin-x64@0.25.9':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.25.9':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.25.9':
+ optional: true
+
+ '@esbuild/linux-arm64@0.25.9':
+ optional: true
+
+ '@esbuild/linux-arm@0.25.9':
+ optional: true
+
+ '@esbuild/linux-ia32@0.25.9':
+ optional: true
+
+ '@esbuild/linux-loong64@0.25.9':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.25.9':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.25.9':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.25.9':
+ optional: true
+
+ '@esbuild/linux-s390x@0.25.9':
+ optional: true
+
+ '@esbuild/linux-x64@0.25.9':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.9':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.25.9':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.25.9':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.25.9':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.25.9':
+ optional: true
+
+ '@esbuild/sunos-x64@0.25.9':
+ optional: true
+
+ '@esbuild/win32-arm64@0.25.9':
+ optional: true
+
+ '@esbuild/win32-ia32@0.25.9':
+ optional: true
+
+ '@esbuild/win32-x64@0.25.9':
+ optional: true
+
+ '@isaacs/balanced-match@4.0.1': {}
+
+ '@isaacs/brace-expansion@5.0.0':
+ dependencies:
+ '@isaacs/balanced-match': 4.0.1
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@module-federation/error-codes@0.18.0': {}
+
+ '@module-federation/runtime-core@0.18.0':
+ dependencies:
+ '@module-federation/error-codes': 0.18.0
+ '@module-federation/sdk': 0.18.0
+
+ '@module-federation/runtime-tools@0.18.0':
+ dependencies:
+ '@module-federation/runtime': 0.18.0
+ '@module-federation/webpack-bundler-runtime': 0.18.0
+
+ '@module-federation/runtime@0.18.0':
+ dependencies:
+ '@module-federation/error-codes': 0.18.0
+ '@module-federation/runtime-core': 0.18.0
+ '@module-federation/sdk': 0.18.0
+
+ '@module-federation/sdk@0.18.0': {}
+
+ '@module-federation/webpack-bundler-runtime@0.18.0':
+ dependencies:
+ '@module-federation/runtime': 0.18.0
+ '@module-federation/sdk': 0.18.0
+
+ '@napi-rs/wasm-runtime@1.0.3':
+ dependencies:
+ '@emnapi/core': 1.4.5
+ '@emnapi/runtime': 1.4.5
+ '@tybys/wasm-util': 0.10.0
+ optional: true
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.0-beta.32': {}
+
+ '@rollup/rollup-android-arm-eabi@4.46.4':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.46.4':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.46.4':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.46.4':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.46.4':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.46.4':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.46.4':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.46.4':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.46.4':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.46.4':
+ optional: true
+
+ '@rsbuild/core@1.5.0-beta.4':
+ dependencies:
+ '@rspack/core': 1.5.0-beta.1(@swc/helpers@0.5.17)
+ '@rspack/lite-tapable': 1.0.1
+ '@swc/helpers': 0.5.17
+ core-js: 3.45.1
+ jiti: 2.5.1
+
+ '@rslib/core@0.12.2(typescript@5.9.2)':
+ dependencies:
+ '@rsbuild/core': 1.5.0-beta.4
+ rsbuild-plugin-dts: 0.12.2(@rsbuild/core@1.5.0-beta.4)(typescript@5.9.2)
+ tinyglobby: 0.2.14
+ optionalDependencies:
+ typescript: 5.9.2
+
+ '@rspack/binding-darwin-arm64@1.5.0-beta.1':
+ optional: true
+
+ '@rspack/binding-darwin-x64@1.5.0-beta.1':
+ optional: true
+
+ '@rspack/binding-linux-arm64-gnu@1.5.0-beta.1':
+ optional: true
+
+ '@rspack/binding-linux-arm64-musl@1.5.0-beta.1':
+ optional: true
+
+ '@rspack/binding-linux-x64-gnu@1.5.0-beta.1':
+ optional: true
+
+ '@rspack/binding-linux-x64-musl@1.5.0-beta.1':
+ optional: true
+
+ '@rspack/binding-wasm32-wasi@1.5.0-beta.1':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.0.3
+ optional: true
+
+ '@rspack/binding-win32-arm64-msvc@1.5.0-beta.1':
+ optional: true
+
+ '@rspack/binding-win32-ia32-msvc@1.5.0-beta.1':
+ optional: true
+
+ '@rspack/binding-win32-x64-msvc@1.5.0-beta.1':
+ optional: true
+
+ '@rspack/binding@1.5.0-beta.1':
+ optionalDependencies:
+ '@rspack/binding-darwin-arm64': 1.5.0-beta.1
+ '@rspack/binding-darwin-x64': 1.5.0-beta.1
+ '@rspack/binding-linux-arm64-gnu': 1.5.0-beta.1
+ '@rspack/binding-linux-arm64-musl': 1.5.0-beta.1
+ '@rspack/binding-linux-x64-gnu': 1.5.0-beta.1
+ '@rspack/binding-linux-x64-musl': 1.5.0-beta.1
+ '@rspack/binding-wasm32-wasi': 1.5.0-beta.1
+ '@rspack/binding-win32-arm64-msvc': 1.5.0-beta.1
+ '@rspack/binding-win32-ia32-msvc': 1.5.0-beta.1
+ '@rspack/binding-win32-x64-msvc': 1.5.0-beta.1
+
+ '@rspack/core@1.5.0-beta.1(@swc/helpers@0.5.17)':
+ dependencies:
+ '@module-federation/runtime-tools': 0.18.0
+ '@rspack/binding': 1.5.0-beta.1
+ '@rspack/lite-tapable': 1.0.1
+ optionalDependencies:
+ '@swc/helpers': 0.5.17
+
+ '@rspack/lite-tapable@1.0.1': {}
+
+ '@swc/core-darwin-arm64@1.13.4':
+ optional: true
+
+ '@swc/core-darwin-x64@1.13.4':
+ optional: true
+
+ '@swc/core-linux-arm-gnueabihf@1.13.4':
+ optional: true
+
+ '@swc/core-linux-arm64-gnu@1.13.4':
+ optional: true
+
+ '@swc/core-linux-arm64-musl@1.13.4':
+ optional: true
+
+ '@swc/core-linux-x64-gnu@1.13.4':
+ optional: true
+
+ '@swc/core-linux-x64-musl@1.13.4':
+ optional: true
+
+ '@swc/core-win32-arm64-msvc@1.13.4':
+ optional: true
+
+ '@swc/core-win32-ia32-msvc@1.13.4':
+ optional: true
+
+ '@swc/core-win32-x64-msvc@1.13.4':
+ optional: true
+
+ '@swc/core@1.13.4(@swc/helpers@0.5.17)':
+ dependencies:
+ '@swc/counter': 0.1.3
+ '@swc/types': 0.1.24
+ optionalDependencies:
+ '@swc/core-darwin-arm64': 1.13.4
+ '@swc/core-darwin-x64': 1.13.4
+ '@swc/core-linux-arm-gnueabihf': 1.13.4
+ '@swc/core-linux-arm64-gnu': 1.13.4
+ '@swc/core-linux-arm64-musl': 1.13.4
+ '@swc/core-linux-x64-gnu': 1.13.4
+ '@swc/core-linux-x64-musl': 1.13.4
+ '@swc/core-win32-arm64-msvc': 1.13.4
+ '@swc/core-win32-ia32-msvc': 1.13.4
+ '@swc/core-win32-x64-msvc': 1.13.4
+ '@swc/helpers': 0.5.17
+
+ '@swc/counter@0.1.3': {}
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@swc/types@0.1.24':
+ dependencies:
+ '@swc/counter': 0.1.3
+
+ '@tybys/wasm-util@0.10.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/big.js@6.2.2': {}
+
+ '@types/estree@1.0.8': {}
+
+ '@types/node@22.17.2':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/prop-types@15.7.15': {}
+
+ '@types/react@18.0.38':
+ dependencies:
+ '@types/prop-types': 15.7.15
+ '@types/scheduler': 0.26.0
+ csstype: 3.1.3
+
+ '@types/scheduler@0.26.0': {}
+
+ '@vitejs/plugin-react-swc@4.0.1(@swc/helpers@0.5.17)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1))':
+ dependencies:
+ '@rolldown/pluginutils': 1.0.0-beta.32
+ '@swc/core': 1.13.4(@swc/helpers@0.5.17)
+ vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)
+ transitivePeerDependencies:
+ - '@swc/helpers'
+
+ abort-controller@3.0.0:
+ dependencies:
+ event-target-shim: 5.0.1
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.2.0: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.1: {}
+
+ archiver-utils@5.0.2:
+ dependencies:
+ glob: 10.4.5
+ graceful-fs: 4.2.11
+ is-stream: 2.0.1
+ lazystream: 1.0.1
+ lodash: 4.17.21
+ normalize-path: 3.0.0
+ readable-stream: 4.7.0
+
+ archiver@7.0.1:
+ dependencies:
+ archiver-utils: 5.0.2
+ async: 3.2.6
+ buffer-crc32: 1.0.0
+ readable-stream: 4.7.0
+ readdir-glob: 1.1.3
+ tar-stream: 3.1.7
+ zip-stream: 6.0.1
+
+ async@3.2.6: {}
+
+ b4a@1.6.7: {}
+
+ balanced-match@1.0.2: {}
+
+ bare-events@2.6.1:
+ optional: true
+
+ base64-js@1.5.1: {}
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ buffer-crc32@1.0.0: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ chalk@5.6.0: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@14.0.0: {}
+
+ compress-commons@6.0.2:
+ dependencies:
+ crc-32: 1.2.2
+ crc32-stream: 6.0.0
+ is-stream: 2.0.1
+ normalize-path: 3.0.0
+ readable-stream: 4.7.0
+
+ core-js@3.45.1: {}
+
+ core-util-is@1.0.3: {}
+
+ crc-32@1.2.2: {}
+
+ crc32-stream@6.0.0:
+ dependencies:
+ crc-32: 1.2.2
+ readable-stream: 4.7.0
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ csstype@3.1.3: {}
+
+ eastasianwidth@0.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ esbuild@0.25.9:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.9
+ '@esbuild/android-arm': 0.25.9
+ '@esbuild/android-arm64': 0.25.9
+ '@esbuild/android-x64': 0.25.9
+ '@esbuild/darwin-arm64': 0.25.9
+ '@esbuild/darwin-x64': 0.25.9
+ '@esbuild/freebsd-arm64': 0.25.9
+ '@esbuild/freebsd-x64': 0.25.9
+ '@esbuild/linux-arm': 0.25.9
+ '@esbuild/linux-arm64': 0.25.9
+ '@esbuild/linux-ia32': 0.25.9
+ '@esbuild/linux-loong64': 0.25.9
+ '@esbuild/linux-mips64el': 0.25.9
+ '@esbuild/linux-ppc64': 0.25.9
+ '@esbuild/linux-riscv64': 0.25.9
+ '@esbuild/linux-s390x': 0.25.9
+ '@esbuild/linux-x64': 0.25.9
+ '@esbuild/netbsd-arm64': 0.25.9
+ '@esbuild/netbsd-x64': 0.25.9
+ '@esbuild/openbsd-arm64': 0.25.9
+ '@esbuild/openbsd-x64': 0.25.9
+ '@esbuild/openharmony-arm64': 0.25.9
+ '@esbuild/sunos-x64': 0.25.9
+ '@esbuild/win32-arm64': 0.25.9
+ '@esbuild/win32-ia32': 0.25.9
+ '@esbuild/win32-x64': 0.25.9
+
+ event-target-shim@5.0.1: {}
+
+ events@3.3.0: {}
+
+ fast-fifo@1.3.2: {}
+
+ fast-xml-parser@5.2.5:
+ dependencies:
+ strnum: 2.1.1
+
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ fsevents@2.3.3:
+ optional: true
+
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ glob@11.0.3:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 4.1.1
+ minimatch: 10.0.3
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 2.0.0
+
+ graceful-fs@4.2.11: {}
+
+ ieee754@1.2.1: {}
+
+ inherits@2.0.4: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-stream@2.0.1: {}
+
+ isarray@1.0.0: {}
+
+ isexe@2.0.0: {}
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jackspeak@4.1.1:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+
+ jiti@2.5.1: {}
+
+ json5@2.2.3: {}
+
+ lazystream@1.0.1:
+ dependencies:
+ readable-stream: 2.3.8
+
+ lodash@4.17.21: {}
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@11.1.0: {}
+
+ magic-string@0.30.17:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ mendix@10.24.77222:
+ dependencies:
+ '@types/big.js': 6.2.2
+ '@types/react': 18.0.38
+
+ minimatch@10.0.3:
+ dependencies:
+ '@isaacs/brace-expansion': 5.0.0
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimist@1.2.8: {}
+
+ minipass@7.1.2: {}
+
+ nanoid@3.3.11: {}
+
+ normalize-path@3.0.0: {}
+
+ package-json-from-dist@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ path-scurry@2.0.0:
+ dependencies:
+ lru-cache: 11.1.0
+ minipass: 7.1.2
+
+ picocolors@1.1.1: {}
+
+ picomatch@4.0.3: {}
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ process-nextick-args@2.0.1: {}
+
+ process@0.11.10: {}
+
+ readable-stream@2.3.8:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ readable-stream@4.7.0:
+ dependencies:
+ abort-controller: 3.0.0
+ buffer: 6.0.3
+ events: 3.3.0
+ process: 0.11.10
+ string_decoder: 1.3.0
+
+ readdir-glob@1.1.3:
+ dependencies:
+ minimatch: 5.1.6
+
+ rollup@4.46.4:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.46.4
+ '@rollup/rollup-android-arm64': 4.46.4
+ '@rollup/rollup-darwin-arm64': 4.46.4
+ '@rollup/rollup-darwin-x64': 4.46.4
+ '@rollup/rollup-freebsd-arm64': 4.46.4
+ '@rollup/rollup-freebsd-x64': 4.46.4
+ '@rollup/rollup-linux-arm-gnueabihf': 4.46.4
+ '@rollup/rollup-linux-arm-musleabihf': 4.46.4
+ '@rollup/rollup-linux-arm64-gnu': 4.46.4
+ '@rollup/rollup-linux-arm64-musl': 4.46.4
+ '@rollup/rollup-linux-loongarch64-gnu': 4.46.4
+ '@rollup/rollup-linux-ppc64-gnu': 4.46.4
+ '@rollup/rollup-linux-riscv64-gnu': 4.46.4
+ '@rollup/rollup-linux-riscv64-musl': 4.46.4
+ '@rollup/rollup-linux-s390x-gnu': 4.46.4
+ '@rollup/rollup-linux-x64-gnu': 4.46.4
+ '@rollup/rollup-linux-x64-musl': 4.46.4
+ '@rollup/rollup-win32-arm64-msvc': 4.46.4
+ '@rollup/rollup-win32-ia32-msvc': 4.46.4
+ '@rollup/rollup-win32-x64-msvc': 4.46.4
+ fsevents: 2.3.3
+
+ rsbuild-plugin-dts@0.12.2(@rsbuild/core@1.5.0-beta.4)(typescript@5.9.2):
+ dependencies:
+ '@ast-grep/napi': 0.37.0
+ '@rsbuild/core': 1.5.0-beta.4
+ magic-string: 0.30.17
+ picocolors: 1.1.1
+ tinyglobby: 0.2.14
+ tsconfig-paths: 4.2.0
+ optionalDependencies:
+ typescript: 5.9.2
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ signal-exit@4.1.0: {}
+
+ source-map-js@1.2.1: {}
+
+ streamx@2.22.1:
+ dependencies:
+ fast-fifo: 1.3.2
+ text-decoder: 1.2.3
+ optionalDependencies:
+ bare-events: 2.6.1
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.2.0
+
+ strip-bom@3.0.0: {}
+
+ strnum@2.1.1: {}
+
+ tar-stream@3.1.7:
+ dependencies:
+ b4a: 1.6.7
+ fast-fifo: 1.3.2
+ streamx: 2.22.1
+
+ text-decoder@1.2.3:
+ dependencies:
+ b4a: 1.6.7
+
+ tinyglobby@0.2.14:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
+ tsconfig-paths@4.2.0:
+ dependencies:
+ json5: 2.2.3
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
+ tslib@2.8.1: {}
+
+ type-fest@4.41.0: {}
+
+ typescript@5.9.2: {}
+
+ undici-types@6.21.0: {}
+
+ util-deprecate@1.0.2: {}
+
+ vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1):
+ dependencies:
+ esbuild: 0.25.9
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.46.4
+ tinyglobby: 0.2.14
+ optionalDependencies:
+ '@types/node': 22.17.2
+ fsevents: 2.3.3
+ jiti: 2.5.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ zip-a-folder@3.1.9:
+ dependencies:
+ archiver: 7.0.1
+ glob: 11.0.3
+ is-glob: 4.0.3
+
+ zip-stream@6.0.1:
+ dependencies:
+ archiver-utils: 5.0.2
+ compress-commons: 6.0.2
+ readable-stream: 4.7.0
diff --git a/rslib.config.ts b/rslib.config.ts
index f51f381..70632f4 100644
--- a/rslib.config.ts
+++ b/rslib.config.ts
@@ -4,14 +4,50 @@ export default defineConfig({
lib: [
{
format: 'cjs',
- bundle: true
+ bundle: true,
+ dts: true,
+ source: {
+ entry: {
+ cli: 'src/cli.ts'
+ }
+ },
+ output: {
+ filename: {
+ js: '[name].js'
+ }
+ }
+ },
+ {
+ format: 'esm',
+ bundle: true,
+ dts: true,
+ source: {
+ entry: {
+ index: 'src/index.ts'
+ }
+ },
+ output: {
+ filename: {
+ js: '[name].mjs'
+ }
+ }
+ },
+ {
+ format: 'cjs',
+ bundle: true,
+ dts: false,
+ source: {
+ entry: {
+ index: 'src/index.ts'
+ }
+ },
+ output: {
+ filename: {
+ js: '[name].cjs'
+ }
+ }
}
],
- source: {
- entry: {
- index: 'src/cli.ts'
- }
- },
output: {
minify: {
js: true,
diff --git a/src/commands/build/web/index.ts b/src/commands/build/web/index.ts
index 7c13170..c880620 100644
--- a/src/commands/build/web/index.ts
+++ b/src/commands/build/web/index.ts
@@ -3,7 +3,7 @@ import path from 'path';
import { InlineConfig, UserConfig, build as viteBuild } from 'vite';
import { zip } from 'zip-a-folder';
-import { COLOR_ERROR, COLOR_GREEN, DIST_DIRECTORY_NAME, PROJECT_DIRECTORY, WEB_OUTPUT_DIRECTORY } from '../../../constants';
+import { COLOR_ERROR, COLOR_GREEN, DIST_DIRECTORY_NAME, PROJECT_DIRECTORY, VITE_CONFIGURATION_FILENAME, WEB_OUTPUT_DIRECTORY } from '../../../constants';
import pathIsExists from '../../../utils/pathIsExists';
import getWidgetVersion from '../../../utils/getWidgetVersion';
import showMessage from '../../../utils/showMessage';
@@ -11,9 +11,29 @@ import { getEditorConfigDefaultConfig, getEditorPreviewDefaultConfig, getViteDef
import getWidgetName from '../../../utils/getWidgetName';
import getWidgetPackageJson from '../../../utils/getWidgetPackageJson';
import getMendixWidgetDirectory from '../../../utils/getMendixWidgetDirectory';
+import getViteUserConfiguration from '../../../utils/getViteUserConfiguration';
+import { generateTypesFromFile } from '../../../type-generator';
const buildWebCommand = async (isProduction: boolean = false) => {
try {
+ showMessage('Generate types');
+
+ const widgetName = await getWidgetName();
+ const originWidgetXmlPath = path.join(PROJECT_DIRECTORY, `src/${widgetName}.xml`);
+ const typingsPath = path.join(PROJECT_DIRECTORY, 'typings');
+ const typingsDirExists = await pathIsExists(typingsPath);
+
+ if (typingsDirExists) {
+ await fs.rm(typingsPath, { recursive: true, force: true });
+ }
+
+ await fs.mkdir(typingsPath);
+
+ const newTypingsFilePath = path.join(typingsPath, `${widgetName}Props.d.ts`);
+ const typingContents = await generateTypesFromFile(originWidgetXmlPath, 'web');
+
+ await fs.writeFile(newTypingsFilePath, typingContents);
+
showMessage('Remove previous builds');
const distDir = path.join(PROJECT_DIRECTORY, DIST_DIRECTORY_NAME);
@@ -33,22 +53,20 @@ const buildWebCommand = async (isProduction: boolean = false) => {
await fs.mkdir(outputDir);
await fs.mkdir(WEB_OUTPUT_DIRECTORY, { recursive: true });
- const customViteConfigPath = path.join(PROJECT_DIRECTORY, 'vite.config.ts');
+ const customViteConfigPath = path.join(PROJECT_DIRECTORY, VITE_CONFIGURATION_FILENAME);
const viteConfigIsExists = await pathIsExists(customViteConfigPath);
let resultViteConfig: UserConfig;
if (viteConfigIsExists) {
- const userConfig: UserConfig = await import(customViteConfigPath);
+ const userConfig = await getViteUserConfiguration(customViteConfigPath);
- resultViteConfig = await getViteDefaultConfig(isProduction, userConfig);
+ resultViteConfig = await getViteDefaultConfig(false, userConfig);
} else {
- resultViteConfig = await getViteDefaultConfig(isProduction);
+ resultViteConfig = await getViteDefaultConfig(false);
}
- const widgetName = await getWidgetName();
const originPackageXmlPath = path.join(PROJECT_DIRECTORY, 'src/package.xml');
const destPackageXmlPath = path.join(WEB_OUTPUT_DIRECTORY, 'package.xml');
- const originWidgetXmlPath = path.join(PROJECT_DIRECTORY, `src/${widgetName}.xml`);
const destWidgetXmlPath = path.join(WEB_OUTPUT_DIRECTORY, `${widgetName}.xml`);
await fs.copyFile(originPackageXmlPath, destPackageXmlPath);
@@ -94,7 +112,7 @@ const buildWebCommand = async (isProduction: boolean = false) => {
showMessage(`${COLOR_GREEN('Build complete.')}`);
} catch (error) {
- showMessage(`${COLOR_ERROR('Build failed.')}\nError occurred: ${COLOR_ERROR((error as Error).message)}`);
+ showMessage(`${COLOR_ERROR('Build failed.')}\nError occurred: ${COLOR_ERROR((error as Error).stack)}`);
}
};
diff --git a/src/commands/start/web/index.ts b/src/commands/start/web/index.ts
index 3e3d02f..54b6fa4 100644
--- a/src/commands/start/web/index.ts
+++ b/src/commands/start/web/index.ts
@@ -1,48 +1,126 @@
import fs from 'fs/promises';
import path from 'path';
-import { UserConfig, build as viteBuild } from 'vite';
+import { UserConfig, createServer } from 'vite';
+import { PluginOption } from 'vite';
-import { COLOR_ERROR, PROJECT_DIRECTORY } from "../../../constants";
+import { CLI_DIRECTORY, COLOR_ERROR, COLOR_GREEN, PROJECT_DIRECTORY, VITE_CONFIGURATION_FILENAME } from "../../../constants";
import showMessage from "../../../utils/showMessage";
import getViteWatchOutputDirectory from "../../../utils/getViteWatchOutputDirectory";
import pathIsExists from "../../../utils/pathIsExists";
import { getViteDefaultConfig } from '../../../configurations/vite';
+import getWidgetName from '../../../utils/getWidgetName';
+import getViteUserConfiguration from '../../../utils/getViteUserConfiguration';
+import { generateTypesFromFile } from '../../../type-generator';
+import { mendixHotreloadReactPlugin } from '../../../configurations/vite/plugins/mendix-hotreload-react-plugin';
+import { mendixHotreloadReactEsbuildPlugin } from '../../../configurations/vite/plugins/mendix-hotreload-react-esbuild-plugin';
+import { mendixPatchViteClientPlugin } from '../../../configurations/vite/plugins/mendix-patch-vite-client-plugin';
-const startWebCommand = async () => {
- try {
- showMessage('Ready for watch');
+const generateTyping = async () => {
+ const widgetName = await getWidgetName();
+ const originWidgetXmlPath = path.join(PROJECT_DIRECTORY, `src/${widgetName}.xml`);
+ const typingsPath = path.join(PROJECT_DIRECTORY, 'typings');
+ const typingsDirExists = await pathIsExists(typingsPath);
- const distDir = await getViteWatchOutputDirectory();
- const distIsExists = await pathIsExists(distDir);
+ if (typingsDirExists) {
+ await fs.rm(typingsPath, { recursive: true, force: true });
+ }
- if (distIsExists) {
- await fs.rm(distDir, { recursive: true, force: true });
- }
+ await fs.mkdir(typingsPath);
- await fs.mkdir(distDir, { recursive: true });
+ const newTypingsFilePath = path.join(typingsPath, `${widgetName}Props.d.ts`);
+ const typingContents = await generateTypesFromFile(originWidgetXmlPath, 'web');
+
+ await fs.writeFile(newTypingsFilePath, typingContents);
+};
+
+const startWebCommand = async () => {
+ try {
+ showMessage('Start widget server');
+
+ await generateTyping();
- const customViteConfigPath = path.join(PROJECT_DIRECTORY, 'vite.config.ts');
+ const customViteConfigPath = path.join(PROJECT_DIRECTORY, VITE_CONFIGURATION_FILENAME);
const viteConfigIsExists = await pathIsExists(customViteConfigPath);
let resultViteConfig: UserConfig;
+ const widgetName = await getWidgetName();
if (viteConfigIsExists) {
- const userConfig: UserConfig = await import(customViteConfigPath);
+ const userConfig = await getViteUserConfiguration(customViteConfigPath);
- resultViteConfig = await getViteDefaultConfig(userConfig);
+ resultViteConfig = await getViteDefaultConfig(false, userConfig);
} else {
- resultViteConfig = await getViteDefaultConfig();
+ resultViteConfig = await getViteDefaultConfig(false);
}
- showMessage('Start watch');
+ const viteCachePath = path.join(PROJECT_DIRECTORY, 'node_modules/.vite');
+ const viteCachePathExists = await pathIsExists(viteCachePath);
- await viteBuild({
+ if (viteCachePathExists) {
+ await fs.rm(viteCachePath, { recursive: true, force: true });
+ }
+
+ const viteServer = await createServer({
...resultViteConfig,
- build: {
- ...resultViteConfig.build,
- outDir: distDir,
- watch: {},
- }
- })
+ root: PROJECT_DIRECTORY,
+ server: {
+ fs: {
+ strict: false
+ },
+ watch: {
+ usePolling: true,
+ interval: 100
+ },
+ },
+ optimizeDeps: {
+ esbuildOptions: {
+ plugins: [
+ mendixHotreloadReactEsbuildPlugin(),
+ ],
+ }
+ },
+ plugins: [
+ ...resultViteConfig.plugins as PluginOption[],
+ mendixHotreloadReactPlugin(),
+ mendixPatchViteClientPlugin(),
+ {
+ name: 'mendix-xml-watch-plugin',
+ configureServer(server) {
+ server.watcher.on('change', (file) => {
+ if (file.endsWith('xml')) {
+ generateTyping();
+ }
+ });
+ }
+ },
+ ]
+ });
+
+ await viteServer.listen();
+
+ showMessage('Generate hot reload widget');
+
+ const hotReloadTemplate = path.join(CLI_DIRECTORY, 'src/configurations/hotReload/widget.proxy.js.template');
+ const hotReloadContents = await fs.readFile(hotReloadTemplate, 'utf-8');
+ const devServerUrl = viteServer.resolvedUrls?.local[0] || '';
+ const newHotReloadContents = hotReloadContents
+ .replaceAll('{{ WIDGET_NAME }}', widgetName)
+ .replaceAll('{{ DEV_SERVER_URL }}', devServerUrl)
+
+ const distDir = await getViteWatchOutputDirectory();
+ const distIsExists = await pathIsExists(distDir);
+ const hotReloadWidgetPath = path.join(distDir, `${widgetName}.mjs`);
+ const dummyCssPath = path.join(distDir, `${widgetName}.css`);
+
+ if (distIsExists) {
+ await fs.rm(distDir, { recursive: true, force: true });
+ }
+
+ await fs.mkdir(distDir, { recursive: true });
+ await fs.writeFile(hotReloadWidgetPath, newHotReloadContents);
+ await fs.writeFile(dummyCssPath, '');
+
+ showMessage(`${COLOR_GREEN('Widget hot reload is ready!')}`);
+ showMessage(`${COLOR_GREEN('Mendix webpage will refresh shortly. Hot reload will work after refreshing.')}`);
} catch (error) {
showMessage(`${COLOR_ERROR('Build failed.')}\nError occurred: ${COLOR_ERROR((error as Error).message)}`);
}
diff --git a/src/configurations/hotReload/widget.proxy.js.template b/src/configurations/hotReload/widget.proxy.js.template
new file mode 100644
index 0000000..d4396d8
--- /dev/null
+++ b/src/configurations/hotReload/widget.proxy.js.template
@@ -0,0 +1,86 @@
+if (!window.$RefreshReg$) {
+ window.$RefreshReg$ = () => {};
+ window.$RefreshSig$ = () => (type) => type;
+ window.$RefreshRuntime$ = {
+ register: () => {},
+ createSignatureFunctionForTransform: () => () => {},
+ performed: false
+ };
+}
+
+if (!window.__vite_plugin_react_preamble_installed__) {
+ window.__vite_plugin_react_preamble_installed__ = true;
+}
+
+import React from 'react';
+import * as ReactDOM from 'react-dom';
+import * as ReactDOMClient from 'react-dom/client';
+import * as ReactJSXRuntime from 'react/jsx-runtime';
+import * as ReactJSXDevRuntime from 'react/jsx-dev-runtime';
+
+if (!window.React) {
+ window.React = React;
+ window.ReactDOM = ReactDOM.default;
+ window.ReactDOMClient = ReactDOMClient.default;
+ window.ReactJSXRuntime = ReactJSXRuntime.default;
+ window.ReactJSXDevRuntime = ReactJSXDevRuntime.default;
+}
+
+const DEV_SERVER_URL = '{{ DEV_SERVER_URL }}';
+const WIDGET_NAME = '{{ WIDGET_NAME }}';
+
+function WidgetProxy(props) {
+ const [WidgetComponent, setWidgetComponent] = React.useState(null);
+ const [error, setError] = React.useState(null);
+ const [version, setVersion] = React.useState(0);
+ const viteClientRef = React.useRef(null);
+ const [viteClientInitialized, setViteClientInitialized] = React.useState(false);
+
+ const loadWidget = async () => {
+ try {
+ const module = await import(`${DEV_SERVER_URL}src/${WIDGET_NAME}.tsx?t=${Date.now()}`);
+
+ setWidgetComponent(() => module.default || module[WIDGET_NAME]);
+ setError(null);
+ } catch (err) {
+ console.error('Widget loading failed:', err);
+ }
+ };
+
+ const setupViteClient = async () => {
+ await fetch(`${DEV_SERVER_URL}@vite/client`);
+
+ const clientModule = await import(`${DEV_SERVER_URL}@vite/client.mjs?t=${Date.now()}`);
+
+ if (clientModule.createHotContext) {
+ viteClientRef.current = clientModule.createHotContext(`${DEV_SERVER_URL}src/${WIDGET_NAME}.tsx?t=${Date.now()}`);
+ }
+
+ setViteClientInitialized(true);
+ };
+
+ React.useEffect(() => {
+ setupViteClient();
+ }, []);
+
+ React.useEffect(() => {
+ if (viteClientInitialized) {
+ fetch(`${DEV_SERVER_URL}src/${WIDGET_NAME}.tsx`)
+ .then(() => {
+ loadWidget();
+
+ viteClientRef.current.on('vite:afterUpdate', () => {
+ loadWidget();
+ });
+ });
+ }
+ }, [viteClientInitialized]);
+
+ if (!WidgetComponent) {
+ return React.createElement('div', null, 'Loading hot reload widget...');
+ }
+
+ return React.createElement(WidgetComponent, props);
+}
+
+export default WidgetProxy;
\ No newline at end of file
diff --git a/src/configurations/vite/index.ts b/src/configurations/vite/index.ts
index 4792c8a..f214deb 100644
--- a/src/configurations/vite/index.ts
+++ b/src/configurations/vite/index.ts
@@ -5,6 +5,7 @@ import path from "path";
import getWidgetName from "../../utils/getWidgetName";
import { PROJECT_DIRECTORY, WEB_OUTPUT_DIRECTORY } from "../../constants";
import getViteOutputDirectory from "../../utils/getViteOutputDirectory";
+import { PWTConfig } from "../..";
export const getEditorConfigDefaultConfig = async (isProduction: boolean): Promise => {
const widgetName = await getWidgetName();
@@ -64,12 +65,12 @@ export const getEditorPreviewDefaultConfig = async (isProduction: boolean): Prom
};
};
-export const getViteDefaultConfig = async (isProduction: boolean, userCustomConfig?: UserConfig): Promise => {
+export const getViteDefaultConfig = async (isProduction: boolean, userCustomConfig?: PWTConfig): Promise => {
const widgetName = await getWidgetName();
const viteOutputDirectory = await getViteOutputDirectory();
return {
- plugins: [react()],
+ plugins: [react(userCustomConfig?.reactPluginOptions || undefined)],
define: {
'process.env': {},
'process.env.NODE_ENV': isProduction ? '"production"' : '"development"'
diff --git a/src/configurations/vite/plugins/mendix-hotreload-react-esbuild-plugin.ts b/src/configurations/vite/plugins/mendix-hotreload-react-esbuild-plugin.ts
new file mode 100644
index 0000000..3096244
--- /dev/null
+++ b/src/configurations/vite/plugins/mendix-hotreload-react-esbuild-plugin.ts
@@ -0,0 +1,186 @@
+import { Plugin } from "esbuild";
+
+// @note When the React version of Mendix is updated, the following content must also be updated.
+// @todo Depending on the React version, we need to consider whether there is a way to handle this automatically rather than manually.
+export function mendixHotreloadReactEsbuildPlugin(): Plugin {
+ return {
+ name: 'mendix-hotreload-react-esbuild',
+ setup(build) {
+ build.onResolve({ filter: /^react$/ }, (args) => {
+ return {
+ path: 'mendix:react',
+ namespace: 'mendix-react',
+ external: false
+ };
+ });
+
+ build.onResolve({ filter: /^react-dom$/ }, (args) => {
+ return {
+ path: 'mendix:react-dom',
+ namespace: 'mendix-react-dom',
+ external: false
+ };
+ });
+
+ build.onResolve({ filter: /^react-dom\/client$/ }, (args) => {
+ return {
+ path: 'mendix:react-dom/client',
+ namespace: 'mendix-react-dom-client',
+ external: false
+ };
+ });
+
+ build.onResolve({ filter: /^react\/jsx-runtime$/ }, (args) => {
+ return {
+ path: 'mendix:react/jsx-runtime',
+ namespace: 'mendix-react-jsx-runtime',
+ external: false
+ };
+ });
+
+ build.onResolve({ filter: /^react\/jsx-dev-runtime$/ }, (args) => {
+ return {
+ path: 'mendix:react/jsx-dev-runtime',
+ namespace: 'mendix-react-jsx-dev-runtime',
+ external: false
+ };
+ });
+
+ build.onLoad({ filter: /.*/, namespace: 'mendix-react' }, () => {
+ return {
+ contents: `
+ const React = window.React;
+
+ export const Children = React.Children;
+ export const Component = React.Component;
+ export const Fragment = React.Fragment;
+ export const Profiler = React.Profiler;
+ export const PureComponent = React.PureComponent;
+ export const StrictMode = React.StrictMode;
+ export const Suspense = React.Suspense;
+ export const cloneElement = React.cloneElement;
+ export const createContext = React.createContext;
+ export const createElement = React.createElement;
+ export const createFactory = React.createFactory;
+ export const createRef = React.createRef;
+ export const forwardRef = React.forwardRef;
+ export const isValidElement = React.isValidElement;
+ export const lazy = React.lazy;
+ export const memo = React.memo;
+ export const startTransition = React.startTransition;
+ export const unstable_act = React.unstable_act;
+ export const useCallback = React.useCallback;
+ export const useContext = React.useContext;
+ export const useDebugValue = React.useDebugValue;
+ export const useDeferredValue = React.useDeferredValue;
+ export const useEffect = React.useEffect;
+ export const useId = React.useId;
+ export const useImperativeHandle = React.useImperativeHandle;
+ export const useInsertionEffect = React.useInsertionEffect;
+ export const useLayoutEffect = React.useLayoutEffect;
+ export const useMemo = React.useMemo;
+ export const useReducer = React.useReducer;
+ export const useRef = React.useRef;
+ export const useState = React.useState;
+ export const useSyncExternalStore = React.useSyncExternalStore;
+ export const useTransition = React.useTransition;
+ export const version = React.version;
+
+ export default React;
+ `,
+ loader: 'js',
+ };
+ });
+
+ build.onLoad({ filter: /.*/, namespace: 'mendix-react-dom' }, () => {
+ return {
+ contents: `
+ const ReactDOM = window.ReactDOM;
+
+ export const createPortal = ReactDOM.createPortal;
+ export const createRoot = ReactDOM.createRoot;
+ export const findDOMNode = ReactDOM.findDOMNode;
+ export const flushSync = ReactDOM.flushSync;
+ export const hydrate = ReactDOM.hydrate;
+ export const hydrateRoot = ReactDOM.hydrateRoot;
+ export const render = ReactDOM.render;
+ export const unmountComponentAtNode = ReactDOM.unmountComponentAtNode;
+ export const unstable_batchedUpdates = ReactDOM.unstable_batchedUpdates;
+ export const unstable_renderSubtreeIntoContainer = ReactDOM.unstable_renderSubtreeIntoContainer;
+ export const version = ReactDOM.version;
+
+ export default ReactDOM;
+ `,
+ loader: 'js',
+ };
+ });
+
+ build.onLoad({ filter: /.*/, namespace: 'mendix-react-dom-client' }, () => {
+ return {
+ contents: `
+ const ReactDOMClient = window.ReactDOMClient;
+
+ export const createRoot = ReactDOMClient.createRoot;
+ export const hydrateRoot = ReactDOMClient.hydrateRoot;
+
+ export default ReactDOMClient;
+ `,
+ loader: 'js',
+ };
+ });
+
+ build.onLoad({ filter: /.*/, namespace: 'mendix-react-jsx-runtime' }, () => {
+ return {
+ contents: `
+ const ReactJSXRuntime = window.ReactJSXRuntime;
+
+ export const Fragment = ReactJSXRuntime.Fragment;
+ export const jsx = ReactJSXRuntime.jsx;
+ export const jsxs = ReactJSXRuntime.jsxs;
+
+ export default ReactJSXRuntime;
+ `,
+ loader: 'js',
+ };
+ });
+
+ build.onLoad({ filter: /.*/, namespace: 'mendix-react-jsx-dev-runtime' }, () => {
+ return {
+ contents: `
+ const ReactJSXDevRuntime = window.ReactJSXDevRuntime;
+
+ export const Fragment = ReactJSXDevRuntime.Fragment;
+ export const jsxDEV = ReactJSXDevRuntime.jsxDEV;
+
+ export default ReactJSXDevRuntime;
+ `,
+ loader: 'js',
+ };
+ });
+
+ build.onResolve({ filter: /.*node_modules[\\\/]react[\\\/]index\.js$/ }, (args) => {
+ return {
+ path: 'mendix:react',
+ namespace: 'mendix-react',
+ external: false
+ };
+ });
+
+ build.onResolve({ filter: /.*node_modules[\\\/]react-dom[\\\/]index\.js$/ }, (args) => {
+ return {
+ path: 'mendix:react-dom',
+ namespace: 'mendix-react-dom',
+ external: false
+ };
+ });
+
+ build.onResolve({ filter: /.*node_modules[\\\/]react-dom[\\\/]client\.js$/ }, (args) => {
+ return {
+ path: 'mendix:react-dom/client',
+ namespace: 'mendix-react-dom-client',
+ external: false
+ };
+ });
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/configurations/vite/plugins/mendix-hotreload-react-plugin.ts b/src/configurations/vite/plugins/mendix-hotreload-react-plugin.ts
new file mode 100644
index 0000000..91e6880
--- /dev/null
+++ b/src/configurations/vite/plugins/mendix-hotreload-react-plugin.ts
@@ -0,0 +1,129 @@
+import { Plugin } from "vite";
+
+// @note When the React version of Mendix is updated, the following content must also be updated.
+// @todo Depending on the React version, we need to consider whether there is a way to handle this automatically rather than manually.
+export function mendixHotreloadReactPlugin(): Plugin {
+ return {
+ name: 'mendix-hotreload-react-18.2.0',
+ enforce: 'pre',
+ resolveId(id) {
+ if (id === 'react') {
+ return { id: 'mendix:react', external: true };
+ }
+
+ if (id === 'react-dom') {
+ return { id: 'mendix:react-dom', external: true };
+ }
+
+ if (id === 'react-dom/client') {
+ return { id: 'mendix:react-dom/client', external: true };
+ }
+
+ if (id === 'react/jsx-runtime') {
+ return { id: 'mendix:react/jsx-runtime', external: true };
+ }
+
+ if (id === 'react/jsx-dev-runtime') {
+ return { id: 'mendix:react/jsx-dev-runtime', external: true };
+ }
+ },
+ load(id) {
+ if (id === 'mendix:react') {
+ return `
+ const React = window.React;
+
+ export const Children = React.Children;
+ export const Component = React.Component;
+ export const Fragment = React.Fragment;
+ export const Profiler = React.Profiler;
+ export const PureComponent = React.PureComponent;
+ export const StrictMode = React.StrictMode;
+ export const Suspense = React.Suspense;
+ export const cloneElement = React.cloneElement;
+ export const createContext = React.createContext;
+ export const createElement = React.createElement;
+ export const createFactory = React.createFactory;
+ export const createRef = React.createRef;
+ export const forwardRef = React.forwardRef;
+ export const isValidElement = React.isValidElement;
+ export const lazy = React.lazy;
+ export const memo = React.memo;
+ export const startTransition = React.startTransition;
+ export const unstable_act = React.unstable_act;
+ export const useCallback = React.useCallback;
+ export const useContext = React.useContext;
+ export const useDebugValue = React.useDebugValue;
+ export const useDeferredValue = React.useDeferredValue;
+ export const useEffect = React.useEffect;
+ export const useId = React.useId;
+ export const useImperativeHandle = React.useImperativeHandle;
+ export const useInsertionEffect = React.useInsertionEffect;
+ export const useLayoutEffect = React.useLayoutEffect;
+ export const useMemo = React.useMemo;
+ export const useReducer = React.useReducer;
+ export const useRef = React.useRef;
+ export const useState = React.useState;
+ export const useSyncExternalStore = React.useSyncExternalStore;
+ export const useTransition = React.useTransition;
+ export const version = React.version;
+
+ export default React;
+ `;
+ }
+
+ if (id === 'mendix:react-dom') {
+ return `
+ const ReactDOM = window.ReactDOM;
+
+ export const createPortal = ReactDOM.createPortal;
+ export const createRoot = ReactDOM.createRoot;
+ export const findDOMNode = ReactDOM.findDOMNode;
+ export const flushSync = ReactDOM.flushSync;
+ export const hydrate = ReactDOM.hydrate;
+ export const hydrateRoot = ReactDOM.hydrateRoot;
+ export const render = ReactDOM.render;
+ export const unmountComponentAtNode = ReactDOM.unmountComponentAtNode;
+ export const unstable_batchedUpdates = ReactDOM.unstable_batchedUpdates;
+ export const unstable_renderSubtreeIntoContainer = ReactDOM.unstable_renderSubtreeIntoContainer;
+ export const version = ReactDOM.version;
+
+ export default ReactDOM;
+ `;
+ }
+
+ if (id === 'mendix:react-dom/client') {
+ return `
+ const ReactDOMClient = window.ReactDOMClient;
+
+ export const createRoot = ReactDOMClient.createRoot;
+ export const hydrateRoot = ReactDOMClient.hydrateRoot;
+
+ export default ReactDOMClient;
+ `;
+ }
+
+ if (id === 'mendix:react/jsx-runtime') {
+ return `
+ const ReactJSXRuntime = window.ReactJSXRuntime;
+
+ export const Fragment = ReactJSXRuntime.Fragment;
+ export const jsx = ReactJSXRuntime.jsx;
+ export const jsxs = ReactJSXRuntime.jsxs;
+
+ export default ReactJSXRuntime;
+ `;
+ }
+
+ if (id === 'mendix:react/jsx-dev-runtime') {
+ return `
+ const ReactJSXDevRuntime = window.ReactJSXDevRuntime;
+
+ export const Fragment = ReactJSXDevRuntime.Fragment;
+ export const jsxDEV = ReactJSXDevRuntime.jsxDEV;
+
+ export default ReactJSXDevRuntime;
+ `;
+ }
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/configurations/vite/plugins/mendix-patch-vite-client-plugin.ts b/src/configurations/vite/plugins/mendix-patch-vite-client-plugin.ts
new file mode 100644
index 0000000..5513bb2
--- /dev/null
+++ b/src/configurations/vite/plugins/mendix-patch-vite-client-plugin.ts
@@ -0,0 +1,56 @@
+import { Plugin } from "vite";
+
+export function mendixPatchViteClientPlugin(): Plugin {
+ return {
+ name: 'mendix-patch-vite-client',
+ enforce: 'pre',
+ apply: 'serve',
+ configureServer(server) {
+ server.middlewares.use(async (req, res, next) => {
+ const url = req.url || '';
+
+ if (url.includes('@vite/client.mjs')) {
+ const transformed = await server.transformRequest('/@vite/client.mjs');
+ let code = transformed?.code || '';
+ const rePageReload = /const\s+pageReload\s*=\s*debounceReload\(\s*(\d+)\s*\)/;
+ const m = code.match(rePageReload);
+
+ if (m) {
+ const delay = m[1];
+ const injectScript = `
+const __mx_debounceReload = (time) => {
+ let timer;
+ return () => {
+ if (timer) { clearTimeout(timer); timer = null; }
+
+ timer = setTimeout(() => {
+ try {
+ const mx = (typeof window !== 'undefined') ? window.mx : undefined;
+
+ if (mx) {
+ mx.reloadWithState();
+ return;
+ }
+ } catch (e) {
+ console.warn('[patch-vite-client-debounce] mx.reloadWithState failed:', e);
+ }
+
+ location.reload();
+ }, time);
+ };
+};
+ `;
+
+ code = code.replace(rePageReload, `${injectScript}\nconst pageReload = __mx_debounceReload(${delay})`);
+ }
+
+ res.setHeader('Content-Type', 'application/javascript; charset=utf-8');
+ res.end(code);
+ return;
+ }
+
+ next();
+ });
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/constants/index.ts b/src/constants/index.ts
index a16df06..e871067 100644
--- a/src/constants/index.ts
+++ b/src/constants/index.ts
@@ -9,6 +9,8 @@ export const DIST_DIRECTORY_NAME = 'dist';
export const WEB_OUTPUT_DIRECTORY = path.join(PROJECT_DIRECTORY, `/${DIST_DIRECTORY_NAME}/tmp/widgets`);
+export const VITE_CONFIGURATION_FILENAME = 'vite.config.mjs';
+
export const COLOR_NAME = chalk.bold.blueBright;
export const COLOR_ERROR = chalk.bold.red;
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000..944dae6
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,13 @@
+import type { UserConfig } from "vite";
+import reactPlugin from "@vitejs/plugin-react-swc";
+
+export type PWTConfig = UserConfig & {
+ reactPluginOptions?: Parameters[0];
+};
+
+export type PWTConfigFnPromise = () => Promise;
+export type PWTConfigFn = () => PWTConfig | Promise;
+
+export function definePWTConfig(config: PWTConfigFn | PWTConfigFnPromise): PWTConfigFn | PWTConfigFnPromise {
+ return config;
+}
diff --git a/src/type-generator/generator.ts b/src/type-generator/generator.ts
new file mode 100644
index 0000000..372dd79
--- /dev/null
+++ b/src/type-generator/generator.ts
@@ -0,0 +1,146 @@
+import type {
+ WidgetDefinition,
+ Property,
+ PropertyGroup,
+ SystemProperty,
+} from './types';
+import type { GenerateTargetPlatform } from './mendix-types';
+import {
+ mapPropertyTypeToTS,
+ pascalCase,
+ sanitizePropertyKey,
+ formatDescription,
+} from './utils';
+import { getMendixImports, generateMendixImports } from './mendix-types';
+import {
+ extractSystemProperties,
+ hasLabelProperty,
+ generateSystemProps,
+ getSystemPropsImports
+} from './system-props';
+import { generateHeaderComment } from './header';
+
+export function generateTypeDefinition(widget: WidgetDefinition, target: GenerateTargetPlatform): string {
+ const interfaceName = generateInterfaceName(widget.name);
+ const properties = extractAllProperties(widget.properties);
+ const systemProps = extractSystemProperties(widget.properties);
+ const hasLabel = hasLabelProperty(systemProps);
+ const widgetProperties = properties.filter(p => !isSystemProperty(p)) as Property[];
+
+ let output = '';
+
+ output += generateHeaderComment();
+
+ const imports = getMendixImports(widgetProperties, target);
+ const systemImports = getSystemPropsImports({ hasLabel, platform: target });
+ const allImports = [...imports, ...systemImports];
+ const importStatements = generateMendixImports(allImports);
+
+ if (importStatements) {
+ output += importStatements + '\n';
+ }
+
+ output += generateJSDoc(widget);
+ output += `export interface ${interfaceName} {\n`;
+
+ const systemPropsLines = generateSystemProps({ hasLabel, platform: target });
+
+ for (const line of systemPropsLines) {
+ output += ` ${line}\n`;
+ }
+
+ if (systemPropsLines.length > 0 && widgetProperties.length > 0) {
+ output += `\n // Widget properties\n`;
+ }
+
+ for (const property of widgetProperties) {
+ output += generatePropertyDefinition(property, target);
+ }
+
+ output += '}\n';
+
+ return output;
+}
+
+function generateInterfaceName(widgetName: string): string {
+ return `${pascalCase(widgetName)}ContainerProps`;
+}
+
+export function extractAllProperties(properties: PropertyGroup[] | Property[]): (Property | SystemProperty)[] {
+ const result: (Property | SystemProperty)[] = [];
+
+ for (const item of properties) {
+ if (isPropertyGroup(item)) {
+ result.push(...item.properties);
+ } else {
+ result.push(item);
+ }
+ }
+
+ return result;
+}
+
+function isPropertyGroup(item: PropertyGroup | Property | SystemProperty): item is PropertyGroup {
+ return 'caption' in item && 'properties' in item;
+}
+
+function isSystemProperty(item: Property | SystemProperty): item is SystemProperty {
+ return !('type' in item) && 'key' in item;
+}
+
+function generateJSDoc(widget: WidgetDefinition): string {
+ let jsDoc = '/**\n';
+ jsDoc += ` * Props for ${widget.name}\n`;
+
+ if (widget.description) {
+ jsDoc += ` * ${formatDescription(widget.description)}\n`;
+ }
+
+ if (widget.needsEntityContext) {
+ jsDoc += ` * @needsEntityContext true\n`;
+ }
+
+ if (widget.supportedPlatform && widget.supportedPlatform !== 'Web') {
+ jsDoc += ` * @platform ${widget.supportedPlatform}\n`;
+ }
+
+ jsDoc += ' */\n';
+ return jsDoc;
+}
+
+function generatePropertyDefinition(property: Property, target: GenerateTargetPlatform): string {
+ const indent = ' ';
+ let output = '';
+
+ if (property.description) {
+ output += `${indent}/**\n`;
+ output += `${indent} * ${formatDescription(property.description)}\n`;
+
+ if (property.caption && property.caption !== property.description) {
+ output += `${indent} * @caption ${property.caption}\n`;
+ }
+
+ if (property.defaultValue !== undefined && property.defaultValue !== '') {
+ output += `${indent} * @default ${property.defaultValue}\n`;
+ }
+
+ if (property.type === 'attribute' && property.attributeTypes) {
+ output += `${indent} * @attributeTypes ${property.attributeTypes.join(', ')}\n`;
+ }
+
+ if (property.type === 'enumeration' && property.enumerationValues) {
+ const values = property.enumerationValues.map(ev => ev.key).join(', ');
+ output += `${indent} * @enum {${values}}\n`;
+ }
+
+ output += `${indent} */\n`;
+ }
+
+ const propertyKey = sanitizePropertyKey(property.key);
+ const optional = property.required === false ? '?' : '';
+ const propertyType = mapPropertyTypeToTS(property, target);
+
+ output += `${indent}${propertyKey}${optional}: ${propertyType};\n`;
+
+ return output;
+}
\ No newline at end of file
diff --git a/src/type-generator/header.ts b/src/type-generator/header.ts
new file mode 100644
index 0000000..0ff29ba
--- /dev/null
+++ b/src/type-generator/header.ts
@@ -0,0 +1,37 @@
+import { readFileSync } from 'fs';
+import { join } from 'path';
+
+export function getPackageVersion(): string {
+ try {
+ const packageJsonPath = join(process.cwd(), 'node_modules', '@repixelcorp', 'hyper-pwt', 'package.json');
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
+
+ return packageJson.version || 'unknown';
+ } catch {
+ try {
+ const currentDir = process.cwd();
+ const packageJsonPath = join(currentDir, 'package.json');
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
+
+ if (packageJson.name === '@repixelcorp/hyper-pwt') {
+ return packageJson.version || 'unknown';
+ }
+ } catch {
+ return 'unknown';
+ }
+ }
+}
+
+export function generateHeaderComment(): string {
+ const version = getPackageVersion();
+
+ return `/**
+ * This file was automatically generated by @repixelcorp/hyper-pwt v${version}
+ * DO NOT MODIFY THIS FILE DIRECTLY
+ *
+ * To regenerate this file, run the type generator with your widget XML file.
+ * Any manual changes to this file will be lost when the types are regenerated.
+ */
+
+`;
+}
\ No newline at end of file
diff --git a/src/type-generator/index.ts b/src/type-generator/index.ts
new file mode 100644
index 0000000..d9cc96c
--- /dev/null
+++ b/src/type-generator/index.ts
@@ -0,0 +1,25 @@
+import { readFile } from 'fs/promises';
+import { parseWidgetXML } from './parser';
+import { generateTypeDefinition } from './generator';
+import { generatePreviewTypeDefinition } from './preview-types';
+import type { GenerateTargetPlatform } from './mendix-types';
+
+export { parseWidgetXML } from './parser';
+export { generateTypeDefinition } from './generator';
+export { generatePreviewTypeDefinition } from './preview-types';
+export type { WidgetDefinition, Property, PropertyGroup, PropertyType } from './types';
+
+export function generateTypes(xmlContent: string, target: GenerateTargetPlatform): string {
+ const widget = parseWidgetXML(xmlContent);
+ let output = generateTypeDefinition(widget, target);
+
+ output += '\n' + generatePreviewTypeDefinition(widget);
+
+ return output;
+}
+
+export async function generateTypesFromFile(filePath: string, target: GenerateTargetPlatform): Promise {
+ const xmlContent = await readFile(filePath, 'utf-8');
+
+ return generateTypes(xmlContent, target);
+}
\ No newline at end of file
diff --git a/src/type-generator/mendix-types.ts b/src/type-generator/mendix-types.ts
new file mode 100644
index 0000000..6202b37
--- /dev/null
+++ b/src/type-generator/mendix-types.ts
@@ -0,0 +1,347 @@
+import type {
+ Property,
+ AttributeType,
+} from './types';
+
+export interface MendixTypeMapping {
+ type: string;
+ imports: Set;
+}
+
+export type GenerateTargetPlatform = 'web' | 'native';
+
+export function getMendixImports(properties: Property[], target: GenerateTargetPlatform): string[] {
+ const imports = new Set();
+
+ for (const property of properties) {
+ const mapping = mapPropertyToMendixType(property, target);
+
+ mapping.imports.forEach(imp => imports.add(imp));
+ }
+
+ return Array.from(imports).sort();
+}
+
+export function mapPropertyToMendixType(property: Property, platform: GenerateTargetPlatform = 'web'): MendixTypeMapping {
+ const imports = new Set();
+ let type: string;
+
+ switch (property.type) {
+ case 'string':
+ case 'translatableString':
+ type = 'string';
+ break;
+
+ case 'boolean':
+ type = 'boolean';
+ break;
+
+ case 'integer':
+ type = 'number';
+ break;
+
+ case 'decimal':
+ imports.add('Big');
+ type = 'Big';
+ break;
+
+ case 'textTemplate':
+ imports.add('DynamicValue');
+ if (property.dataSource) {
+ imports.add('ListExpressionValue');
+ type = 'ListExpressionValue';
+ } else {
+ type = 'DynamicValue';
+ }
+ break;
+
+ case 'action':
+ if (property.dataSource) {
+ imports.add('ListActionValue');
+ type = 'ListActionValue';
+ } else {
+ imports.add('ActionValue');
+ type = 'ActionValue';
+ }
+ break;
+
+ case 'microflow':
+ case 'nanoflow':
+ imports.add('ActionValue');
+ type = 'ActionValue';
+ break;
+
+ case 'attribute':
+ type = mapAttributeToMendixType(property, imports);
+ break;
+
+ case 'expression':
+ type = mapExpressionToMendixType(property, imports);
+ break;
+
+ case 'datasource':
+ imports.add('ListValue');
+ type = 'ListValue';
+ break;
+
+ case 'icon':
+ imports.add('DynamicValue');
+ if (platform === 'native') {
+ imports.add('NativeIcon');
+ type = 'DynamicValue';
+ } else if (platform === 'web') {
+ imports.add('WebIcon');
+ type = 'DynamicValue';
+ } else {
+ imports.add('WebIcon');
+ imports.add('NativeIcon');
+ type = 'DynamicValue';
+ }
+ break;
+
+ case 'image':
+ imports.add('DynamicValue');
+ if (platform === 'native') {
+ imports.add('NativeImage');
+ type = 'DynamicValue';
+ } else if (platform === 'web') {
+ imports.add('WebImage');
+ type = 'DynamicValue';
+ } else {
+ imports.add('WebImage');
+ imports.add('NativeImage');
+ type = 'DynamicValue';
+ }
+ break;
+
+ case 'file':
+ imports.add('DynamicValue');
+ imports.add('FileValue');
+ type = 'DynamicValue';
+ break;
+
+ case 'widgets':
+ if (property.dataSource) {
+ imports.add('ListWidgetValue');
+ type = 'ListWidgetValue';
+ } else {
+ imports.add('ReactNode');
+ type = 'ReactNode';
+ }
+ break;
+
+ case 'object':
+ if (property.properties && property.properties.length > 0) {
+ type = generateObjectInterface(property);
+ } else {
+ type = 'object';
+ }
+ break;
+
+ case 'entity':
+ imports.add('ObjectItem');
+ type = 'ObjectItem';
+ break;
+
+ case 'entityConstraint':
+ type = 'string';
+ break;
+
+ case 'enumeration':
+ if (property.enumerationValues && property.enumerationValues.length > 0) {
+ type = property.enumerationValues.map(ev => `"${ev.key}"`).join(' | ');
+ } else {
+ type = 'string';
+ }
+ break;
+
+ case 'association':
+ type = mapAssociationToMendixType(property, imports);
+ break;
+
+ case 'selection':
+ type = mapSelectionToMendixType(property, imports);
+ break;
+
+ case 'form':
+ type = 'string';
+ break;
+
+ default:
+ type = 'any';
+ }
+
+ if (property.isList && !['datasource', 'widgets'].includes(property.type)) {
+ type = `${type}[]`;
+ }
+
+ return { type, imports };
+}
+
+function mapAttributeToMendixType(property: Property, imports: Set): string {
+ const baseType = getAttributeBaseType(property.attributeTypes || []);
+
+ if (property.dataSource) {
+ imports.add('ListAttributeValue');
+
+ return `ListAttributeValue<${baseType}>`;
+ } else {
+ imports.add('EditableValue');
+
+ return `EditableValue<${baseType}>`;
+ }
+}
+
+function mapExpressionToMendixType(property: Property, imports: Set): string {
+ const baseType = property.returnType ? mapReturnTypeToTS(property.returnType.type) : 'string';
+
+ if (property.dataSource) {
+ imports.add('ListExpressionValue');
+
+ const typeStr = property.returnType?.isList ? `${baseType}[]` : baseType;
+
+ return `ListExpressionValue<${typeStr}>`;
+ } else {
+ imports.add('DynamicValue');
+
+ const typeStr = property.returnType?.isList ? `${baseType}[]` : baseType;
+
+ return `DynamicValue<${typeStr}>`;
+ }
+}
+
+function mapAssociationToMendixType(property: Property, imports: Set): string {
+ if (!property.associationTypes || property.associationTypes.length === 0) {
+ imports.add('ObjectItem');
+
+ return 'ObjectItem';
+ }
+
+ const assocType = property.associationTypes[0];
+
+ if (assocType === 'Reference') {
+ if (property.dataSource) {
+ imports.add('ListReferenceValue');
+
+ return 'ListReferenceValue';
+ } else {
+ imports.add('ReferenceValue');
+
+ return 'ReferenceValue';
+ }
+ } else if (assocType === 'ReferenceSet') {
+ if (property.dataSource) {
+ imports.add('ListReferenceSetValue');
+
+ return 'ListReferenceSetValue';
+ } else {
+ imports.add('ReferenceSetValue');
+
+ return 'ReferenceSetValue';
+ }
+ }
+
+ imports.add('ObjectItem');
+
+ return 'ObjectItem';
+}
+
+function mapSelectionToMendixType(property: Property, imports: Set): string {
+ if (!property.selectionTypes || property.selectionTypes.length === 0) {
+ imports.add('SelectionSingleValue');
+
+ return 'SelectionSingleValue';
+ }
+
+ const selectionType = property.selectionTypes[0];
+
+ if (selectionType === 'Multi') {
+ imports.add('SelectionMultiValue');
+
+ return 'SelectionMultiValue';
+ } else {
+ imports.add('SelectionSingleValue');
+
+ return 'SelectionSingleValue';
+ }
+}
+
+function getAttributeBaseType(attributeTypes: AttributeType[]): string {
+ if (attributeTypes.length === 0) return 'any';
+
+ const types = attributeTypes.map(type => {
+ switch (type) {
+ case 'String':
+ case 'HashString':
+ case 'Enum':
+ return 'string';
+ case 'Boolean':
+ return 'boolean';
+ case 'Integer':
+ case 'Long':
+ case 'AutoNumber':
+ case 'Float':
+ case 'Currency':
+ return 'number';
+ case 'Decimal':
+ return 'Big';
+ case 'DateTime':
+ return 'Date';
+ case 'Binary':
+ return 'string';
+ default:
+ return 'any';
+ }
+ });
+
+ const uniqueTypes = Array.from(new Set(types));
+ return uniqueTypes.length === 1 ? uniqueTypes[0] : uniqueTypes.join(' | ');
+}
+
+function mapReturnTypeToTS(returnType: string): string {
+ switch (returnType) {
+ case 'Void':
+ return 'void';
+ case 'Boolean':
+ return 'boolean';
+ case 'Integer':
+ case 'Float':
+ return 'number';
+ case 'Decimal':
+ return 'Big';
+ case 'DateTime':
+ return 'Date';
+ case 'String':
+ return 'string';
+ case 'Object':
+ return 'object';
+ default:
+ return 'any';
+ }
+}
+
+function generateObjectInterface(property: Property): string {
+ return `${property.key}Type`;
+}
+
+export function generateMendixImports(imports: string[]): string {
+ if (imports.length === 0) return '';
+
+ const mendixImports = imports.filter(imp =>
+ !['ReactNode'].includes(imp)
+ );
+
+ const reactImports = imports.filter(imp => imp === 'ReactNode');
+
+ let output = '';
+
+ if (reactImports.length > 0) {
+ output += `import { ${reactImports.join(', ')} } from 'react';\n`;
+ }
+
+ if (mendixImports.length > 0) {
+ output += `import { ${mendixImports.join(', ')} } from 'mendix';\n`;
+ }
+
+ return output;
+}
\ No newline at end of file
diff --git a/src/type-generator/parser.ts b/src/type-generator/parser.ts
new file mode 100644
index 0000000..3b8bc77
--- /dev/null
+++ b/src/type-generator/parser.ts
@@ -0,0 +1,194 @@
+import { XMLParser } from 'fast-xml-parser';
+import type {
+ WidgetDefinition,
+ Property,
+ PropertyGroup,
+ SystemProperty,
+ AttributeType,
+ AssociationType,
+ SelectionType,
+ EnumerationValue,
+ ParsedXMLWidget,
+ ParsedXMLProperty,
+ ParsedXMLPropertyGroup,
+ ParsedXMLSystemProperty,
+ ParsedXMLAttributeType,
+ ParsedXMLAssociationType,
+ ParsedXMLSelectionType,
+ ParsedXMLEnumerationValue,
+} from './types';
+import { ensureArray } from './utils';
+
+const parserOptions = {
+ ignoreAttributes: false,
+ attributeNamePrefix: '',
+ textNodeName: '_',
+ parseAttributeValue: false,
+ trimValues: true,
+ parseTrueNumberOnly: false,
+ parseTagValue: false,
+ allowBooleanAttributes: true,
+};
+
+export function parseWidgetXML(xmlContent: string): WidgetDefinition {
+ const parser = new XMLParser(parserOptions);
+ const parsedXML = parser.parse(xmlContent) as ParsedXMLWidget;
+
+ if (!parsedXML.widget) {
+ throw new Error('Invalid widget XML: missing widget element');
+ }
+
+ const widget = parsedXML.widget;
+
+ const widgetDef: WidgetDefinition = {
+ id: widget.id,
+ name: widget.name,
+ description: widget.description,
+ needsEntityContext: widget.needsEntityContext === 'true',
+ pluginWidget: widget.pluginWidget === 'true',
+ offlineCapable: widget.offlineCapable === 'true',
+ supportedPlatform: (widget.supportedPlatform as 'All' | 'Native' | 'Web') || 'Web',
+ properties: [],
+ };
+
+ if (widget.properties) {
+ widgetDef.properties = parseProperties(widget.properties);
+ }
+
+ return widgetDef;
+}
+
+function parseProperties(props: any): PropertyGroup[] | Property[] {
+ if (props.propertyGroup) {
+ const groups = ensureArray(props.propertyGroup);
+
+ return groups.map(group => parsePropertyGroup(group));
+ }
+
+ const properties: Property[] = [];
+
+ if (props.property) {
+ const propsArray = ensureArray(props.property);
+
+ for (const prop of propsArray) {
+ properties.push(parseProperty(prop));
+ }
+ }
+
+ return properties;
+}
+
+function parsePropertyGroup(group: ParsedXMLPropertyGroup): PropertyGroup {
+ const properties: (Property | SystemProperty)[] = [];
+
+ if (group.property) {
+ const props = ensureArray(group.property);
+ for (const prop of props) {
+ properties.push(parseProperty(prop));
+ }
+ }
+
+ if (group.systemProperty) {
+ const sysProps = ensureArray(group.systemProperty);
+ for (const sysProp of sysProps) {
+ properties.push(parseSystemProperty(sysProp));
+ }
+ }
+
+ return {
+ caption: group.caption,
+ properties,
+ };
+}
+
+function parseProperty(prop: ParsedXMLProperty): Property {
+ const property: Property = {
+ key: prop.key,
+ type: prop.type,
+ caption: prop.caption || '',
+ description: prop.description || '',
+ required: prop.required !== 'false',
+ isList: prop.isList === 'true',
+ };
+
+ if (prop.defaultValue !== undefined) {
+ property.defaultValue = prop.defaultValue;
+ }
+
+ if (prop.onChange) {
+ property.onChange = prop.onChange;
+ }
+
+ if (prop.dataSource) {
+ property.dataSource = prop.dataSource;
+ }
+
+ if (prop.attributeTypes) {
+ property.attributeTypes = parseAttributeTypes(prop.attributeTypes);
+ }
+
+ if (prop.associationTypes) {
+ property.associationTypes = parseAssociationTypes(prop.associationTypes);
+ }
+
+ if (prop.selectionTypes) {
+ property.selectionTypes = parseSelectionTypes(prop.selectionTypes);
+ }
+
+ if (prop.enumerationValues) {
+ property.enumerationValues = parseEnumerationValues(prop.enumerationValues);
+ }
+
+ if (prop.properties) {
+ const parsedProps = parseProperties(prop.properties);
+ property.properties = parsedProps.filter(p => !('caption' in p && 'properties' in p)) as Property[];
+ }
+
+ if (prop.returnType) {
+ property.returnType = {
+ type: prop.returnType.type as any,
+ isList: prop.returnType.isList === 'true',
+ };
+ }
+
+ return property;
+}
+
+function parseSystemProperty(sysProp: ParsedXMLSystemProperty): SystemProperty {
+ const systemProperty: SystemProperty = {
+ key: sysProp.key,
+ };
+
+ if (sysProp.category) {
+ systemProperty.category = sysProp.category;
+ }
+
+ return systemProperty;
+}
+
+function parseAttributeTypes(attributeTypes: { attributeType: ParsedXMLAttributeType | ParsedXMLAttributeType[] }): AttributeType[] {
+ const types = ensureArray(attributeTypes.attributeType);
+
+ return types.map(type => type.name);
+}
+
+function parseAssociationTypes(associationTypes: { associationType: ParsedXMLAssociationType | ParsedXMLAssociationType[] }): AssociationType[] {
+ const types = ensureArray(associationTypes.associationType);
+
+ return types.map(type => type.name);
+}
+
+function parseSelectionTypes(selectionTypes: { selectionType: ParsedXMLSelectionType | ParsedXMLSelectionType[] }): SelectionType[] {
+ const types = ensureArray(selectionTypes.selectionType);
+
+ return types.map(type => type.name);
+}
+
+function parseEnumerationValues(enumerationValues: { enumerationValue: ParsedXMLEnumerationValue | ParsedXMLEnumerationValue[] }): EnumerationValue[] {
+ const values = ensureArray(enumerationValues.enumerationValue);
+
+ return values.map(value => ({
+ key: value.key,
+ value: value._ || value.key,
+ }));
+}
\ No newline at end of file
diff --git a/src/type-generator/preview-types.ts b/src/type-generator/preview-types.ts
new file mode 100644
index 0000000..9d61759
--- /dev/null
+++ b/src/type-generator/preview-types.ts
@@ -0,0 +1,221 @@
+import type {
+ WidgetDefinition,
+ Property,
+ PropertyGroup,
+ SystemProperty
+} from './types';
+import {
+ pascalCase,
+ sanitizePropertyKey,
+ formatDescription
+} from './utils';
+import {
+ extractSystemProperties,
+ hasLabelProperty,
+ generatePreviewSystemProps
+} from './system-props';
+
+export function generatePreviewTypeDefinition(
+ widget: WidgetDefinition,
+): string {
+ const interfaceName = `${pascalCase(widget.name)}PreviewProps`;
+ const properties = extractAllProperties(widget.properties);
+ const systemProps = extractSystemProperties(widget.properties);
+ const hasLabel = hasLabelProperty(systemProps);
+ const widgetProperties = properties.filter(p => !isSystemProperty(p)) as Property[];
+
+ let output = '';
+
+ output += generatePreviewImports();
+ output += generatePreviewJSDoc(widget);
+ output += `export interface ${interfaceName} {\n`;
+ output += ' /**\n';
+ output += ' * Whether the widget is in read-only mode\n';
+ output += ' */\n';
+ output += ' readOnly: boolean;\n';
+ output += ' /**\n';
+ output += ' * The render mode of the widget preview\n';
+ output += ' */\n';
+ output += ' renderMode?: "design" | "xray" | "structure";\n';
+
+ const systemPropsLines = generatePreviewSystemProps(hasLabel);
+
+ for (const line of systemPropsLines) {
+ output += ' ' + line + '\n';
+ }
+
+ for (const property of widgetProperties) {
+ output += generatePreviewPropertyDefinition(property);
+ }
+
+ output += '}\n';
+
+ return output;
+}
+
+function generatePreviewImports(): string {
+ const imports: string[] = [];
+
+ imports.push('CSSProperties');
+ imports.push('PreviewValue');
+
+ let output = '';
+
+ if (imports.length > 0) {
+ output += `import type { ${imports.join(', ')} } from 'react';\n\n`;
+ }
+
+ return output;
+}
+
+function generatePreviewJSDoc(widget: WidgetDefinition): string {
+ let jsDoc = '/**\n';
+ jsDoc += ` * Preview props for ${widget.name}\n`;
+
+ if (widget.description) {
+ jsDoc += ` * ${formatDescription(widget.description)}\n`;
+ }
+
+ jsDoc += ' * @preview This interface is used in design mode\n';
+ jsDoc += ' */\n';
+ return jsDoc;
+}
+
+function generatePreviewPropertyDefinition(
+ property: Property,
+): string {
+ const indent = ' ';
+ let output = '';
+
+ if (property.description) {
+ output += `${indent}/**\n`;
+ output += `${indent} * ${formatDescription(property.description)}\n`;
+
+ if (property.caption && property.caption !== property.description) {
+ output += `${indent} * @caption ${property.caption}\n`;
+ }
+
+ output += `${indent} */\n`;
+ }
+
+ const propertyKey = sanitizePropertyKey(property.key);
+ const optional = property.required === false ? '?' : '';
+ const propertyType = mapPropertyToPreviewType(property);
+
+ output += `${indent}${propertyKey}${optional}: ${propertyType};\n`;
+
+ return output;
+}
+
+function mapPropertyToPreviewType(
+ property: Property,
+): string {
+ const { type, isList, enumerationValues } = property;
+
+ let baseType: string;
+
+ switch (type) {
+ case 'string':
+ case 'translatableString':
+ baseType = 'string';
+ break;
+
+ case 'boolean':
+ baseType = 'boolean';
+ break;
+
+ case 'integer':
+ case 'decimal':
+ baseType = 'number';
+ break;
+
+ case 'action':
+ case 'microflow':
+ case 'nanoflow':
+ baseType = '{} | null';
+ break;
+
+ case 'attribute':
+ case 'expression':
+ case 'entityConstraint':
+ baseType = 'string';
+ break;
+
+ case 'textTemplate':
+ baseType = 'string';
+ break;
+
+ case 'datasource':
+ baseType = '{ type: string } | { caption: string } | {}';
+ break;
+
+ case 'icon':
+ case 'image':
+ case 'file':
+ baseType = '{ uri: string } | null';
+ break;
+
+ case 'widgets':
+ baseType = 'PreviewValue | null';
+ break;
+
+ case 'enumeration':
+ if (enumerationValues && enumerationValues.length > 0) {
+ baseType = enumerationValues.map(ev => `"${ev.key}"`).join(' | ');
+ } else {
+ baseType = 'string';
+ }
+ break;
+
+ case 'object':
+ if (property.properties && property.properties.length > 0) {
+ baseType = `${pascalCase(property.key)}PreviewType`;
+ } else {
+ baseType = 'object';
+ }
+ break;
+
+ case 'entity':
+ case 'association':
+ case 'selection':
+ baseType = 'string';
+ break;
+
+ case 'form':
+ baseType = 'string';
+ break;
+
+ default:
+ baseType = 'any';
+ }
+
+ return isList && type !== 'datasource' ? `${baseType}[]` : baseType;
+}
+
+function extractAllProperties(
+ properties: PropertyGroup[] | Property[]
+): (Property | SystemProperty)[] {
+ const result: (Property | SystemProperty)[] = [];
+
+ for (const item of properties) {
+ if (isPropertyGroup(item)) {
+ result.push(...item.properties);
+ } else {
+ result.push(item);
+ }
+ }
+
+ return result;
+}
+
+function isPropertyGroup(
+ item: PropertyGroup | Property | SystemProperty
+): item is PropertyGroup {
+ return 'caption' in item && 'properties' in item;
+}
+
+function isSystemProperty(
+ item: Property | SystemProperty
+): item is SystemProperty {
+ return !('type' in item) && 'key' in item;
+}
\ No newline at end of file
diff --git a/src/type-generator/system-props.ts b/src/type-generator/system-props.ts
new file mode 100644
index 0000000..8b20b02
--- /dev/null
+++ b/src/type-generator/system-props.ts
@@ -0,0 +1,87 @@
+import { GenerateTargetPlatform } from './mendix-types';
+import type { SystemProperty, Property, PropertyGroup } from './types';
+
+export interface SystemPropsConfig {
+ hasLabel?: boolean;
+ platform?: GenerateTargetPlatform;
+}
+
+export function extractSystemProperties(
+ properties: PropertyGroup[] | Property[] | (Property | SystemProperty)[]
+): SystemProperty[] {
+ const systemProps: SystemProperty[] = [];
+
+ for (const item of properties) {
+ if (isPropertyGroup(item)) {
+ for (const prop of item.properties) {
+ if (isSystemProperty(prop)) {
+ systemProps.push(prop);
+ }
+ }
+ } else if (isSystemProperty(item)) {
+ systemProps.push(item);
+ }
+ }
+
+ return systemProps;
+}
+
+export function hasLabelProperty(systemProperties: SystemProperty[]): boolean {
+ return systemProperties.some(prop => prop.key === 'Label');
+}
+
+export function generateSystemProps(config: SystemPropsConfig = {}): string[] {
+ const { hasLabel = false, platform = 'web' } = config;
+ const props: string[] = [];
+
+ props.push('name?: string;');
+
+ if (platform !== 'native') {
+ if (!hasLabel) {
+ props.push('class?: string;');
+ props.push('style?: CSSProperties;');
+ }
+ props.push('tabIndex?: number;');
+ }
+
+ if (hasLabel) {
+ props.push('id?: string;');
+ }
+
+ return props;
+}
+
+export function getSystemPropsImports(config: SystemPropsConfig = {}): string[] {
+ const { platform = 'web' } = config;
+ const imports: string[] = [];
+
+ if (platform !== 'native') {
+ imports.push('CSSProperties');
+ }
+
+ return imports;
+}
+
+export function generatePreviewSystemProps(hasLabel: boolean): string[] {
+ const props: string[] = [];
+
+ if (!hasLabel) {
+ props.push('/**');
+ props.push(' * @deprecated Use class property instead');
+ props.push(' */');
+ props.push('className: string;');
+ props.push('class: string;');
+ props.push('style: string;');
+ props.push('styleObject?: CSSProperties;');
+ }
+
+ return props;
+}
+
+function isPropertyGroup(item: PropertyGroup | Property | SystemProperty): item is PropertyGroup {
+ return 'caption' in item && 'properties' in item;
+}
+
+function isSystemProperty(item: Property | SystemProperty): item is SystemProperty {
+ return !('type' in item) && 'key' in item;
+}
\ No newline at end of file
diff --git a/src/type-generator/types.ts b/src/type-generator/types.ts
new file mode 100644
index 0000000..0398013
--- /dev/null
+++ b/src/type-generator/types.ts
@@ -0,0 +1,174 @@
+export interface WidgetDefinition {
+ id: string;
+ name: string;
+ description: string;
+ needsEntityContext?: boolean;
+ pluginWidget?: boolean;
+ offlineCapable?: boolean;
+ supportedPlatform?: 'All' | 'Native' | 'Web';
+ properties: PropertyGroup[] | Property[];
+}
+
+export interface PropertyGroup {
+ caption: string;
+ properties: (Property | SystemProperty)[];
+}
+
+export interface Property {
+ key: string;
+ type: PropertyType;
+ caption: string;
+ description: string;
+ required?: boolean;
+ isList?: boolean;
+ defaultValue?: string;
+ attributeTypes?: AttributeType[];
+ associationTypes?: AssociationType[];
+ selectionTypes?: SelectionType[];
+ enumerationValues?: EnumerationValue[];
+ properties?: Property[];
+ returnType?: ReturnType;
+ onChange?: string;
+ dataSource?: string;
+}
+
+export interface SystemProperty {
+ key: SystemPropertyKey;
+ category?: string;
+}
+
+export type PropertyType =
+ | 'action'
+ | 'association'
+ | 'attribute'
+ | 'boolean'
+ | 'datasource'
+ | 'decimal'
+ | 'entity'
+ | 'entityConstraint'
+ | 'enumeration'
+ | 'expression'
+ | 'file'
+ | 'form'
+ | 'icon'
+ | 'image'
+ | 'integer'
+ | 'microflow'
+ | 'nanoflow'
+ | 'object'
+ | 'selection'
+ | 'string'
+ | 'translatableString'
+ | 'textTemplate'
+ | 'widgets';
+
+export type AttributeType =
+ | 'AutoNumber'
+ | 'Binary'
+ | 'Boolean'
+ | 'Currency'
+ | 'DateTime'
+ | 'Enum'
+ | 'Float'
+ | 'HashString'
+ | 'Integer'
+ | 'Long'
+ | 'String'
+ | 'Decimal';
+
+export type AssociationType = 'Reference' | 'ReferenceSet';
+
+export type SelectionType = 'None' | 'Single' | 'Multi';
+
+export type SystemPropertyKey =
+ | 'Label'
+ | 'Name'
+ | 'TabIndex'
+ | 'Editability'
+ | 'Visibility';
+
+export interface EnumerationValue {
+ key: string;
+ value: string;
+}
+
+export interface ReturnType {
+ type: 'Void' | 'Boolean' | 'Integer' | 'Float' | 'DateTime' | 'String' | 'Object' | 'Decimal';
+ isList?: boolean;
+}
+
+export interface ParsedXMLWidget {
+ widget: {
+ id: string;
+ pluginWidget?: string;
+ needsEntityContext?: string;
+ offlineCapable?: string;
+ supportedPlatform?: string;
+ name: string;
+ description: string;
+ properties: ParsedXMLProperties;
+ };
+}
+
+export interface ParsedXMLProperties {
+ property?: ParsedXMLProperty | ParsedXMLProperty[];
+ propertyGroup?: ParsedXMLPropertyGroup | ParsedXMLPropertyGroup[];
+ systemProperty?: ParsedXMLSystemProperty | ParsedXMLSystemProperty[];
+}
+
+export interface ParsedXMLPropertyGroup {
+ caption: string;
+ property?: ParsedXMLProperty | ParsedXMLProperty[];
+ systemProperty?: ParsedXMLSystemProperty | ParsedXMLSystemProperty[];
+}
+
+export interface ParsedXMLProperty {
+ key: string;
+ type: PropertyType;
+ required?: string;
+ isList?: string;
+ defaultValue?: string;
+ onChange?: string;
+ dataSource?: string;
+ caption: string;
+ description: string;
+ attributeTypes?: {
+ attributeType: ParsedXMLAttributeType | ParsedXMLAttributeType[];
+ };
+ associationTypes?: {
+ associationType: ParsedXMLAssociationType | ParsedXMLAssociationType[];
+ };
+ selectionTypes?: {
+ selectionType: ParsedXMLSelectionType | ParsedXMLSelectionType[];
+ };
+ enumerationValues?: {
+ enumerationValue: ParsedXMLEnumerationValue | ParsedXMLEnumerationValue[];
+ };
+ properties?: ParsedXMLProperties;
+ returnType?: {
+ type: string;
+ isList?: string;
+ };
+}
+
+export interface ParsedXMLSystemProperty {
+ key: SystemPropertyKey;
+ category?: string;
+}
+
+export interface ParsedXMLAttributeType {
+ name: AttributeType;
+}
+
+export interface ParsedXMLAssociationType {
+ name: AssociationType;
+}
+
+export interface ParsedXMLSelectionType {
+ name: SelectionType;
+}
+
+export interface ParsedXMLEnumerationValue {
+ _: string;
+ key: string;
+}
\ No newline at end of file
diff --git a/src/type-generator/utils.ts b/src/type-generator/utils.ts
new file mode 100644
index 0000000..bb67c80
--- /dev/null
+++ b/src/type-generator/utils.ts
@@ -0,0 +1,88 @@
+import type {
+ AttributeType,
+ Property,
+} from './types';
+import type { GenerateTargetPlatform } from './mendix-types';
+import { mapPropertyToMendixType } from './mendix-types';
+
+export function mapPropertyTypeToTS(property: Property, target?: GenerateTargetPlatform): string {
+ const mapping = mapPropertyToMendixType(property, target);
+
+ return mapping.type;
+}
+
+export function mapAttributeTypeToTS(attributeType: AttributeType): string {
+ switch (attributeType) {
+ case 'String':
+ case 'HashString':
+ case 'Enum':
+ return 'string';
+ case 'Boolean':
+ return 'boolean';
+ case 'Integer':
+ case 'Long':
+ case 'AutoNumber':
+ case 'Float':
+ case 'Currency':
+ case 'Decimal':
+ return 'number';
+
+ case 'DateTime':
+ return 'Date | string';
+
+ case 'Binary':
+ return 'Blob | string';
+
+ default:
+ return 'any';
+ }
+}
+
+export function mapReturnTypeToTS(returnType: string): string {
+ switch (returnType) {
+ case 'Void':
+ return 'void';
+ case 'Boolean':
+ return 'boolean';
+ case 'Integer':
+ case 'Float':
+ case 'Decimal':
+ return 'number';
+ case 'DateTime':
+ return 'Date | string';
+ case 'String':
+ return 'string';
+ case 'Object':
+ return 'object';
+ default:
+ return 'any';
+ }
+}
+
+export function ensureArray(value: T | T[] | undefined): T[] {
+ if (!value) return [];
+ return Array.isArray(value) ? value : [value];
+}
+
+export function pascalCase(str: string): string {
+ return str
+ .split(/[-_\s]+/)
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
+ .join('');
+}
+
+export function sanitizePropertyKey(key: string): string {
+ if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {
+ return key;
+ }
+ return `'${key}'`;
+}
+
+export function formatDescription(description: string): string {
+ return description
+ .trim()
+ .split('\n')
+ .map(line => line.trim())
+ .filter(line => line.length > 0)
+ .join(' ');
+}
\ No newline at end of file
diff --git a/src/utils/getViteUserConfiguration.ts b/src/utils/getViteUserConfiguration.ts
new file mode 100644
index 0000000..3483564
--- /dev/null
+++ b/src/utils/getViteUserConfiguration.ts
@@ -0,0 +1,17 @@
+import { PWTConfig, PWTConfigFn, PWTConfigFnPromise } from "..";
+
+const getViteUserConfiguration = async (path: string): Promise => {
+ const getUserConfig = await import(`file://${path}`);
+ const getUserConfigFn: PWTConfigFn | PWTConfigFnPromise = getUserConfig.default;
+ const userConfig = getUserConfigFn();
+
+ if (userConfig instanceof Promise) {
+ const userConfigValue = await userConfig;
+
+ return userConfigValue;
+ }
+
+ return userConfig;
+};
+
+export default getViteUserConfiguration;
\ No newline at end of file
diff --git a/static/header.png b/static/header.png
new file mode 100644
index 0000000..de85455
Binary files /dev/null and b/static/header.png differ
diff --git a/tools/copy-widget-schema.js b/tools/copy-widget-schema.js
new file mode 100644
index 0000000..9fafc2d
--- /dev/null
+++ b/tools/copy-widget-schema.js
@@ -0,0 +1,20 @@
+const fs = require('fs');
+const path = require('path');
+
+const sourcePath = path.join(__dirname, '..', 'node_modules', 'mendix', 'custom_widget.xsd');
+const targetPath = path.join(__dirname, '..', 'custom_widget.xsd');
+
+try {
+ if (fs.existsSync(sourcePath)) {
+ fs.copyFileSync(sourcePath, targetPath);
+
+ console.log('Successfully copied custom_widget.xsd to project root');
+ } else {
+ console.warn('custom_widget.xsd not found in node_modules/mendix');
+ console.warn('Make sure mendix package is installed');
+ }
+} catch (error) {
+ console.error('Failed to copy custom_widget.xsd:', error.message);
+
+ process.exit(1);
+}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..e52987c
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "include": ["src/**/*"],
+ "exclude": ["node_modules"],
+ "compilerOptions": {
+ "resolveJsonModule": true,
+ "esModuleInterop": true,
+ "lib": ["ESNext"],
+ "module": "preserve",
+ "moduleResolution": "bundler"
+ },
+}
\ No newline at end of file