From 32103ebd0461cb71b3da3e1c2cd1f5ec362896a0 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Mon, 25 Aug 2025 19:23:23 +0900 Subject: [PATCH 01/32] feat: add widget hot reload --- package.json | 97 +- pnpm-lock.yaml | 3686 ++++++++--------- src/commands/start/web/index.ts | 143 +- .../hotReload/widget.proxy.js.template | 82 + 4 files changed, 2095 insertions(+), 1913 deletions(-) create mode 100644 src/configurations/hotReload/widget.proxy.js.template diff --git a/package.json b/package.json index 06a74f5..49e41be 100644 --- a/package.json +++ b/package.json @@ -1,48 +1,49 @@ -{ - "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.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", + "src/configurations/hotReload/**/*" + ], + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a42579..3ffa0a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,1843 +1,1843 @@ -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 + 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 diff --git a/src/commands/start/web/index.ts b/src/commands/start/web/index.ts index 3e3d02f..b662b58 100644 --- a/src/commands/start/web/index.ts +++ b/src/commands/start/web/index.ts @@ -1,48 +1,147 @@ import fs from 'fs/promises'; import path from 'path'; -import { UserConfig, build as viteBuild } from 'vite'; +import { UserConfig, createServer } from 'vite'; -import { COLOR_ERROR, PROJECT_DIRECTORY } from "../../../constants"; +import { CLI_DIRECTORY, COLOR_ERROR, COLOR_GREEN, PROJECT_DIRECTORY } 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 { PluginOption } from 'vite'; const startWebCommand = async () => { try { - showMessage('Ready for watch'); - - const distDir = await getViteWatchOutputDirectory(); - const distIsExists = await pathIsExists(distDir); - - if (distIsExists) { - await fs.rm(distDir, { recursive: true, force: true }); - } - - await fs.mkdir(distDir, { recursive: true }); + showMessage('Start widget server'); const customViteConfigPath = path.join(PROJECT_DIRECTORY, 'vite.config.ts'); const viteConfigIsExists = await pathIsExists(customViteConfigPath); let resultViteConfig: UserConfig; + const widgetName = await getWidgetName(); if (viteConfigIsExists) { const userConfig: UserConfig = await import(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, + optimizeDeps: { + include: ['react', 'react-dom'], + exclude: ['src'], + force: true + }, + server: { + fs: { + strict: false + }, + watch: { + usePolling: true, + interval: 100 + }, + }, + plugins: [ + ...resultViteConfig.plugins as PluginOption[], + { + name: 'mendix-hotreload-react', + enforce: 'pre', + transform(code, id) { + if (!id.includes('node_modules') && /\.(tsx?|jsx?)$/.test(id)) { + let transformedCode = code; + + transformedCode = transformedCode.replace( + /import\s+(\w+)\s+from\s+['"]react['"]/g, + 'const $1 = window.React' + ); + + transformedCode = transformedCode.replace( + /import\s+\*\s+as\s+(\w+)\s+from\s+['"]react['"]/g, + 'const $1 = window.React' + ); + + transformedCode = transformedCode.replace( + /import\s+{([^}]+)}\s+from\s+['"]react['"]/g, + (match, imports) => { + const cleanImports = imports.replace(/\s+/g, ' ').trim(); + return `const { ${cleanImports} } = window.React`; + } + ); + + transformedCode = transformedCode.replace( + /import\s+(\w+)\s*,\s*{([^}]+)}\s+from\s+['"]react['"]/g, + (match, defaultImport, namedImports) => { + const cleanImports = namedImports.replace(/\s+/g, ' ').trim(); + return `const ${defaultImport} = window.React;\nconst { ${cleanImports} } = window.React`; + } + ); + + transformedCode = transformedCode.replace( + /import\s+(\w+)\s+from\s+['"]react-dom['"]/g, + 'const $1 = window.ReactDOM' + ); + + transformedCode = transformedCode.replace( + /import\s+{([^}]+)}\s+from\s+['"]react-dom['"]/g, + 'const { $1 } = window.ReactDOM' + ); + + transformedCode = transformedCode.replace( + /import\s+{([^}]+)}\s+from\s+['"]react-dom\/client['"]/g, + 'const { $1 } = window.ReactDOM' + ); + + transformedCode = transformedCode.replace( + /import\s+type\s+{([^}]+)}\s+from\s+['"]react['"]/g, + '// Type import removed: $1' + ); + + return { + code: transformedCode, + map: null + }; + } + }, + } + ] + }); + + 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..3c5404b --- /dev/null +++ b/src/configurations/hotReload/widget.proxy.js.template @@ -0,0 +1,82 @@ +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'; + +if (!window.React) { + window.React = React; + window.ReactDOM = ReactDOM; +} + +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`); + + if (clientModule.createHotContext) { + viteClientRef.current = clientModule.createHotContext(`${DEV_SERVER_URL}src/${WIDGET_NAME}.tsx`); + } + + setViteClientInitialized(true); + }; + + React.useEffect(() => { + setupViteClient(); + }, []); + + React.useEffect(() => { + if (viteClientInitialized) { + fetch(`${DEV_SERVER_URL}src/${WIDGET_NAME}.tsx`) + .then(() => { + loadWidget(); + + viteClientRef.current.on('vite:beforeUpdate', () => { + console.log('beforeUpdate'); + + 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 From 00261ed2effe6293063357bf88dd6df662e8f98a Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Mon, 25 Aug 2025 19:24:08 +0900 Subject: [PATCH 02/32] feat: bump version to 0.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 49e41be..0c09998 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@repixelcorp/hyper-pwt", - "version": "0.1.0", + "version": "0.1.1", "description": "A faster, more modern, superior alternative for Mendix PWT.", "repository": { "type": "git", From 7d85b4262f1b4443c651397d5b8dc8f2ff78caa3 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 12:25:43 +0900 Subject: [PATCH 03/32] feat: add VITE_CONFIGURATION_FILENAME constants --- src/constants/index.ts | 2 ++ 1 file changed, 2 insertions(+) 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; From bc29b71a40b02372450f6d677345b2fa3d797ea6 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 12:26:02 +0900 Subject: [PATCH 04/32] feat: add typescript configurations --- package.json | 17 ++++++++++++++--- pnpm-lock.yaml | 22 ++++++++++++++++++---- rslib.config.ts | 48 ++++++++++++++++++++++++++++++++++++++++++------ tsconfig.json | 11 +++++++++++ 4 files changed, 85 insertions(+), 13 deletions(-) create mode 100644 tsconfig.json diff --git a/package.json b/package.json index 0c09998..4d6aadd 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,21 @@ "scripts": { "build": "rslib build", "watch": "rslib build --watch", - "start": "pnpm build && node ./dist/index.js", + "start": "pnpm build && node ./dist/cli.js", "link": "pnpm build && npm link --force" }, + "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/index.js" + "hyper-pwt": "dist/cli.js" }, "keywords": [ "mendix", @@ -27,7 +37,8 @@ "devDependencies": { "@rslib/core": "0.12.2", "@types/node": "22.17.2", - "type-fest": "4.41.0" + "type-fest": "4.41.0", + "typescript": "^5.9.2" }, "dependencies": { "@vitejs/plugin-react-swc": "4.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ffa0a4..52098b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,13 +26,16 @@ importers: devDependencies: '@rslib/core': specifier: 0.12.2 - version: 0.12.2 + version: 0.12.2(typescript@5.9.2) '@types/node': specifier: 22.17.2 version: 22.17.2 type-fest: specifier: 4.41.0 version: 4.41.0 + typescript: + specifier: ^5.9.2 + version: 5.9.2 packages: @@ -946,6 +949,11 @@ packages: 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==} @@ -1269,11 +1277,13 @@ snapshots: core-js: 3.45.1 jiti: 2.5.1 - '@rslib/core@0.12.2': + '@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) + 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 @@ -1712,7 +1722,7 @@ snapshots: '@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): + 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 @@ -1720,6 +1730,8 @@ snapshots: picocolors: 1.1.1 tinyglobby: 0.2.14 tsconfig-paths: 4.2.0 + optionalDependencies: + typescript: 5.9.2 safe-buffer@5.1.2: {} @@ -1797,6 +1809,8 @@ snapshots: type-fest@4.41.0: {} + typescript@5.9.2: {} + undici-types@6.21.0: {} util-deprecate@1.0.2: {} 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/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 From bfca81d90b06a5843e5e1a7fa87620cb1d98d5c9 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 12:26:13 +0900 Subject: [PATCH 05/32] feat: add vite custom configuration --- src/commands/build/web/index.ts | 19 ++++++++++--------- src/commands/start/web/index.ts | 9 +++++---- src/configurations/vite/index.ts | 5 +++-- src/index.ts | 13 +++++++++++++ src/utils/getViteUserConfiguration.ts | 17 +++++++++++++++++ 5 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 src/index.ts create mode 100644 src/utils/getViteUserConfiguration.ts diff --git a/src/commands/build/web/index.ts b/src/commands/build/web/index.ts index 7c13170..05a0188 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,10 @@ import { getEditorConfigDefaultConfig, getEditorPreviewDefaultConfig, getViteDef import getWidgetName from '../../../utils/getWidgetName'; import getWidgetPackageJson from '../../../utils/getWidgetPackageJson'; import getMendixWidgetDirectory from '../../../utils/getMendixWidgetDirectory'; +import getViteUserConfiguration from '../../../utils/getViteUserConfiguration'; const buildWebCommand = async (isProduction: boolean = false) => { - try { + // try { showMessage('Remove previous builds'); const distDir = path.join(PROJECT_DIRECTORY, DIST_DIRECTORY_NAME); @@ -33,16 +34,16 @@ 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(); @@ -93,9 +94,9 @@ const buildWebCommand = async (isProduction: boolean = false) => { await fs.copyFile(mpkFileDestPath, mendixMpkFileDestPath); showMessage(`${COLOR_GREEN('Build complete.')}`); - } catch (error) { - showMessage(`${COLOR_ERROR('Build failed.')}\nError occurred: ${COLOR_ERROR((error as Error).message)}`); - } + // } catch (error) { + // showMessage(`${COLOR_ERROR('Build failed.')}\nError occurred: ${COLOR_ERROR((error as Error).stack)}`); + // } }; export default buildWebCommand; \ No newline at end of file diff --git a/src/commands/start/web/index.ts b/src/commands/start/web/index.ts index b662b58..724f177 100644 --- a/src/commands/start/web/index.ts +++ b/src/commands/start/web/index.ts @@ -1,26 +1,27 @@ import fs from 'fs/promises'; import path from 'path'; import { UserConfig, createServer } from 'vite'; +import { PluginOption } from 'vite'; -import { CLI_DIRECTORY, COLOR_ERROR, COLOR_GREEN, 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 { PluginOption } from 'vite'; +import getViteUserConfiguration from '../../../utils/getViteUserConfiguration'; const startWebCommand = async () => { try { showMessage('Start widget server'); - 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(false, userConfig); } else { 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/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/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 From 72564b3b7f66da1c4bf2f065c154b211738e00af Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 12:29:22 +0900 Subject: [PATCH 06/32] feat: add custom build readme --- README.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/README.md b/README.md index 2ea1bdb..6728ef5 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,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 From 444102d0f46912fb7af66dd9e74ee36db0e3ccaa Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 12:29:36 +0900 Subject: [PATCH 07/32] feat: bump version to 0.1.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4d6aadd..4acaca3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@repixelcorp/hyper-pwt", - "version": "0.1.1", + "version": "0.1.2", "description": "A faster, more modern, superior alternative for Mendix PWT.", "repository": { "type": "git", From 242b8194b37c983c76703e8eae35961f3930a8a3 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 14:56:48 +0900 Subject: [PATCH 08/32] feat: add pack command --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4acaca3..c282b65 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "build": "rslib build", "watch": "rslib build --watch", "start": "pnpm build && node ./dist/cli.js", - "link": "pnpm build && npm link --force" + "package": "pnpm build && pnpm pack" }, "main": "dist/index.cjs", "module": "dist/index.mjs", From f45e0fa1fd3b20c4f9bdf6aa6b4d2a5f8a5faf84 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 14:56:54 +0900 Subject: [PATCH 09/32] fix: fix widget reload cache issue --- src/configurations/hotReload/widget.proxy.js.template | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/configurations/hotReload/widget.proxy.js.template b/src/configurations/hotReload/widget.proxy.js.template index 3c5404b..ba23216 100644 --- a/src/configurations/hotReload/widget.proxy.js.template +++ b/src/configurations/hotReload/widget.proxy.js.template @@ -44,10 +44,10 @@ function WidgetProxy(props) { const setupViteClient = async () => { await fetch(`${DEV_SERVER_URL}@vite/client`); - const clientModule = await import(`${DEV_SERVER_URL}@vite/client.mjs`); + 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`); + viteClientRef.current = clientModule.createHotContext(`${DEV_SERVER_URL}src/${WIDGET_NAME}.tsx?t=${Date.now()}`); } setViteClientInitialized(true); @@ -63,9 +63,7 @@ function WidgetProxy(props) { .then(() => { loadWidget(); - viteClientRef.current.on('vite:beforeUpdate', () => { - console.log('beforeUpdate'); - + viteClientRef.current.on('vite:afterUpdate', () => { loadWidget(); }); }); From c4c8edf7f5f5053547b9c0075d5c652c19ca39f7 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 14:57:32 +0900 Subject: [PATCH 10/32] feat: bump version to 0.1.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c282b65..6441b16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@repixelcorp/hyper-pwt", - "version": "0.1.2", + "version": "0.1.3", "description": "A faster, more modern, superior alternative for Mendix PWT.", "repository": { "type": "git", From f2dc71a22d37a9f84def50d19b7b2b51a09ff688 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 15:23:38 +0900 Subject: [PATCH 11/32] feat: add header image on readme --- README.md | 2 ++ static/header.png | Bin 0 -> 44309 bytes 2 files changed, 2 insertions(+) create mode 100644 static/header.png diff --git a/README.md b/README.md index 6728ef5..c65c75e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # hyper-pwt +[!hyper-pwt](./static/header.png) + A faster, more modern, superior alternative for [Mendix PWT](https://github.com/mendix/widgets-tools). ## How to use? diff --git a/static/header.png b/static/header.png new file mode 100644 index 0000000000000000000000000000000000000000..605794aee8cd78d0c145d3ea1de68e7dde18acd8 GIT binary patch literal 44309 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�y0Y=uJE} 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

yh_(74^nqOSSj)n~Nfe@kxmcm!_ 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

8e_lO-&|m?!A=vcqZkLTH~V`> z3}=U#-0@OD9Pt5?*;c8v;s+|Kb!`*<%gm4U*SFMj>*R{IBQDZ|X_?dlJf*SV3TJRi zJx?M7=k4*8)OqIqyi@~7c?D`&vmJj*zzqY*ef9;2#B39?zuF6;fUkM6X4<3jfPHY` zNv;`?3CrE{K0We6EVpSh{e9*%+et4Z#|C~Xb5=Y~{nP4p|7NrAzYt;%LuOoW+oEII zZvN-khxs*TeB5R){befO=O`tfju21OB|FRwvl9$?WF8>N_XmHT_UH;YJQP07Mp}?m zCNYk&f>~9d(yN|be%LXhqsEu{+G$de@NC*$5!kJX^aL*28QXj*UNnlpQ-eLGt`c7@ zD!|nTvRG%>fUJSPuPvI6(1!yDzijpg0O;%ivwB4f6ho>#_+c3$_+-`_q^0rA{^XQw z>a0uU$fW+9sINmRs|)^o`hhwVMUj+Go3>?li?o#@_b|Fc;4jPGA@H|h(HyS=+D5RT*MurTdPx!{K|YP9XKq5(cR zGG%>?*TC?2%GXebSMPlXcPo8ArDP`J2HX$vo_5 z?QWL?`!|jE15WKL`BthG)l;fFmS5@`x6O{c+;Fs0T8G^J?}|Rn{h)O$J3@X(-L=k7 z%FElh@DwnnWC=b7v95fVw%eh+RFm4#fNs2w=<_!En1hqp5h6|M=TlPvdC3PuP&d%CYMmd1CP`cC>b@<|e$75Fw77Qx z*;+m=F`)rGV8^8Cu>>A4Nw`%@w$}h`tKd)Mf6gnaI~86HxwP8CzZt(E^vt)nip4d;~QxOQ6kun4gOj##$Hx20_t{CV2rFmw4< z{j*mi_oDKYu?*3M4Qc8qGVf?PGoLm6)Bs2m+nTRAa;eDE09u-PBHIg>o4_NAVu^um z55AZe9nv=DJGJdW#pQKGmZia;K$j!%Q1oc= z2#UFUpje^Y+|;l`j9R#v@7}hO&c38$53XyO z4z5fO-ZhCXY<3C!m8k^&Jnf|kb=o#?D2OjTvO?Qti}uNj&6>LTsojShv2J$&1Z4fM z?JAS1N6Q~Q9!D69l_*xiqh+hAONEEC>mlbW)*E>)lt$qsb2U$!h z+>`*;4?fZ4QM)ofg_hoDlG)P)>fDH=Hg?eCv0@#Ld}a%IhLlH3KR`$2RK9?Ju^ztU zP%03&iWJPr1UYT9>vgN?U*jaPxkz4iLaJve0Xq^;eu(l=^eEYqPuf#qXM#U6 zF~Of}i2ylL5@BKEy?!?0FJQ|%%Pfat4UyZRu-Ek%=-33L3Pc%1aO%hrr zwQLdeRKdO@M687M=gJB4=n~%+OBcjLQs)>8Y?6fX#zY234gC*Yghb`x8%7(x?{)~G`;&h zfKGwqYlIW8_P$ovhYqz)N(m3b-hJ^=x63T|A*oBr?pB98&v=h$*a5#4eDKR~CMQb2 zKs_!E0wRrE)goK9s=Ul6gXX!(6HK zBIpADt^l%a5UcEM!;iK-L1eL-1C7he~9uq6FHi9aOPiRBRRa zBK>jXf~^bGs|@}SP>fM^i?mq3{C;Ug7bOJ({PWwvZu~slDq{oU9OwX|)a3Fkr%GhA zv$k50N%wn5qg58Zz;Xy*dr+WfevoH{a?LVxUgL|PTV*;C3wUW829mn?(gS?0dE@zR z#|Rzv^E#&ry7j?H^OLWwJSu&X=|^Cbev|VyYzgcw%GZyV|ISvKos})QEREKn!5uVv zH+|83`S9DAaAJ!=7Ii?(e7e!PTuVC$lv7v}u@9{t$$%e5P# Date: Tue, 26 Aug 2025 15:25:44 +0900 Subject: [PATCH 12/32] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c65c75e..b37e18c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # hyper-pwt -[!hyper-pwt](./static/header.png) +hyper-pwt A faster, more modern, superior alternative for [Mendix PWT](https://github.com/mendix/widgets-tools). @@ -115,3 +115,4 @@ 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. + From 75d21e23c80646ce3400dd7efd0ae30215914d27 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 15:27:03 +0900 Subject: [PATCH 13/32] fix: fix header image resolution --- static/header.png | Bin 44309 -> 115997 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/static/header.png b/static/header.png index 605794aee8cd78d0c145d3ea1de68e7dde18acd8..a78b159e1b54f0d2bcd9d20be878092493ea36f7 100644 GIT binary patch literal 115997 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 literal 44309 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�y0Y=uJE} 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

yh_(74^nqOSSj)n~Nfe@kxmcm!_ zF>mWVy$cZ4)#T8n;`rC-z*HR#z|Ug5*l~D{{hf{xAXw#rbgll{EG<0-&cXXhCE#x! zbX6jcHLZy*B*Jv0HWzfDUGOdQp)>dkMV2aec5!5b4FAV6eUUhy%hV%p#+b_efLb81 zK9X8Hs~ik!0l3r)i4MJ4jHZd+F0qU;l)fdiQ|-5w$XC=y@e$U(7v*;f&(1C>(~=V- zn=}{k1wdahtp@hi$6)l&!E)gDej(l1-_@}Q{E^CxrE&5LVq59A#HqbA*eVylGQD=6 zr-&j2AG%bV=mEG<&~WL1zYp+cXZH6F+oZt@3bZv^>pZfDK}fu477yT+dCbU1kM7jV zMP2-Nc(GF_>T6PHw8Vv4`x+hh0}5Z+CS}Wb5A?0i43?ZL8QI!mnmVy9eNvDj0YSB6 z?C*38 zcuYayV@S)QfK10o>^T!H@?wj5IwOk{o(xPeWOFtaj1Q9<{I;*ye%>{eY-t* zi$!FR!*;q(O%;58Cy&%|g>$-E$^u z)hr*Etr1R)r+lw!jSrT@qL6#B5C8tep3~RqM^8hAkY}Kai%t0r*G*lvL);AB+HO#CA9K%z~AcBjZr{1J`rpI zqw#ru4-?J{`wu1NY3-w;4ib4=ywYAAcO09fw$L}%Np3`~p}hh?O2TEw0Vghx3k82u{=Unay7Xlb zIzg|5!FkEizA>rp6CEJb*T8vUZ2^KyFIx1z0@fANT`_2H=-+UZ8DJ{PAabY-m6rn8 zjG?_Bkaj=dtaGL<-UIkGf@w+cSCc96I3iENXNi18z0!Ox->%T1bOk0Qr8Xg};o4iW z&oFGMxK&Z&p9*#~Lzbhr!TI`#*v4FOsLd;M+WrhAt6PcRygn@9rSnnyxh3#GbfB($ z8vN8ndIxB6Hy!Yk%2Ro%`51qgUXn?VlfT*PT(Ej@m0#+cF>&+{<0+kE<;KVrnqrIn ze>B^B3U1K9#i{`fZ+oh0vMmsHvI6H3b(jv^d@wYY{53!xM%4LDD$A3h-@Ug42%IM# zE7p>ZB;?%I^#*coDe@OHLE zD#S&9s6+*Su^pEuHIj7_Ai0($@wVpE`0}Wcld4+lBdjk(*R^I14L!7o76M!hhY0mo zkfYn8@>2ktF?2itQ|*?HnQ!Hf>{D>g0QZX-^Od(%)i}d#>M2a%2upb=fG7cawk8Yw zwGa=+U(p5HEFDAVSXwE)LSq{?_5)3F!Cf4?INZXjBKy~|ew)T%qv6apL56E1Jtf%V zgTGwfp@ye-k69qEl`vf{@XR1>4*M`aEJ5+HT$ZrJpkHDV4XPcd9^^>80};7z6%VNQW!vtJ#Zf*WdG(61RS8 zc?j!HfGq%MP03=Cj?;>cU8*tbki0^fTBoGx`Siq3g0_fpjWX9F;+Wb07b$h;8i zL;@WuXN&|0x}q0cm5qmg-cRS0VEJ-FlrX)W5{~ zA|cQ(Y5j2J(tcw)5Eqzr0)J|@61ju>#vJDNtti{S+)A!}p#!HlvL*Mc2x?I=IDePT<|U1pjaNr4BYP_j+WJ=VMejX;J=eLdkpq4$Iyn5&bchej zucae=)>L>a@)=*s1D#WOD0v)mq^$aI?M0QXwZ(`DOqQ~R@mGf=&4y+2(`=UnB_h(T z-(*qSck8EilM6M6@E3GZ?3LvzW52m=HRfz8)z=8kSwu^hh8|c)y*^M`3+dqyV%uW3 zdf+x-ew?hCUIA2F*H%AUhcPl4DwXe@D;b9KbRP&YhHpPDJ*V1kV;;^G4Mm?UUr0r@OQ5fc zja?nqUzO9%QiXQlAz22Z@v9(2UXHD*s%>@@x$U-*e`pMj_StR8b?&Q~@=L2dj4>ug z6YpxoAtLQg!qq1QDU`@q>AZIA>UoyHgQj6TrDzJFF1qzOX1lK0H=jw3Nb~w#NV_^V z$w3xjq>beRJrXbrHuys-yHdHUwg{1v{ry$6`>?|d9+fjDjDpRnkOO%dZ={er4_OwE zD#;>&ZKM%ZglRi7QZ0&=WDrR5MDQqQC34gUN#eE55%_TaT4c{vxLm?NrxG6maiH0% z$krAbS58*(OM5Zm=GD?%f!8T-|59{O_)USo#_O|O^8%+rZihjjF&)OH!dOrpn}B|* zNT;pRB0p+Z+E?PmN8Oe)5nvu4-YDwjHYz4l*Tvt$?F9lSeq*E$w?Mj9`ex0o)ORbG zuGz9BVs8FL!z>r4l=*4)sQkEw@Kz`eu;bcjcnX-)R9dt8HW$zK$(WZ>xnA-7JSp%Ck2OGG%|_`sKi2_&0PBtboA6Vo zD=^r9nq*Pv3cJoam7^I9N&Is8;nLB_X1feKmMO!g&`9`-7wX`|_)7AtJbCmk=E?Ms z0cA=5q`8goS%lx7WpKLeT*ck~EX(qB$YiLzysvpoB-s+C+UN@a4=Gxzqf-H1Dcw~T zNLQCH=BIhk)eQw;V)|NnmeQ*X);8(d||aP z^%!8TLq2uFE1gsFoG`B@lOE$f$tP!lOjF;}jn<8>gdouB=~ko3r7q)D0*DL;F&Z8@ z8jB_JW`aU~a+$f{&*i5QI|Bf8&I7;$6&Yw7IL#}iQFL>NDmU}dx9wU6OlUz8RopG2 z*O^qltcx!1m~sf9%W~@0X;D{Ku#xj{?JT6PpROWFNIR`9c zS|BhzHn=ZY-E-GVCDI>8%;qTIZ41b)Pcki`zi}-UHHuwvZ zN&E37;pu5$$Jhp@G-`*mWOXEwR(IF5RhuNac?gKJg}jnn_7^**@|BLu zzSts9EuET=h={s*pX=q(N`uNUCI4%s`Cfpo%*<3%P=nbB%qZaJ*QmaD;BWWm#&Vq! z{1+6_Zv$J$n+KM;FV9qLE@!($+T(zw&o*UONUy%+{RNZfkZewo^fyc3(V*l~E!_fk z6;TDMUU)4y*+#x-FA5Z3R!gUzQzC*6D63=Was)r1yf}S!Va>;m&_tRu?R(kMEx^EeH>%IV%0Tsdp&{ScvD^^HDZC>SBIu>p$`FW5dk=9JK0 zNAR~1alE$m{Lq$fVH-FHiD_kGoxhZBiZXQ&iOJ`De2@!V*>xG;EiYrvp_*Km2GxL0 zqr4T$A$$bH{-&dwY%Dn;h`t%2D{Z`B1vU?MI891CCvy!y$GY zVk=FAH#^13JtXHPAEsdZ$7oKqZ5P(INh@`CC zwl!n@AGrBuqd#u*g&0aN$)xEjK@K{hpeHw2eS%Qsrx2S2f4ylv_iOH?^J zevtGzp1rxwEGmo3??LRiBZ@@5=xS0(IailJZqtxO^(bEAfR*6wn17(0J^v0J zYP~X}$k+I=eAlQe<;B1opwBu)UyUgKQEA6}(iS_rqcH4h^=-{BS3K3wyZvhde3Iwz zE188E{lg$%zNyZq=7fBXr?qFtiv?7E$LB^hYC{!PL6_agQmLI6_FGC6d0IaCJ%I7` ziXu@j%!&$@l9g6E1q{}BILDZ7Opd^_X{VA7EUlEj&TF}tE|TE-wc01Ouh$u*R!_?Q z6UT9V8-`<$>W6~f8ZW8*I`a)4%+dr|rc$OP%HdxOoeEUs>-PfY6h}AU=wew1v7@ql zq4CpfhT7X`H==+^KQZk-$sY=7A0LuvUM%a_^8_zy={7R3M0_TC5p?Rpa#zW%T}OF> ztnxU*VnhUowk9h9e-wSed3BC+%yfiRZE@2sB1#yx!^a6ol4v*%W`RD&}F1pTTKp@?U z2AJgOa7-V{n(14txjq(vw5d&pJA~;lWq(z^1?+;KSV2*1lXihT#b$}8lwLb`$hkx8 zQh6|5$QR59jNh0N_+v+XTACW9h80=e7e!NJ(=6y9l|%(m=53uaNCv1`lKBTF81r!p z%J9ck6E<|<<}VM~`w3rtF|F&z=N6o5cKM4pu1hAz(--PZe=YiWWQ9J!dTLa*L3_Z0 zIF<Fb46ta+;Osgz_jd zRC4v~MI&4V3SEtSvH(N7ss52C31DFI??n4?{D{lQzG#71ERi=7ViNbYEuCzP+4}?d zJ8ZJCey|~{|1?3?QR-X4wLD6G$QN3sl2ndMdh-v3w4#c5lz2HE#mL&kfaosI{xv{m zYL-zwv`8^5pGK_r_)S^s$il9nwqW!c47`fg(L=ey)c~#xzV1&v_R^y@ZS4~6czH-; zx)(s|6@l3vp^*b2$kn1{>Pu~bSV-@-?0of63Tk-dwz@L3ZL7=jLjWm=0LrThlWZRr zQlEN7{Z{GqE0YwRBj68>;Bg{?CH@*8MZU%>pk16Z7w}1Jf*lF$K@L7`zOS=^w^*V4 z1%uA2cd=w^{MAm=XO6Vl`7rM}8_ZeO@FQ^;f1Dmi0Zmy3P)Um-BKi!bt0p^fmq{Cx z?5e)juY9bP2=&C#JV)dO%qRVjZa0>P^D!MQ5y(kieG6DZE<8wXd@OLcT8on`fiKE& zXih!d6*PvOk^rU1YhD#lqcm-)11-&|*%a0@i5(@7=CP2tz7%{Q zj&bQdHf{Vpbt~}$eIBZ-17H5K*}ugt%<2tec9tz{0~bf7%2-1OM6ihBJg`2K@s}55 zNIusg(?=t1eR8S+Aek<*9^{>~E!)YG&$z|%R1k^JS+2l?>DUPXh!L$q=$dqRHGyB6 z79Yn`lB@7jcsTYAp3aDDsAD8Gg$lG)pBz1V5#U8sXTy_)DQd5U09qAS)OA}bKM~}X ziO{bs{o9SQ_9}iGEC0%trPAD78Q)?&&ptvN( zcFl6F?2c`J_W&UKre;uy;gb{ORnjfSTLOlyd{kYO{DKeYT&X!#A?lm@hxT-8b`zY2 z)Lds&BUCod81Deokous4nzG_T@)Gk}6Uc5E7p3{b7Wi%OKL<=mL7*|^EnLE2$yoBT z@N3cm9vQ$t9n#d7*FV4@(iKvVz6tZv>n7j=BI7RQq3AJ^NMubOmsNQUOdGl6r=d?` zzm(sSp6Yi6{=6acypq0>osv%_J`VNJ*+<1!9kJ_d0U)o#bO=)ia4Y7gldagYH-CB9 zW!nc>YCgHj`BJ2{7PXM}y4Z_)`YF?EGkK1^R0qbVwbsEr^fGYARGim20=PuSmDuP} zp_Ivs1J>4QRstTWe9(C<-6-)l65&D}rw&m-lc?+(aTE4=JOGmOa&=31o7%9Tm%^)R zd##hg!idhrivYt9QQ2rVHoNB*ml?kbGVbI|j4hRo$;RoV5gqwmiUMW=L<#`}{Y`OP z-6pWoLZV1lv#vT>+xlP#_sL!yggGKF#M8bVU8@IIlr3|uQuo>>LftMNscpP(hR-hn zeiZQ30tC5yh%I!&rubh-+W-n`dr10AVHlAC4O6cMk;hd>A4(>>0@R%B#&ANYFG5hs z;R|fHZ~rn}uszC_@OJ2b@vf&6ZtayFgTK<@=P--h-&hBSa2Byqb#Q>KY>vr%C|o!}I^bI)=<=|R`DiZ&2)jrvoqU_Xk9$r5brN~%c`1Dh z6Ag!Uwf{B%RJ=%%wkUyj0xwrLm$Jex0RGZsv3)MTBlQauFqiZ~NlF*e@a-rCe*aQv z59baXR`Ew~@WS_^m2~H}>-V7Xfncn?joLsKtj{Rwr0dhNSk@zt;?2CYGP$A;D-H(M zu(=MFJm^ObWe*T#4?*e${)oIy3#%i@l)zt!SA%Z{=_{`PYEjRMQPjP~_G?>~dw^9% zUWIx^!CyhQ-9KnnpM`UX9;!Wpu_kgv`!eDJXTHv_T+%A1yba(;T8&T6QzmO#>coM1 zcJMVYZvNBhK9;^wKPZhK#T(JOrRb>Hr^M886l9NFF! z1vdHs6mm3cY`;D}&}>f!93g#PYkJoKx9titB<)5^(W1UFjJaNpF&l);-T@@J4mwM`j={^(i?Z?Bq6+@1 zc3oDd)QbW9woq*Ta=090kuKUV@Yl$K^76^52Yl4m*}Ar`$VR%PK7_jH{B8cgJT~~z z^}sqLvSHpH$lvwiMBWkPdYp2eBk)PU9f!BXSCgfr*YXhdZheP&joQ5*H;~vjt+7*4 zuNKX17^7bNvh5_t>D z@1eREn0!g%Hay`9OYmB!;{H8?A_Y9w+!^%`RpbK-i-uTUG*2*E{}NP)g?7oZ7mw|?N_LsFro zRGL%fpIdHfI)KYb)+N2;0x1+0XMOwfT_D$j`^<9B= z4my~0MIAIPb#TY2qrHNjEk<#c27Xw+G>r=Oa$bDu&?qC9Plw2B+gH332&scqCitjj z?`pm6EGgE%n75#!(4MlUcDQc0Zw}o2XItb`C|-@Lj4S z1o#S`Sf`-JRs7-O7m81NB?Zfo48iO0Q9&M*j+|Qxe|~I9ywEw3XPmTJ+nFIBOp|8*CE4oV2V~!_D9emr1+mcFWP#)S ze2%W*(Y{i8`!@2_Mv~eIC1P88Ah4fK9dHyLIwk)kfU6vRqeRPUI_38k=6d2(35E%E zIdlx{$rhv*S_*(H3H;JDB2cW#QFKvx*6C`C43WBkuEwcJtzRE1^;I)Q;3L;re05Fb zCGn}wN1O{8UGQ1t1ZyxtQfo)q|Tfgql5MY^ay zmC~vCRGyU9!*o5_ErM$(v?$OL&}MB?Ui?M8iO8Z+D#!4FI@t^S>{NEN80annO)rU6 zyc^&My6027KftDg2aP){+;AGwZ1{FIJPJ7KFwiIBVBR#p9KGXC1g#TC=*g~5J~8n? zTb;A0&+>J_+IXdm6TS7p&MV+?Fwu==_^vT61cK>F8hrdW~o3v-Lt;~!9qlZGd zXKL#wTE1C>>5}1u9&J#M0M;(BKmiS+UU`R1octiIy5&-lXXm$`bJBoxQG`LEU3V=C zI1#&#PeKb2ssAtG0FW&9Nuke)`Y?y6R&V=Vt_U6&}(4i zlbBwf1b8Lq*|wc4$ga|Ca$e>q_(0Cv0;z&P#c8fP&}xi!6xW+Z-BP};7ZQ%f(&gb4 zZN8k>Qh1#q^v4G9N76s@^UZ{d*>KmL`x=fofa9ll)|fLN4)6PBW;4 za$0n1Q3_UdhzE`^a)3S>zrma`r8Z&eGcCXk=Fz&>kOlxn6Frr*CvYwp(gK6p`7M4C z^4N=KD+NPSZ{E}=@}k(=i9+%s5h#XApdZP$KDc~_(O%Ts_xl4+68MX35qTMYWYf8t z4Oq@U4Se9{o6P<#Zk4ckkQgp!lqg^s=#}$~sdtz zb$)5CWa;A5raO^+Sdh9cib|w97E1<*eBJ$Nwa+XMg|ExlDa^gq+f;JSuG2MuOZ>u{ z`ZbWf5Js{e zU&*ud)%XO!(^B+ud=T)KcTZd9mHL7QE%5OZzB=Hn<_8Z18dC<8B{^IcBNf25kWN$8 z%eTspgqCzUhIE~)4%#TX@*oheymfF_j;hWn9iIYr$&V}7%EOUM(;+^Hr)G=dPff-V z`GomZH?^mYL!G`>A4PJ|a<>5ZTZE58%7D%>c(+2Xp5xQ5Up}i|zZm z>@~JlnYGvY7G8kQN_ExjNb=x(8{O{_=PSMku-}#AhQ(4FiIT?Qb;{?fG)v&&lR!p( zF|9&T)9!L4&=cD~Wgt)zTXf4B*0~8H*)kthADfRI$x>*aZ2T1JhN=@}b&UQ8ECf{% z*SUYM?ggAHY_7OC3Ia_?aTkBD6_y?S5xn5gB`YWUc5L|%%{QJ<~z zQFKlEraZ@#rR3XWbWOyM07h4$;ZLH7B1_>b@le5^Bc#>N4e`9j6Qnsq;HBhMcu>)0 z5ZR_yq}^!|avgo+Dt2&ElYjCF5oS@;$KgxfFSp3Ht0VGpbSm=dZGj7A0@lNBzA0{_ zbzhNP5H~D}q6r7)=gpE1_yPWzKGd!^_g%-=xGv~A%k>!Qn|>N|&aAHmpBMv`d-l^9 zI{qo;8$iF~L;xidM2n6FFoWhfBCk{6X_>&Nep2&@JU+WS-YZ|*ZCoJv($Xgz0M~Tb z)xQS4QQfsqbYfC%L#BV#HqxGp%6w|u;>9{u0C8Q%-5TWW-)!t*w=gb=0&*vyc_yjJ zQS_1rHOk)>T}vgQ$fzFC^ztmre652voJ&53*HHF=Eoq=IykqjY{gXL69H)y}Cr9KKo}g&6X@ z3vmGvuNAxbq13;NK?CiJ5GHTYH;lOxAL>hIyHnDVb`yJDz+YCMv?vNoe{-KseQ=Rp zYxaj-;KM4xzsdyQRyVji5? zIdlR-(S4Dkh<(jxo!7_g(FC}p4f<+4+`J$SokVNrQXWp)l;wn-sDYw+u-8Te!E|VL zYnOqJmc3J#sYwK`x&J5u7b0jO>DyJik-Z8pRi}`b4gOU4V>z294G9One4}xlLkhQyL7p4w%nW{aVQ_3#{5K_43tNs7|F6_occvo;~{OV(3@}_LUCK zYWWt-aaFmHg98Wn%Er@BP-<_1QN zkTx$Bl<3t3`Nrzek7dB0-ICoY%UU8YRcFSEUl=w6KT%&!6;y`n^hB_&-Mj}<&>$L87ni(>1ry(G}g^O&iLYIiFHbJk<=-a z7qaUJd{lj8>Zp?}B4|S=Y4^F3Ye8rKG_dvG2c8n$%s{_LHi)gZ#Z=BaQ~l{s8TGm* zZ_``G0{nXe>vfmk7pK#vvEDZD7xLIZw_bmR>uR=B#!$@n0Jd~yjY&|F=Y(msb1aQ2 zTS_mmvq!1I1SGQCnRd~qu&zn|l_#MtvW66{YW)EhQ=PYHH^DR8qy9Kx zNDAU4#_S>pSM-?!E_!nYp@)lJi+qzNX&*`WGa(9tvu-!h&{+Cya z?15X%>g=S;nf$A!7V*KZWgzfktA3b`bPPcep@_dmb$w7SUANLq8u`%|T()XvZ{vfeT}NZ-utf{rchgkQG~RCD4;@<)@D~GPyT3mK@b=C8SvKhe(*Oe5 zd?CLveZU&0zfqo==94Z6%mGiF%F|Jz*>BykO?y&Uj%_T^YpJsJd^oT1Tfp4z(Ncg? zJ~h3CkD69Wm&yRF3xcqj)LlbX7Nc!ql9KQL$KCZf0%yB_x4zA-hq^z`V11gStHkHq*xO2J zEbHCw42ht+YIbQ+YHoj_MNwvcUEMLe1pL+J|CG;UyriIT08^x^8M)!@6yg9-Ke-o!bw}Jhs|TD1D!vKi3z*Zsp!%A^_wz2!(%@f9K=B(LDPH zzTG_ix#x|)WAFG42~S=3(YN_JbJoL81^JJ?<824vaRR90@LS!|oc^GDjf=s(PP<29 z+kpDcdCVD6`Xrw%?gO1N=)Cjs-(;@&^k)rDyumWjiTAvlIr_FM(0APNcNzg-ETGds zunqt``_X5y_(S*4I`@9LzDGT1bA0}j&NWmz?aXgA7k=MU&C|Z~@#gX0ah^G1Sjfq; zXWeI9_-kFzx7(TLJ|Idv<_@d6%s=FHR1xG#whBJa-`XP-e7rPT>^ zCzJs=r6(nM4~>iZsSg-rZ-4X%yzVm`-{X|K znlFC-OXkKKZW{BBzsGUr3&Z(!gRQ+=95A2y#MR~=C*RdvJ=pTPeKgPm!Y_ROUq+dg z&XWe6w;BAnqq*X;_iy~a`O61KJ3bP4!~iHyy7%49QD1kY`P^r|U>0^06^0%KD z!REbA`{q%{1PG5CWV}8PZjKrJzr`&MGxvVL$)m3)o_sfR>>X|w@ZMnnl;1Mu9e%6B z%>y2Ks=4j$Z)-kx%|Dxi2L~TM^;vW9=7Yn6cgHc(=F8!I_rTDDkCVRj#GyWK8-Y>3 z2;S%ZC!0Io`5Q-nz5Hos-g~Hr&#ra+%SMMkpX9yV@h9G8koo5^@906l&pYSQ4;tF< zy3w}R<-zYmA9=_w!ZyJHy z^@E?j40k*6uIBTf`TUsXeLa3S_c~8IB}1j-$*U|NiR+ zUvC_FCLiy1;@!qH-;Q3FPrK&R*Nk$jw)*0_Z}__UhE3jace~RF5WTF|@qh>4f8_N( z-gf|lcN}c`I==CS8=^7p^&fMGV}^2^F!cYGz9|BD<$JCiZQc8R_ZjkTJLXO2ce}^k z2K`?c?Rnk_uz8za-k(o0ew_Jn$E4Hy>gkNLA2jM4d2hTC zoTqS_BTf{)4Ot>zMJK9;@X!X;2BzC`WGdvp4Q$PHAE2FYwA$q7N7=bGcwWIWjny_~ zW6Vu&u(6^nK0-{^cd|Gsber>%^mFcYO&&0_&3YZ7JGit9$MUdHIe)`f26qu4v~#o& zq648IAIWpC0AL;;!MoRKCk%`6okyN$|G?u$faW7|Q)KT67o0PIqPvU>??g|3?)f8F z@!)BqCtUFGmFzct!>|yaxQUYah4~(X{1-+5b<1&U*6Th0$q$Wu@iu)_?-L*SlzG%s z9yZE7>d6lqfeJKO&wcDFis8ZCIgdGO)bIb!WXFF`|E_Oem+5vx)akU9|3jLOIDK&d znx~)jt>%OQ*xY!-mxpqF`)S@#~dkG&6f8KQij9DI7(AampOH;s#(uM6*z2UN%0 z@f*g!9)x)y<#mq$a{w++_>S{O0OrBZu|Zw=D56h4dH_ggp0kSH`TDxc-M?up>-kSQ zXH0wAcRp_9JNAyZANjmLXFqxs+4K562*aBH@Fa3~m%HC-09HqA?4AF_bJx0$8T^g6 zV{bWb-+ld1w%eN`6PoEq>(y1fgDq?KLNZ=|mXNTi&Gk%Nh zoJT!uDEBSLdOPP)tG;>qAa~*bo^H6om*F8}U-Tey)bWHzj9|u>>5Q`bYQn0NGTjvn(ozt?@^^*5MDKK{Is z=W)+?{7~jk4tYn9eop$1y~DAadiFApe8Tx-{s||YI7a?f5x`SM0D8vRXAL?&F&rN| z@EkFo`?{a(&3AV5z@LbZ6y+-G%zS(RP@c!9=ifIYx25dGyHxCLg7{E`R&`*Z0D?F~WH18!j_nm;lEWUj8Fv`UeJE{@8;U zzc}46L@`bteDYC74!{iZC*5uI;m*nZc=s3p@zcNS@uPjO zd)@csLFO+9JD(iOlMudw{o!@O}LVDm^G%)!&Ckpg93JFE`0}P&rNJo^OgaUiqFm zQtzXFUbhE>*L?cwDBauhdi}8k)M)?={(Q<|(FGa!wrYzVhaA`J;{5eI4o}Fd4chtv zLOM|6+vkJ8mhy4sXtrpejIOVy!;1B{07qO#@ERE8YL>m_Fz0af^GewxFbjlE2^wFD(FS>MypnbLZ3Fdi*obH-G#;-Z;vfncTlOfz}&toa@-PFCe(fb-zK_89 z{IehR;8CgH%JTsClLN54__YS~H>4AW2u@-~^o?%?f!Bww`mnk9kN#|P?)#9BgnIJhYPv7*mPe$vR?)qS|L9Gd zx;cA@OnyCbAE5_;ulemiFlV3turY%7jsYn8a!p&YA+5@LLuAX-oBrtHP1+-e=$;2; zSH9;1=BdxQ^Vpv*9`e1vPkqi)hi&aY9_EZM4l-{X`NOW}L8g!Xd9ddrh9{qT^v2GA zd+E!@yl;QT6U?9d{{I3>;^sfJ$9XH{>e-gS2k4|daAJ)1YhgC-TDlC?o;`Tb9A>UJ z2lsB3l=3o85 zlg8+mPkZAZ{>1=JuQ1R4{wIyw!Yf%`o%s9nydO_^)+5Ko`{Ii(VMx0Xl=>}G4^Dg} z)RT{drVnhq`|baG02k+tzWast(yQJcJhcq?HAJaaI^sKQ&U@lHV>IouOa5l?{WC-K z=2PQ?7=8i1__c2t!H3@>_FKcgK0L_s+3h*%+ss?+aImBcvpbw)xY&e8;zr#A-eSb z_k3^!6h10{395;B7yII#}(r?u#YNw(B~s`Uf$oc=fUE%h3r9}Z+G7xJ~RBjeb^TE z{q-;2cu=CH^MEgSWyl0$!<^WvxN6@&bcfv(&^HwP9y^sv> zCyWS`$TImwb~aBMhk$Nwj1}N0fIy^nXds9N>SA3wK(Gy@(IQm$T1&=!=|8NkYy0=W+fNS&AYXHs=qcA+fC60KHIG#&1KL zhp+ABdc!T7yAEZ0B??4_*U+#~~Y|XkM z3Oa0J6p^wp&&tlT2RpyBjs#=%0{a~DrV(JMpL>u5MbD#olmb=^q3+xOe!< zs)ap3Yoq#91#%~!ttMpTPk{mj`1*uBg;TGh$XiSkX9JKI4?na74Ou> zc5RG0q3x31T(0d~z+`?tlC4MDR(TN6Nf(6hyaYtT1vJ$w0)Gklh@$jHVrY@W7QS&S zlsEvf?dVb+meL@7o2^-7kkbM2N;Xoc8sz;@sUGR^&MFr=$oB*Zpe5&ko4QYp&nm41ET0tK9Jbi+2(Gdn-wv&tZ> z#+Mi?wh={NN`!W8>i2~0?7A4&?}}`}sE+`;1Gh*bdZ{-Sl!bU>IUwH_oT-p&k+%h% zHR5B-NJbuMBuHASe#*R->n1}o&YDBq#dM5_D7o%zC4b5*wjVY=ah-b_3$l#I3G##h zuZwoaL9rWlvRW+$*=Y&>7a9n2W49M z*q3NFwlC|P zf!gd%N+1YK6@hX92&_6~Kz=@0%LXt=vh7qJ#lGuXiObOUBEqumw9QW;0CPeeZTYne z^*RnBdxh~m}%JcXwk&mX2#$%HoT}KV1Nw7%`GtGGi$_g|lx3Vt(nYKqi?V(xv z^I!PX0jRCs;q{c~JklI@w>u>IFk3mDdCq;z_1CR#R`>7!`|Q>KT;#9kQSxK@mQ#)& zUo%6Y+YP|&!hiE5(?U;v&SQtVJ$_E;F}^iOHg_Y6I`Rs^YF|E0->ASq6O2)avKTH{ z_m0R%)d%qf>}ueTL6$oxqjqlrjkCPJ9c%BVFPQ_I?*qGpcc$j;agpC}ztjV2IViM1 zn(POYj_+kVv^wIpN6s$?WUxLi&uG^=Vc)FTm*m0edp?<8K>%;A$Z#Az`!NqNw;zDd z>tFpBLzM1Y%zcJP-RB0N_Sw&T!JKjK5W)MpTbWB<|BfM&_KoKHYi}^$e9GO-CqDXV z^Uh1(J4O*bu=D4C_koX&5k3#{{C9GF-gVcmz~8NoI$~q>P6MDk^X&Vqb-ZWv{p>-< z?Qee@^N!*ClOOxkaDL`^{+2hqebhD41JAziaQ=C7pZlF;UjLd)MsRw@Irla1eb)!g z`~Lc>F@N;&5&pR)D_xLWoTOE1C_^sY=KKc0Zy?8##=f8^KyU96^K63=Am%RQm zw8ri+$oa_LCkI{c{EK&w=VuJI{`LbO8P6f|(L~SlhS$8sJo+gQH}CzME6q3GbFlxX zmzia$eS+OOO)l+1Fg2xJ@s0dmJL*JCWaHeJeMs|hc>&QvUCFyouklK1T(ORP3zTDP zmnQ@n#q~iYt+wyEMre*h3OH=Zm&zu2gl>6Y5_475nHs90SE{3KjEo(1)UC{Y9(d9K zr0!#m9DrI#9ym=hXP$GadF<2A9)aPrzyAqi1o69n{22p4Ji;6~{QN^>9t^I&^x=m5 zyA7c1gQKhmY91i^tVAHOJlk4kL)0&hNa5 zKCbA@VN3Zb&v}%&ZUAiee!xA)mqh>Vpx6KPzMeVAKK5znjQXGYuOBl;;yhTp&%pcH z0XX_^1wU}m{g{Er(+hs;yT-q_8^GG5pL#A>V;(rZ;HRH!J~!y}W%S_j!hiE*^S4)i zbkOsNQC~{8I`US7?&pqR)YGG%`f&4uJ;>q7OGJVsJdVi6ChAo& zfvur@R%Eli-lIr@Yu88NYkSy4!Y>(sYZ-AjgQGW7)`5fm%Qy!Sxm2dq7s^p7OfQXM z-96#p5>S(7qiMoUqI1%IN9Tp3fiX{O)NkgADUL=;KL^LbREBtOw2Qw5TsFZ4b|oD# z`7dm|{?(U`Aj(JS-uKu4XH55B^0?%6tM`e$|^y?IFU>Hgem!Aq{K!hqM-~5Wh?aTK=xuo&Z+YF@#|W8^@Oc1v#=}lE zfBXKAn12`|cmCW*`986>8>e!%<^Ev{wB0`#+;-pq zJtopY?aL`y&_4#bP%hlA)u%F$(X$bgGu3`YrdXF{Pb}PV5EHm9tg?eZ?|bxL zG1)5pKuIM978({0msT=9Vs)#dZWZPDhdMlP@_BC=fZVVB^luN5wKK*CKKwTE^ZCvc|LLF2Pk!I8j1jiy|JXA(=ht6r&kX?2 z>wo2cxyby&3;*-5rTfvu&s&XAzmPm={D)y1_ultAd59ujKc>Cm58h&4{vTg8==sBd z(~b|1__BDPzv0;1ZgQ@__WDhoc;CkSA%Yk_X!5=R75^4i953pm7OKf4B1|Mn%{Jx1$%1ntI{3E~a@Bx5*WY~T^d)xx{z-hk!@9>Q^FZ14ETlgja{YB#z@E;D*LLVLc+5h}Q z<5ueX{^o<@cI|Zj$&Y>7+~Z!yo9}+%cdWOgXY%(4`Yr6||LAv&zscU2=bUC<^4mW# z-Ye+u3!LbIXP-7kC4cp&|LYjV^U*;c34Gp0w#)NFiL&TX=bwoo|cC|puFi}j@9weW2Ei}f95&n?ZbAkkF?EC^RDyP z=hHoe-#SF>e0bS!ANvPOd<5_f!&dV|o^Jwd-lpI3^)#hTdRFHy;g2cw^#_0YJI4nz zE*(G`#_uT%eIL07XxFXp&pR>#Y;Kbt+JVl!+;!+Zev~#V5qHv(E*1b;C~1cP;6$u3 z5Q=pGfU$u(PeE7x>byd>z5Z!id;yQjwhp0fBE;5iGXuKhG0GfoRucKE>Ey{!?e8CU z3$wp>3*+ozfD{rhCG9QR?6lScCD}#zD@9ngq`NFL6R%Clwk(4iDZgW^1-!M5Hb0`? zQ^$ML_kv4hC*Z0=JG&rz4`L{&Wh}aF;LlSCY{uikYabc(_v?juUM4)BK$nlA`K?x; z?;nI1pY{!C0(Plfe(u2hkV59kKmJT~wZ;O+{cn+R^gAH}4YsbvbUN?!f*{#vHWf;9-ZY z>)K{Kxz=i@19_~$JeN;Guue+7S{8@Q2A%M_(X<)QJ1%tq;iu|tvX7(~7LPPfDjTPV zRX9WdU&v^!%7Q>er!9HxD;TEDrVhrJq1^zhHHalw@C?}{`B~A6J`+Th7@$COkDY{v zbY+fD7#I&#mvnrIBczQB2Dx1nqK&r1t1>Quc2)2jlqu+?joaMr{@&pO06aWUU{UQZ z%4S3YS)IyK8_HzCi3El+A$OhX zI@@Up8{zn9v&ECPL5u3@C*pPO~Rlsq;N$w?NhTX_+CtA@QQQ z6n`SNbAZ*sr_?J#az2O88Hqpgs&(Zo;uW{bEhh|nRb3?>a2#{`Hl+*|K7w9wXp40t zazI_Q-AXV$4Ls}w?;U{~L4BxBvMU~sECV+B%uAn)bb!+~Y&a!b60h(+>?*ueol+ib zj&i^e&xT745o8$pO!X-o@SxlXdD`%^Kvg1C)cRNr`W1T|(NX3u>>a zA@VU_-mDWLQv!b?J}JM1T5L$lyGS+PTJuYC zlDwSuWC~owsk0SK$!}dWmYh6!QM=`~f|*4AwAV(!@JKO2;)xx}Sdeey;HE4{y;~pPp$q=iH;dUeRc8&w5?pqjqd{-KMfZ;3^_j!G8h0+3tZDfB}lSWC!JzD42!}!-;%*tN^KV* z?OVe-;18n`PI3);WqIR6Abkr=<6-297YybE%AOG0X@fh}?MkN@>f(v;bM>q6x|n^D z2or}d7qQ*?GlK_cTbuGw^hkJ+e$~DW%Wu2Z`_%gM7Z)E2`m|;8lYFU=O4JXqZ}<1d z*TU={c1z=mAkdg;Yo!eYPP{9~=1MFA5RHRC?m|$mV@u*{A=hY6cRiTxYmG@pKKmlG z_Ko0DYFTe7z40NCnFsIty-=+-&u&mZ5U4~|V8vCW&5MY3t&2C$ zW!nYpMdj=RBn<(m(YmCAlSJ(#(Ocjz5bxrFLg9tVzOe^yGUmW7fg9tojW=7?%LIbj z6AB!;>a%X?MjbgoOs+%5505j4@KJQh^83iz3b>=>6&?biP)orm`CFzfx#u?j?J(`6 zf0_V_!?(1qjf5|*J{Qylk<-vzgdSoh`qI_0} ztg*u`H4-ti&GtJN0PhY;%6D092S8G+&jmq}TDwvdx#&^2h|Aul?S}iM0dx zYltk)H@LfkPO1}SA^$MQVPC#3SPNVtkL$G!b|W7$IlcL6$?N`lG*GL2u?|`kl4F<3 zi}Tpc&k^gS#v_q!%wyahvR7lED$>c<(!t@|UD{levR}p0YE>Y!ahAZVPJ%vByvo<; zryO!{5<7a-VeFvo+7XO)DLcXkmQQhx8TI#=vnl|I!OPLRd$Owr%p+Mr!-D_LikRv56 zPP^bkjj9)l`h&Xp2`@+FWAo7XiknxPy3`muRB{A7)Diq;S^e81#%FqM3-MVZUs<1H zhzZ6VyDK?k`9d36QQuvQ?A`P)#_l`fIGKt5ZD}5Wf#uuBXP@hTm;L4ln3moOWp5tf z_9aKstBG^MI*RM7CNIq^<+s@*JOsjAe4IpwfI6t$MG~z|ixL%BEohs|M+RCPQq=Vo zc>zLDxb)XTRCNV>>pwc+k4o*JgKkH{rhC!iiMx$Y2RSVuFx3@aM>Rdu78la$rjQ8WWAmr}9X6cb~xOY<_Y{LxupXCbEY>`;qE)OQ0m` z1QJs4do#EjbX0h?

8e_lO-&|m?!A=vcqZkLTH~V`> z3}=U#-0@OD9Pt5?*;c8v;s+|Kb!`*<%gm4U*SFMj>*R{IBQDZ|X_?dlJf*SV3TJRi zJx?M7=k4*8)OqIqyi@~7c?D`&vmJj*zzqY*ef9;2#B39?zuF6;fUkM6X4<3jfPHY` zNv;`?3CrE{K0We6EVpSh{e9*%+et4Z#|C~Xb5=Y~{nP4p|7NrAzYt;%LuOoW+oEII zZvN-khxs*TeB5R){befO=O`tfju21OB|FRwvl9$?WF8>N_XmHT_UH;YJQP07Mp}?m zCNYk&f>~9d(yN|be%LXhqsEu{+G$de@NC*$5!kJX^aL*28QXj*UNnlpQ-eLGt`c7@ zD!|nTvRG%>fUJSPuPvI6(1!yDzijpg0O;%ivwB4f6ho>#_+c3$_+-`_q^0rA{^XQw z>a0uU$fW+9sINmRs|)^o`hhwVMUj+Go3>?li?o#@_b|Fc;4jPGA@H|h(HyS=+D5RT*MurTdPx!{K|YP9XKq5(cR zGG%>?*TC?2%GXebSMPlXcPo8ArDP`J2HX$vo_5 z?QWL?`!|jE15WKL`BthG)l;fFmS5@`x6O{c+;Fs0T8G^J?}|Rn{h)O$J3@X(-L=k7 z%FElh@DwnnWC=b7v95fVw%eh+RFm4#fNs2w=<_!En1hqp5h6|M=TlPvdC3PuP&d%CYMmd1CP`cC>b@<|e$75Fw77Qx z*;+m=F`)rGV8^8Cu>>A4Nw`%@w$}h`tKd)Mf6gnaI~86HxwP8CzZt(E^vt)nip4d;~QxOQ6kun4gOj##$Hx20_t{CV2rFmw4< z{j*mi_oDKYu?*3M4Qc8qGVf?PGoLm6)Bs2m+nTRAa;eDE09u-PBHIg>o4_NAVu^um z55AZe9nv=DJGJdW#pQKGmZia;K$j!%Q1oc= z2#UFUpje^Y+|;l`j9R#v@7}hO&c38$53XyO z4z5fO-ZhCXY<3C!m8k^&Jnf|kb=o#?D2OjTvO?Qti}uNj&6>LTsojShv2J$&1Z4fM z?JAS1N6Q~Q9!D69l_*xiqh+hAONEEC>mlbW)*E>)lt$qsb2U$!h z+>`*;4?fZ4QM)ofg_hoDlG)P)>fDH=Hg?eCv0@#Ld}a%IhLlH3KR`$2RK9?Ju^ztU zP%03&iWJPr1UYT9>vgN?U*jaPxkz4iLaJve0Xq^;eu(l=^eEYqPuf#qXM#U6 zF~Of}i2ylL5@BKEy?!?0FJQ|%%Pfat4UyZRu-Ek%=-33L3Pc%1aO%hrr zwQLdeRKdO@M687M=gJB4=n~%+OBcjLQs)>8Y?6fX#zY234gC*Yghb`x8%7(x?{)~G`;&h zfKGwqYlIW8_P$ovhYqz)N(m3b-hJ^=x63T|A*oBr?pB98&v=h$*a5#4eDKR~CMQb2 zKs_!E0wRrE)goK9s=Ul6gXX!(6HK zBIpADt^l%a5UcEM!;iK-L1eL-1C7he~9uq6FHi9aOPiRBRRa zBK>jXf~^bGs|@}SP>fM^i?mq3{C;Ug7bOJ({PWwvZu~slDq{oU9OwX|)a3Fkr%GhA zv$k50N%wn5qg58Zz;Xy*dr+WfevoH{a?LVxUgL|PTV*;C3wUW829mn?(gS?0dE@zR z#|Rzv^E#&ry7j?H^OLWwJSu&X=|^Cbev|VyYzgcw%GZyV|ISvKos})QEREKn!5uVv zH+|83`S9DAaAJ!=7Ii?(e7e!PTuVC$lv7v}u@9{t$$%e5P# Date: Tue, 26 Aug 2025 15:28:44 +0900 Subject: [PATCH 14/32] fix: fix image branch name on readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b37e18c..36028a8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # hyper-pwt -hyper-pwt +hyper-pwt A faster, more modern, superior alternative for [Mendix PWT](https://github.com/mendix/widgets-tools). @@ -116,3 +116,4 @@ Please refer to the [LICENSE](./LICENSE). 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. + From 51b382adba952c0489eb0b57d1fc6567430d9a80 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Tue, 26 Aug 2025 20:14:06 +0900 Subject: [PATCH 15/32] fix: fix bundled react issue --- src/commands/start/web/index.ts | 416 +++++++++++++++--- .../hotReload/widget.proxy.js.template | 8 +- 2 files changed, 369 insertions(+), 55 deletions(-) diff --git a/src/commands/start/web/index.ts b/src/commands/start/web/index.ts index 724f177..1db55c7 100644 --- a/src/commands/start/web/index.ts +++ b/src/commands/start/web/index.ts @@ -38,11 +38,6 @@ const startWebCommand = async () => { const viteServer = await createServer({ ...resultViteConfig, root: PROJECT_DIRECTORY, - optimizeDeps: { - include: ['react', 'react-dom'], - exclude: ['src'], - force: true - }, server: { fs: { strict: false @@ -52,68 +47,381 @@ const startWebCommand = async () => { interval: 100 }, }, + optimizeDeps: { + esbuildOptions: { + plugins: [ + // @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. + { + name: 'replace-react-with-virtual', + 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 + }; + }); + } + } + ], + } + }, plugins: [ ...resultViteConfig.plugins as PluginOption[], + // @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. { - name: 'mendix-hotreload-react', + name: 'mendix-hotreload-react-18.2.0', enforce: 'pre', - transform(code, id) { - if (!id.includes('node_modules') && /\.(tsx?|jsx?)$/.test(id)) { - let transformedCode = code; + 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; + `; + } + } + }, + // { + // name: 'mendix-hotreload-react', + // enforce: 'pre', + // transform(code, id) { + // if (!id.includes('node_modules') && /\.(tsx?|jsx?)$/.test(id)) { + // let transformedCode = code; - transformedCode = transformedCode.replace( - /import\s+(\w+)\s+from\s+['"]react['"]/g, - 'const $1 = window.React' - ); + // transformedCode = transformedCode.replace( + // /import\s+(\w+)\s+from\s+['"]react['"]/g, + // 'const $1 = window.React' + // ); - transformedCode = transformedCode.replace( - /import\s+\*\s+as\s+(\w+)\s+from\s+['"]react['"]/g, - 'const $1 = window.React' - ); + // transformedCode = transformedCode.replace( + // /import\s+\*\s+as\s+(\w+)\s+from\s+['"]react['"]/g, + // 'const $1 = window.React' + // ); - transformedCode = transformedCode.replace( - /import\s+{([^}]+)}\s+from\s+['"]react['"]/g, - (match, imports) => { - const cleanImports = imports.replace(/\s+/g, ' ').trim(); - return `const { ${cleanImports} } = window.React`; - } - ); + // transformedCode = transformedCode.replace( + // /import\s+{([^}]+)}\s+from\s+['"]react['"]/g, + // (match, imports) => { + // const cleanImports = imports.replace(/\s+/g, ' ').trim(); + // return `const { ${cleanImports} } = window.React`; + // } + // ); - transformedCode = transformedCode.replace( - /import\s+(\w+)\s*,\s*{([^}]+)}\s+from\s+['"]react['"]/g, - (match, defaultImport, namedImports) => { - const cleanImports = namedImports.replace(/\s+/g, ' ').trim(); - return `const ${defaultImport} = window.React;\nconst { ${cleanImports} } = window.React`; - } - ); + // transformedCode = transformedCode.replace( + // /import\s+(\w+)\s*,\s*{([^}]+)}\s+from\s+['"]react['"]/g, + // (match, defaultImport, namedImports) => { + // const cleanImports = namedImports.replace(/\s+/g, ' ').trim(); + // return `const ${defaultImport} = window.React;\nconst { ${cleanImports} } = window.React`; + // } + // ); - transformedCode = transformedCode.replace( - /import\s+(\w+)\s+from\s+['"]react-dom['"]/g, - 'const $1 = window.ReactDOM' - ); + // transformedCode = transformedCode.replace( + // /import\s+(\w+)\s+from\s+['"]react-dom['"]/g, + // 'const $1 = window.ReactDOM' + // ); - transformedCode = transformedCode.replace( - /import\s+{([^}]+)}\s+from\s+['"]react-dom['"]/g, - 'const { $1 } = window.ReactDOM' - ); + // transformedCode = transformedCode.replace( + // /import\s+{([^}]+)}\s+from\s+['"]react-dom['"]/g, + // 'const { $1 } = window.ReactDOM' + // ); - transformedCode = transformedCode.replace( - /import\s+{([^}]+)}\s+from\s+['"]react-dom\/client['"]/g, - 'const { $1 } = window.ReactDOM' - ); + // transformedCode = transformedCode.replace( + // /import\s+{([^}]+)}\s+from\s+['"]react-dom\/client['"]/g, + // 'const { $1 } = window.ReactDOM' + // ); - transformedCode = transformedCode.replace( - /import\s+type\s+{([^}]+)}\s+from\s+['"]react['"]/g, - '// Type import removed: $1' - ); + // transformedCode = transformedCode.replace( + // /import\s+type\s+{([^}]+)}\s+from\s+['"]react['"]/g, + // '// Type import removed: $1' + // ); - return { - code: transformedCode, - map: null - }; - } - }, - } + // return { + // code: transformedCode, + // map: null + // }; + // } + // }, + // }, ] }); diff --git a/src/configurations/hotReload/widget.proxy.js.template b/src/configurations/hotReload/widget.proxy.js.template index ba23216..d4396d8 100644 --- a/src/configurations/hotReload/widget.proxy.js.template +++ b/src/configurations/hotReload/widget.proxy.js.template @@ -14,10 +14,16 @@ if (!window.__vite_plugin_react_preamble_installed__) { 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; + window.ReactDOM = ReactDOM.default; + window.ReactDOMClient = ReactDOMClient.default; + window.ReactJSXRuntime = ReactJSXRuntime.default; + window.ReactJSXDevRuntime = ReactJSXDevRuntime.default; } const DEV_SERVER_URL = '{{ DEV_SERVER_URL }}'; From 5b9418809d6bd6cfc9ce2cba8aa76d856d8cdff4 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 11:11:29 +0900 Subject: [PATCH 16/32] feat: bump version to 0.1.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6441b16..f714d3c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@repixelcorp/hyper-pwt", - "version": "0.1.3", + "version": "0.1.4", "description": "A faster, more modern, superior alternative for Mendix PWT.", "repository": { "type": "git", From 51afb358caee724e95a67fa1b84b457dd39f2e56 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 11:21:17 +0900 Subject: [PATCH 17/32] fix: fix header image --- static/header.png | Bin 115997 -> 137962 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/static/header.png b/static/header.png index a78b159e1b54f0d2bcd9d20be878092493ea36f7..de854555b882dd060e8e1cc5f1e489048fab8f21 100644 GIT binary patch delta 74374 zcma&Oc{tSj-#@O?X*rctDngu&aIBML-zr5VRFd5kA$w>n!_2$Wrm~eiYY1hT$vTEH zQ(*>UNtnSf6Jrd<*vBwq#?LwTeLlbYocnw3>%9MPd0kwtc|G6H*Yo*&EH61Pcg@u9 zesy&3jepFv6;w)FTZU4jsJR%hlm{b^Lr7436Y=wvv@GY#uI&; z)D0L-)S+_qz4O;u;m^_!R9FdcdDsz%vm4WQsJ6pN3syV{)OxdH_NF_o!ZTRoMg1~F zsf4U_(n0y|qU^Agouqdzb-A0D)}p2FjL1Bg70a`1YHcDIIpztkTTdJ)@0Kg8mVv#M z2%d=+q)oHkMzp@WpaX~dKg#hUFp|NASg$N|b=D=ZNUiampHej`<`&YcC&nrl=MuTE zSDngu39X4h7-f40=*DqVG6RZWo*s`(z;?i;Jq`plokfT@b8lqU*7%I|MqYau>b33( zaW~A`KbsS^S#&OKO~1u88`5%_a@)~wLJ1$*i(820=VMy76SkMf4{M)@kQM921$bmD zMaz%GCdUn>^7C(9&(-UG|K`W)z-xmU+wiyHu&e$+uAy9>COq9y8}x&^c1Nut+^t4> z?@a0g8eY=^lj7`42|)>}DsRGO9pNmD%0mVRlwbNa3cZkH>6scwOZ6l3tbwkokO`-0zw~mC*bswC(U{g< z_Oqk6LOwM3G@S61Ob3$DdMMqlA}UGV7?F3Haj|ysZh@q3by)psfHd7`?2o9AYfbD% zr>ZEtaZ+?aR9V)JaahF{jO-nK4&`R=F?LaJ)SeCqDdkR}<&aK1V8LG+CwxKk`$iD1 zs{w|uGYoWytBHAqn&$oq&If}!KiEF5sr&_c)TIoZYm#_0tA}&hQJLX)j_5Fw-W1S? z+xAac*S78Ke_}KBl_DDWBB+!K|CQl6j06}@rsh3C3bu_}D?!6giH_p%8&x$9$OSGH z+zb^;r3HkqVB&A#3^wG+x8na;dh2dYO|Q| z?|TFx)UX{2&)PfG&yKlOMpwf#yYt4J;#{}cnH-jy7U_&9#07P#xXq3sEmqhx{JzEIT&eR6E*ER-D=Z6Rq zT!5$cBHRCr`Pmp5kstqDJlr3-4qs8*HPOHdc<~ze@G&uxPbO2HZ|A zS6Ohi%{vqGt#O+ZlU+v?7}|i^v8AW z7Q7ik#GV_WcKzA@qz7^;XVa_trJ1 zYU#QY&S3owZb)wyd@5MKwqjZM+oxOV#NR)NOXFN{=W=RlOw117()1wm+(q~yTqw}O z${t+wb;1@{!UbTGVBjXV6EnTJ9dp(J7?Z zua;lzC}l(4X^$V|RP}`&c@)rcSUNGiFHh3@3Fcc8IrMF!rjo{@A#+%erCE?uvCN7O zuf7|w8FgZj0A#leyVOf0Vw13N-)RnSg7}-TJ8wc-oK-VQ`^Q@M_h$118cmKq(?s|P z5%{HotFmRtSZKTpyCEcpjH@2GQSrv4Z^lrY==(-o9qDXaqmx10tQ5V-`+0j0(5~+5 zBnJO_QTQh7{BGSaPMXB=$;DxM#6ibqnYOUaRXy1#uecKt(m#yK6H%r*rfVV2IR8z= z(OL^;=9bNBH*2pISzD{2`Wxv}w#KXL>yjk|zYF?Kf&OpbG4&0&f+#oa`kkA( z+dE>NadO-knq2qIRbhr?$>@F&;EPY%Q)K0Vm)FCZ%)Bg@#Cp=~kfLNsRgq^)Cgqg8 z;?#w8@6l%2$m_Y1Vgave3BlsC;;jd8qLG0yM(m9$eUUW*i;r|Xjq&$s^WHCZV?8x? zy2|!jr2I;xlXO~_u3q!tE9YE(xa>HjyXq&0@@5ccgxQ7Z*~Xd6UyBh3JmQr&R}vwn z{p$RCJNix^a@)4=&olhD2J^R|BP9;VHNDG_=vt)mP2#`mE@Nz(tcTDD%94RSvHLnx zyU#lW27+#o_{ihk?Y$v2BnY@ZtXgt;&`s&?OMa%q$o)O|6aakV{LE14Z|RrqD3ikrz@jw>PhHV-t$T}VtH<4qKD?h2+a+&=$)<>WR1IwnyBfV3)U)tO+!pL7 z#+|p|_GZYt0fdT|rmN&KE3Cr>V(~IZIUHz7uXH)0rct_>g$0;3PZToihiUs$#-=D@|GRnRJ9gF4+WuoGQQ%y zl4LD|Vm6`uOFui+R7G@&a9Mm%@A-KGTJB|(*y5|GDvEh~(aaY{nvA5=Kyj0wMP-npqgSH^ynZPUQnaw=_MZ_I`D?KAU;LSxuX-DV>pk2aQ)eu7>zCiA zp+xQ32WDJ#jGZcNevA{7zRaHTdkwD*yLpc{SL7R(=&}4 zCx?sQ0<|FYyL~}R>?a2&V;=>)3bJwVGkV}7_MQ-7jtp($sXLO4L*8Oqcsecws)Y8v zxKP&yCtAx~jNhH-Fw^LDAv-K;lj*IU##j}gn$khW$gkkdu)b&7Uxx#bDlRnXfy z?aM(P@8X}H*6dE-j(VcX+5BGRKb#_~n)PEM;DR%aRDvU49Kks>Nq|t}Ell2sKB3yK zY2-y%kBh5($}0zGKBGP9nlK|W*d^>r8_It1A7k{lgw(C~H{N`GetstsM2Z@pZ-s-` zGsppvIc1(?6~E=2iQu=_0f9!@keCAEI)C^x{zIavuZjJ|JP$?9S*d4ok4C*M2GH36 zUOdc2iU#d0qRz-fyEsjJ`kI8_p?}Q{%n`g+ba$b>_i)Y+dkP@R96!5wrj~{Vk>lM~ zbE!H8H}FrfI(}5YES=#al#>r_zJ(?kN78j~**x!hy)Do33$of7h;qy0(HEb4UrrHp zZ#z2!?P1O3S;+`v9anez;*lfg(2Rv$>m4(+a{A?kFfmPg&OPashr3QR^u&JGoYbTr z%03K4hgzn4B}Bbwk`5awc_NuS8KL(f!*YzEyLWTR3Gc9(S+s4K=kYk|9^9S+#TgZIddj+?~|NBaU-z;=Y-R zG^6=5!G~AxuOBtGQH<2l7Be{rDD7HpRLF;q@lYs!X)p}L$&-`_Cxhh6qYUmf6I8s8 z6XC8Aj$}$YZIiW(gYnsQ8emNPsS+47o8P4IJJKtfGtwiX)9x`$L41I>?Nd{T|J;|oTR9gz zx;5LmYA?TwKIx>9I=+poKr&ACe>^hw+u6wT>PzvN6O`|#yHHCfpSZhztpSXQDX0e6 zf}0=5m=S1!)2qJLW(#v?bW z!^9<_lN}Oo%cML#v1sBZ&bE}TPqXX=#?wnoBIn990d7_ZrM3y#oz4#WpD^MtTmB2< zuo6apEK7@}W*u}ln&i_cX|^-NXhamlz&OpdtlW`bGy(B-ML`@tv!A-7Uk~WKJw6G( zlFATO2naoO6Z^)t!7G|i0boDxW68NlJuXNTt(+mBp;cAHL}iIVvvDN4oTL2RIye4v z_`SE2viGj+LS_Z2*$CNXA)-Il?o3J2?LzCQ{bXOSG5q~Ld`u3|Ra$NC6luI8HgT_g z9j+XOOSoq!b{zIdzH)AQaH}=Y%)7oZx!(L+gcp3c#>I|UD8%s)(2*PN(olz#_HkL# z{l{bXmmokJQ)^%W!5w>(Vqm-YYUWcoeHzydF?%E6`7K-*qhx!wBMPOM#Vq zG;$*6_EA@#2pel$-2IatoqU7G6%yNU+l{+Fivld83EAIdBH9D3rl>Fo;z+fpC2qq4_bP1xqjZ~vQQL1a(QJl!d=v4vOZ?27e>t-zO3n$ z>#`xHrS+r7R`>1mB!R#}%nF&j*OGUIa#2t>;po-pNXaR^6rEWN9sRo=~jrU^7irmz`9Us*~MDD0cWm$L1hbfZw|(GzSYnCruO2zGG&99=GQce zocuIP%8`=$Kixscx4oydEQy1f$D2#)B(M0zHo-@pc}e$4j^NSv*AR1>nHG5U=)<~iAgOIfFP zpq%{doBhz*gg3D%6jV<{>IWMqjJc6mXvM5*AJCi{z5H(zuZ%ZG54djc_Mp>z12veg zNobs;r^*SoihrNS5EF}XS+hn|5#5xWvJN4fAtv!>sQV3=j&iSKU7+qH?a&j-V=2J7 z2WumT;c8mBH_1jyv!=kr5dn67Q5JcV=`T2m2PyZ9(bY!xaO^6BedoUv?TI}zn7~`$ zVO*n{oUIczb0N0!ecS7d^W|nQejRxjwX<(SsGN=+Uh#mr)8q$)P=u$TfHSIA`JB>? za<-g@R7*bYgc@$7TdtV7^mbUQ`fagaE}rDZ{fRF$PyOI=40uIM)jl(1H)>h+ll22p zLXpoZ$e`&45*dGANKRWGg#rb(( zCtZ-g6NY$5MC75LjL1F@68AB8a4rp^VYfBOG8)1XST*IAEWMRm%qg_VOolPbrT<&^ zq!3CIV}-1#3oGNhTOyleg=bGg3Y(3nMBLm`1*%@mfLe5>%ptJ-H_T~LP}B#1{R4*2 zh-&(d8t4uiU~Ajb74Srytx(_niNr^VzF%gwY}_nY=H|zlV-EBJ0;c*SlRx z=;@v6dBz zufOn1O`}c}Y~9*7KEhdg3^rd>&NTgIw97m?CZbD+p`uEFAlwQ)rBib3-$koAkQl*d zcpIK@0YULFt2nXI#pGb~0l!6c55U5~!qwwc*4cc1Xj`S)MKQW-k-`2(**U9~C=5Y3 zSJCZ0f`9HYq()zcj%lHf8f*bv`uTFt9IezG#%UO5G>SbppW!3-W7veGu5n6UWnOYk zzEX#@Dc*E$no9A>n}V#f(oMh@UUn6097*5Jo^N&XOjj-uZ2L6lcr(ruc=mbXH?{5I zi7^#dQb#G}zu%MauN3~@$kcc-OqZbYpnG4Hs5Vi zu?>jqmuUgNLf8lA?4O}7=RlY{v0*le_dti{nqqF8mq)8)M6jC#PPNf2&BVA)W* z68$4bmx>+3uejz$7t|co+2Qa1ZrJ>eU;(#|G>H*pRDteTg-$zfq#VUL{sP73EG{8~ z!RpLSj+6?{oxw}GmKUO(5JqF7O%svB4Wp0_t}gIzd+x<*7-y^JW{2b2^qX3do8id> zRaM@Wmf=mR0mSVub~}@fyBj{+ zA=ig7b6+u;S5s>40rU7k%8A@?H)QDO8LR`Xm`mLq>Rqfe6|?8`NFPnOR_!NTTX+mY z&4V`~h5@7fo|oARE-$LQ>hZmhP%z)ou~tH~S3+Ihe~-*4GBof324z5d?&>$2IBFm1 zk@*<*w6bdiM-p&`n)OONVT!*-`8cea)pl&USYx(7be`w9-T+KmAmd!Am`$E0YXX|u zDqU0Qy4D7HWa)&|(xKnn0u`ft5MC?JmGR8fZ*klp19ufE-xwy={z7YVUE%gD<|8u# zza-!@%O;^fADESU>&@ve+Y4i;?>pFUyC}>sg=O(ROv|#ivb-~(Sz%AFTJDa(ccN4~ zj5lozcWMBRCL!KWqK5zVp|4V2lclqZkeH8=Qu3JTMo(#T^~V0%P*+_7#ED$wDUE;y zwLi#d_A9^q6x~}#;HGkG$aIItavb|b3v1CF2EIG4+9DjVo2=weL(A<H>>Ba4_vLd}BAlgryfDXJ6n?jq^6#vr6Y;E`nJlVdROJ&um$LVgR(|k*!&&6Yb`K!xj%50~DsutpwL1$#Z-MH4=Pd4Nw^&1<* zBn3vefa5#3sh^dSe-{v?S_9jE{-X)}{^h}6&fQ1gqA*0?s)O;su50x?ah!qJ>)x@!>58TSKqFyR%w;jq-a^4Pp`zjYkc@-zcKR zV+-IoR>D`Y{hO)Y(%VcZfd?k_4@_+wxp2E%)h2E^3pi7(*t33fHuQsbQnbh2Cd?`O zv~(qWYsfD?m}DjO37TjGqoG&AY*~$Tg>liC!&A9cj&JJ~E`yFPc7mud8t$~_aV-jR zL+NNhYiSp3gY+b?zn`YRYxyeN{#I!1_}r0C{|WBj2)p0;B;fZS9%$!sdH~_tMm3`c zJgw#?BPJs9$$P)ZQB7i2_1@ah`Kp*Gsa|)tQj=aJ%K!;08G)p!kzbHNwMgUJLlmSP z#WdG5H*Q{Ihep@u`@IMJOd5^^Vv;G5sj0P+`zm~@Mw>nc%p7AUMTA!Ro)%L z9l~fL8UUlq(6cgD8~O~Q91h^MqiEDH)9|G)@r+}yP|6K+f{zYr1;*D_(zeeJ_eWlS zza@ng4aH?S@@0<#bT6JHL0m8@>F znQ@bpIvla%)PDl;|7Y3n`~MryhH_3^bqmYh(r%S^#QzF4WJb`SLt$HNSOUwX3BNla zgJJM`pMmMkEO2_umk$BDJL*i;lEfEKh55IiZ?FO|tl(&@gExItJolK*k*0UizaHWk zG6Ku%Z{eV3ofqg42?a?8#a9I#j0-XPAAz}k{S{2M5$G^_|Vmu-VzKGrzi;_WQnh*^KJShhNe@y`2RO`nQ;UC8#$ zIbBdvK`i)Si_;t@S7~rP!H%9TLFdZrEL2!mO#dG&#~<%sMC5An1sVb4S)gyd z^!|W5e0<)hP*i=xL1D9M51D36#f6*(>0hHhWX+}|KB!!k1@^Bm0c@_RDVOz_wZy1{ zM@9+0q_*%z1Xkq1fHcd3%$x;LN5(eT-3btk~s&Bb+9Fg1{dl@Vl? zcrk0OQs|>eX`C|qI@iL`$#{EocFJQ$*Fie8A~Q> z_2E{%%rJG%Kcgz(uM|3J;SenmBN*)6Tin=BcdnElKzq4fNj)NHKr9c3FS#-!cE=s1 zU-IPWk#5yUqk+qKB?Tv@j(5=7i*?YL#ex!0_j*5%=^m5PEk-UoZ~>ieSt z!MO#^;L#7@d?7J(Xe#t7o@Ynl9}lJiviVlk-!2rS!|M z;jfSI?igHuqoXEaIb)lUre0z?rmT;v)09P8@MU(nlTUe`!IBX zM5{*BNbt|y$9Dd!vJQxR%||(3m&b%Q6;sELRA9APwx#7$-H}v*b-f@_^Gj)na_I&Tr8+=X<=e0%r z?h}Ly4)OSRuBSgX_#)MCeWc=p*4junLukPmcL@kA#YkfN0Yuu~H3Lr&sw~_tTuj%{ z&e{hZUrNsIL9p~ATXzejjqxeEp+QbavhMP+S4?nxm?KJq?x_R%g8 zb=B^JNV49BeXfkU&HftY*m7!Pcdp}h%G>b!dgi%zy+-2BnWiY=uYPekb|GI=$$1m{ zEIJ-+Xsc@h5GT$x^E+KQRW4)1D*0>WrWD1F+QFLgP;}MutV~xFJ-lw2v_n&Ut650t z#QbgvdBI*JZ=k= zbxwW;ww(>S43FpbGVQ80%xhBkaLi7bE)CTd<>+d+&3z95;I$O!fJ-d z`2NdIJ zA1ufLHyNa74YLiobZk!g()ewx19mf*&tn3na$B4xKqWEmKngDD}x{4Q%RIK#a(9G--VRNvg_@$d=lEKi`nG6_O`1A{ewf&@}Z z?`gu^@|IO+qCL|G?1${_3;n*>bST^YBc}-b%~ArDUNv5(c)7wBm&cw)^^+U>_-c)J zvqD@9odgA3vl^BWZjLjC*yIiqK!&XkmqRM`-;A~ADD8A@wn$0=j91NqAh~y`s~b`` zKdy~3E{h5L*g5{;G6!(vo8>e@fkxuk_%ME1;R=2FE$od*fSK7A@Emi}cG&F--XVV*9YG|o9v8bngoxN()$uK<(D;Dj@) zQ(Q~RQ4}>Q-A8czRS`p9=P}<-Lq{MQP_6OHT8#d&sonz~>5&I=D~;L%s7$gNx(4w% z`J1q%x0E`j_NA7!BR;*ET6j(_ zikNz4e)J|IA8i%~Mg2YXC zj?~o`5dl7ZRWuOMn=x!HM3pV_I~p4T+p9ucly10&xRvxnw%DZ4RdwLT8XNtYLDPq7 z0-{IMwu*4m+0>MxSli5>(+$3jNviMKyX?PQ^ZrCA(TSbSnU>r9cE)C;8R?h^yaV#4 z0*ns!Y!uMUly_!GkaKh%;GSJ(rTcbW&Dg{Vg#ay2xFKK#0m5Y@eQyP^k2MDi8jAi^ z-Kp}ZCMAh~&n#&B$eNg*snaq#hm~v-(pAe()tY=BOu5C8pbu(aJ!XgOVfPMvSmsDt zy!5FNjv_vUx)jZ#mbNC$E^i-Lt>VVX^d9@we`o<)_3v+@6-tA%wtrQ%0M*C;?BS+M z-XgMt`dKLrfr;z4+UtHI1{|pF^x5@{4K7W#JY1X0zqGueMcBu9ZgGz#-(%b3%s419Su1*unqanxh^#ar|odOJW1|Fl!^213_ z{St!vyd*d-a^ik7QO4g)@Ht3kT1{ekZun`wi)rM>byh=X$g?fDmzO>;z3uFGP23c$ z6Ljj?k}P75Yp}9zX0`%4(WX#^j=1KLv=N%M<0Im;;TNau%oz@|mZD)Rc-f^jN3Q1O z?TY`+`%Kfk*&E%UasWo)RwjDOo-0)oHvGc`CoNddjTIAmS?myW^O~!akW@!+ zeaCNJs>ksAowl4y9py2b-zJXjOyHCMIqCjJmSmQ0XiNqK4^UB5dKAGs(jxprRRK60 zNaJ-KLON|Jc41GJ+P#C4NI2s%)IMkDqi$`x(WZ+~J;rIrkZ)QR@Z%&d`7_dn@X#E%-EpBt>ZgJakm_>HdP zm%h`A!Aj2kgLUV%}Bf55?mderNP-gs&@q>fPHde=cjya1NmlpnZ%lCi0TF2>QWc* zGhcF+)ojl-M<{TR{1YW|C$QJNJyyhn@hvNX$L?g;1l5+r7OgkePsvDM7G!z`9}>JOB>1cm_yLS(5ubQJKF6Ee?{1y6 zUf#c~hkY6sUf9^P4Q7($*Y~a&ke?398mpgA(=GzUkG@PNC3*N${hjX%&fcDIZ~?YV zc7qe&z}VK8w2YQ|BTWsE=Ur*7xd7+XAYr1~tvFPil3Z#mKD7xEQu}5L&FTNC!v9{- z{^mgBsy-Aj-XwC4W|26@7m*Wja92)jaLzC}@VYg->P7~x7-h8$`Qx1V8p6-%9P)sl z{52rQwzMi^J2Ux1Pstm@CU=FQKypB~(vJY0}m$Q+D@wKwd{TOJYf=*?^U zZQ3)6lw`?pWtDp}Rcbr1llA3B0R{1E(nd>VH5}xY+6UY~lsmT5dA!(2z%f|PgKwj) zw#&4Qd?n_4cYRgnX^9l(KaV7TP{IGfAJo7;$+7rvR6}ZzBN}07xnZm(7%hr0kUGkc(tav8Ux1YFpTBvXmNK*VZd?)f8-}! z@QMz+obv_p0SO(MkF#Ual>?7I_<70-tD>|sw=%`bX3 z;!AJ$k{gx34noiedkM6|O||)i3?veGH?^kw-QW?JWVP|7t7vIHdy3^NSkK(M+}bZd zbI{nax;^RV$fx3GxkyRf-e1Wq8vQljx2eeLz;^$tliGKTd7nlVmN8^F%qE>%|kxJr7iS~NuDl&v=wTs)LH zYDEijJoXG;Da>VuVY%?q{|36LX>+ z!dF20>Tc;@ZmIO}rx&C0hm#iSkNop7{F_hfX!q{VPU!&0B2BaawI007_)8~8^qq?9% zc{`?$-=~;#^g)mciGTnS~4|C64B}?sLUIfbde*ocQNnC4uMgmceBAA zDz?_2w?9;zUccIKVqm2KT@MBh#!9Yi|4?W1{#b~2lfL90GtClAONPV4?DBKNJMZhl z+hF6<@bXhOrj?|NI|;UopsWs0OLow z_#sihw8Z|s=7}Cj+Hg0&UAl#kZofSPpniw6SQkSj-det?jbk|c08cjeJrFzMEvVR* zej>N1!lUQC?vJ7kHpzab{#=9CM@6)Cg}JE4IgQ(WqCFS#SoI?U=d57dM8{!Gb+$>O z#o;o$<&9?w@DbAnH)lVd7J}0ZK!xY+IDo98y&id+`$1%Rnx`p9)t>tQpo;#O;Qtp> z6u+p!F*dIAOXE6|Rkn~4v@8_CN?5>hUj{gsrlhi3+0##H5ubIU2l$EiZv-kw-gsC! zdxCzG0BvJ&MsPqHAl=K?yCw(=Rlc#Y!qDGxJ>EQSy2A9smw`v8{T{BHX5Z#mNzu$B zus(y&+(X;SdvYw;ZijI8zGu`OyC;WPH{QR$CuZGb+%^GXT11eWMZj7CWAW(oi7Vte`&hbELASI!aJs1&1Rr6LpSFZz&?Le zu>bCVf14yG{_L6?RdCA2cOttkf}^y>(p|`r6;WI3o?sVM8})QAX|OUGi34_`w7-j0@T{>&KUe~Y2ZeK_IjsvHV} zUQ#WZ+Kb7QHeeN}FxqkI70CGVrpyYC?1h+`_^VK1{HZjzAQ(=eN7eIi8(FM+b!t6q zK9Qx)84O2~(X)bs%EcbJEgAF?CbpKRn9zXi}Eax zr)tzj%&H)CV>U0Hz~kcXUqT*^JP%x)pY{Upp312#|ADpT5u1A0>owb< zl`>RsRDxUVN+F-6*P1sKj3TvLurcJC#3z9lC`RpvGP#ctJNe^vC#ajA3rh=$oNoe-@>Um(6@QQR zpZWJU8pL{%|JCL04fV*v+^b>AvwYn#)r2tJVu$NDso%0%@ijED$(|hTTY{L`Eud zJwtOi^Ldlk{ps^>v!jT`v#W2wsya;ez)5vComtsRTUYRv;^~;`4kK_}ub80rmjIV4 zx2t_)B-P*MT%=CjQkQ>%;Y*npRiNt=9r1X|Ki!BfHq1Z5o z58|@O#xd+K66hbVdRXzFYrd9Wnz-oUf7S9gYmD6FzEQw2d80sauzp&2JXR<}sRQOM z6!unc6cEnb5+sDCRJYVTVr*Efm`PXi@8p*2HFyr2e;LCib|VguRKW$RTZVl(tzE+Z zgLnjRKSXSBaVX{yoFGN(iz>V}Keh_hx~3XOC`?q%046|TvZvF{ry8lluNIF4TNEFg z$9x&nmSE|!H&kfWj$$)?MnS){`aK*eHPEP+02jiM$_}{1bZoR3ryd{V!1VV>_b!9S z4Rka3P-m=wzbuB^2y;%iI<3Uuv2QROckyLxv)*?hsml#2sHv&t2KYP|Ri zs^N14tDd1E3zT#uAe<*Vt5OzETJ|U7ftH5t-i=|C?()$mFD||AbLTW;9KXY#v+j}5 zBztK6v(qs9)hitc@U1k#cojT^c={hpCSUBrWriRY*5|#!oKz? z3&CsvsO`#Zc!t7cQ-#NT>wK9$ zSGUirkxoOU_cegM^kRB-@Ro1Gc>mg-o4Jfw2{n(l3Hwl0bIx(g@pP~Weiy}FV(c{3 zh!Y(PDeGLDJi28*-ZN!%r9oP)96)!!Iq5c}n0je(X=C~0dj*DB@6{W)$Jhq!-LJTk zo0*10jctZmIFc2t(M7JO3ZEINj#k{@C+49u+Z6Ivy$3H#=Eo~@-^4#DdD*EN=`MsH zv0->Wzh&CZ9nj-8@2*(rT$AG8VG{#gvDH^Ah`!MxUw?*lKi_K<`10W&`uXf7z^lAL0IL za{=Bj{z;)tQ5&dfU92)vYnk_!IB-QZLgXVM+^C0VJ)7y7u3{;ja-?GR>T2fg9)Ev| z37IyLboyimN(`E1w$m{xMrwN@;ill5!o;xQ`YOr+4WX$YVWp=iZ8r+NnGCuW8E8+R z@+%mPRR+I&*UWRxHe^{LR}1`rwUNA>?%!g1WU9N_?()5$vfP~AqJs>f;Jb? z@3sVpcV>@}rl+>d2VF|TW`yU`W}faYx;D_8ic*%TH}neR;J%cl!q?@2Z1c892J~B{ zHN%6d(dDkNFs`!Lp?v=Uzt#fC{UKqh%1=y!(FD_s~a-$YvF_@yp2TI5I~^cPI zBpFmX1b#3!`C@)|V3*;ZD?QFvq)O!Q9mN>I>GS?Z#0k$JW$z*KJQ+(FwOFU;6ha%V zJV?@aG4Irg^dAq5@K1T>y>yz89y;vg;YqxnrGb2NSJc=FyOgeTYnHh!`{6nqI9NcZrana8(FU zBfoXoseAKp5spCK4bS+m&u%gLH7tj${4*Qo_O;c0HLn{f;h(k?+C0d!NIJASw<||B zR27<|N}9isAZ6pG6}&Mw`Q7;ku3y9cJS5lTMu1zkhv_e1J$X(^@L1vU2{%vzp?2kz zjaMms@-(A+*#ViZJHwm%GHBXTJX|a6B&~?Gf@s2em;ewGN&o>Hwb``1sCxXh_qbaa z(n(cwIG|w`#ZO!4+ZLDvG5n1Un~F5-8@C7?r&6go*HLmS&{9vOTOJpJ5+JJssb3eL zdYe!}POj?5xTt=tlQ)}{OuY7wlG9&CEkNWrw2>zqD-2>lcR`$dv}+NT6-&&BU16Jl zgakQV+5O;7mQ$qCotM(L{T*}z?qxjoK|R*LYcLw0+{-hB3bo6@>7gH)tnrtOrA0H&i7Mg%N7e;Ot$9JVywubOGo~BXUfD~uzGms8y z5I460cif*j(o`pBnpLxqE$Dtw-O_=D!B>-HvzD`)6SZTtv;=7aOgYN=v-`4IfR*rf zW3yu*^c8S3CFoFb{XzV*!2n5m*r}MWNgIX=8*jyNrs{W~n$tT`kTBEI)l~2r2Jb{y zI2Jk@+UIiBy9X9$g8@2KblcSp6>@avA1T{x=$UnTTtd?m#ctWQEUhFqu5=y?D1`Lq z`PEZXTs6xFZuxScBPXWw{<)yN{|{RKo*uN7fNSHGj5-Y=V$YVV)c&xsNWEfo0f}GK z*U6Jz$z;m{mF4H?sJV@wNuts&L@aOFA`AO+01{RELPuzxCRxTNjNtlHl8Qq@e(ohK z{H}ABGT!SiWba>6@0XELb~~PML;(cLkf@%saT!=x_tWQ{Jrlr6*E#ue%x`7@q%3G` zw5T(8C>urP;|P^?e1CZ(=?gQIjRdA8-$DA&ttJxp3E5Db*QtjEcZj7W44Bd@0v0pWnG9jj@@@Ax1oT`F! zx@p;e?ydYK$^M2eSHe_%Ve8_Nw7tit0avy*>$JOLA>L*v@nV_Head~t@vGCXvv<2c zsZ_I-E}gs^6rAWryF6pBW)am!07LvuUH82TQnt!a!TsVRiEPv~r{#$M>c%S87$XhA zx(qLZqR>HJqc+hR`q^XiuPgQw=qH#d*O{$4Y+pD9f>q+UjW*^sN>iM4Rkm`c%;fOX z+APaPMBEXbs3Gxi6Dyn?RLiZbBf)hGE!yW=$%W>6%x-B;so~bse2ncDHx#L|0Z%m| zk{osW=pzv#KPCk|diuTGrtNNKaHzKN17bvYLc~Rg(as(7hOF7-jTo_}`ZUtG#M3*< zkD%Pg!tNmHzR~T!b%|}83?Bpnt;PFzlkt%oX|nN|bBTHheBW_usg8i)W?9$u&{6FB zV()YBj#b~#e(Qfmrz&fI!lj7Y0=P4FQ@Cyc1{$}z=qrsyk=x~{Fi=e1^I|W7xtd@9 znlis~iu(XSVB~Xu0^W`Ib{%TfJC*ZweK#O|+9n<~y$3(DmajWz*(*av&an?EyZL=f zEN_PIp@u8Vl?|s?@<9EvZr@;}JJ_e+oO4?1;~hzPoZ(~qgD3A;)eE;&b%IACl z%hb?{gEzz>eLFsxziDM8IegO&4cr&t{J=Q37f-5(rQWCp8X~*oJqg*WUhEztzTxFw zRhQO9MQuruMq4eMs_gKdG_zK$dx&=vyq_xc8@TuD>wg;=8h+|L;xl3lsaq=$FyWxbR1Y!I-;Nq~{em&_yoxa6wp2m}N1fhe~l4W|engwqFF+ZC_{!ZQS z5wH$?XXf>*8gdSNUv-AHqt3qA0*y!A1x%9UirG!B@m5f!=%%lF^O7B_q9+nC>zB^( zAS2=b7gZ1Zyp>S@^=$pulv{Q++{@tiJyd%H<{rjJ%{R^1(lE74q$)nh-hXcr!F4Fi zK783-WB9t*CR_Obdy@d4rd3I$90g>Zcglo>4=}DydO8jqY`d>e8 zp68C{Zd+Zu0ZLW~j&k<4N6Z)1e$DOyr}y;&q5SOQS~Y}AM}Y19na#G8$!_6nj#Ewu%N^2EzukbQ$AJz?p6`6)Z}#-%$BGYhGM58 ztxc7zVQJ?fmm7Uqdi^S!?)qbSR*wlm&Hr?lANbomz7>O;<=i-A7S9Emv$D4cML#~s z==z4+by10SvzLc_!o9sR&`liu$=Tuq2>ru!fD!f_OqXj$<6St zoW4tqHOlA*SU7ApJFg;N)Mk#ubuP%By`H1xjv23+<~2wrF^Wot=B=-bpQD5U|KkFOi9+Y#Cifb5F|@)En$yaVOzDmX)ELo zg|Qfh6Jr4^Y9YUMcUnC64Oh)NVF+Azu@|uUX9nlm=RdC#e%edo)RpIf+iNx43bro! zFZ69`%7A>+=9-i1Di$JqT?vu#ipYc3ga`ES_VddywOH>gSZx+ed&yxw=Gj~baZm@7 zqT#kBVk>Z>tmwRo7}MQ4X{(zU2kVb6drWr`iwGn?Ib{+Pzxdz<#3u|VrJHw@HYW8E zN2r)$WmkmgUkhq;GmO@ty~N==#K-ly@>n2xQ}Fu@>c^%+&L$Q3IPJ2ISx{J1A)5>= z?d-P2F}~Q*(KlG9Vd2KKU)66RB-CJ^XbP^Z#_RK#gToxOsQryP|HHE}#yV8T_?it> z+y9TV?+$A!!QMt42OFY-N)uEBRGNr%LaZPnU3!Tcdgu^ZNG_uyDotsTuF|AS??k0U zh!BwyAV5S)Ad~;oZBzc=+sOaT zTmx)y785ifVPJa@-1jkrdI@u(==!C%gXaVq=cGsY0F>1XIaz z9}AC#1EFwAx>}9y7;LWC5Lp)ahAjpZb8VVIv|}M(Z;EI^pPJW0pG_4$NEu?HbAI?U zpAuKYOc5@REC=n%$+BJIozUO#*aN=0GkW5@aTS$D$+V#TU-G&ls3_j(da_JUL?j{N|F8Z`bDx~PKa&WSNB%tK|!S-$B z-?G_9h^od;?-dQ9%5!51r2Dt@RggysrrYyPt213YQrE2C44fND326&5yg%vBhdLcqa7S`n0 zo(5Ov*CowKM{#w4cBY4xBHI0_ld&f0jFeIoyQzc6})X zKy2l4K6(RDkq#Ba$F^#g@%yz!&z5U|v+P^6)*L_y!&9rOX)f_cy06zPB2%u#j|^C4 zqNC}hgzll$40=YloO7M1ot_&x+5f)>-b|MT+72r3n%1qvLaZ3m1SNbw&Hw2=tf59~+5M7)S+53oZvST$G3N%0Wbv`tW1!M?$fi8kKRFQZ#W!VG_WDcQ#eeo=AC zl?*EX<}WLpIiX4c6N162+?wn~U`O(upc0`gkiJ4K2J=(vG;DG2*(Mk6crK9&!_e-c zaGpbQ`V#49RH;4d_BtiuqLv<@0Bj)&o5@9h?Y)mdnM#)y-n zCn#grkfK9Md2=13Y?Yz6#+l-3uxH20p9TQ#=3|v&;jc9C59im%p(m#M8e24c_zauH zKV3xI8qW}Fd&&KGA2q;YHkkF)5@nRTMr~PL&Kf#Xv399tDz;y0QZ%pIh-KSW(^*;g znf1+ly6U*0|@ju_eZN>DxWmJ&p|uZhDB<8QokoVk0lwz^Jy9h zqeVVhA7>(W9jBnzF9$^;Uz&5fejlM`m;6A3wY`K!psG$CU)h^Q54}GSBw_r>;G#25w0$bjxa zpN91k=U!w_4QtRY=in&jHRI^7p=ArGa%oo8-E$Ai;QT}4I2MP&pl;LVAppRwe%{)s zsp|<28_U?TCp(*y8bK3*{fpHtY17e!WZ9mEd52mF7YpeJ=Y%zlNxOaA^CzA3-CQ?y z6z{ZoUaLixU~6F+X;O7DH+m{-sz{Y_xYfVf(A=Z~sJ++9uR}L%Ui7CTfW@oGN;>Xn z-*?^$`$kauM1Mof1y#2;1N72GAH72$AJHM|+c_>p9xmQPeKqyWeljgkIe9Qr>g^jGiTE%FkM*Q0d&l3d92X5N+qi~)SKJg;J&?mcpS zbv4uuzNqfqCWLL&4k&1fA5`U?*!qDt2DY|l7M6%U+ic5XZvL~eq#SO*#u16vov@4X#a zK8&Ma4F7v1^l#NzDHgfRX9zM2+IN4~-dgu2U~JAd&+q1h)7{>)KHRi>NT?`CW`N4g z|5?fT#9kpE`0@FLe`;g-x><5qZA@5`!1)Dy;6)(63>DPkeuL-hfBR{Hh4 zBV*nj6A1)a$@7L#&ep6OK;qcu@j8I&)+8o-bey?H72{p$RHa;LTm2tkrt|M$=5jcW zO+*p!<-&Hy6%)AwGFgcsJQqe0DLELXh8d^*JeYcd|6aN1Vh^`)vSXyNZZy&z`UR!# zVOg8 z&H7Fk2^fQ|`-IYJUt_#3vvo1;^E78Ja$$3}!&xH|7*08{vH8S+bAa0lH9L#oou~y7 zwQa24cz&bXVw_H2qDP~id=EGN9FQIRGLJr*1WSS}?FXGw1-!b4dUbH_c7Kg7=d$I* z?FwcHxHfC+dRZ{O;OS5>LS$&wjJ$rx{99#`UGwtg36uCK2Oqe?9Z2Zygu6@w;*Ed@ zt65LiBGp4YKawpC1;9j^nJW+kA3XG+5um0|au&6lVKuFZl1f;-FRbnPW$m`%Bi2B-KU zrCzLY(Y&SJ9nnaONATDxM;Ac-2a1FfMO?Ila@S=4@r4(WXUHIX$N z6Vj(ifkrjnT#Bla1X?GOWt7x6)hul!HRH1Xt|MIM_iufD@PFXKv#^aVP7s^he>Y|9 zy|6~-YS5t(yJn`GUJ<^daS^$+XfOpiFL#8xn*YYD@n{oOT?Vgi0(S$+g(pMSW#*+T z%R*w|bPX;wsgvqr2zswc1qx!KSMKc@3|?KX%I5^D*NUKfZOW0k z;}89Oneikk-()ZCOj*)CbA)SSF?IRiB}V?;1p1WrwEPXxE!$JWCk-G*rf zOF2=Jc_SrGvRxSuZ~1QtP~e}fpg&`UpBP1aLRg|D4%GfmlIVLZl&s$KXaT~cn#46$ zMX%=8Wh}0W?{g&6U!gjCc6HJNF1E`O$I7TIY4oRQDAOXFc6!FBTH6s1m_d<p0{skYK>=P8=gvzF)k{rNlkK*3qCbguCYf*tZV z%{TEie0h)Zt@C0>1V8_lV*tp^)QEv(Y?~i2NsWb&{=HX8pyP!)3#;)(vk9$XB_<9E zOy(~Y4Y!fvqJhSx!}ad`Ybv0!7W|;bf?#G6R#F>($D=LC-7yfP@-1N2Tc^{@wZ5ex zI9RFq5C)T_1g=(i{Tc_kK?r;0#{9NsrBxM^eyXZKnK3G43JK*vfkpfW+bTYU5S2lz zclNYp;tqI~kLWtj$jMCYxGZYN9nD#wM~w0fjS=Gs@?>-f$HG+`=8CbN>W`ma%I=!N zPOsXe7{^;9K9kk+y{N}A&q2@;+0lsLakhT(-PQC;Edg5nxOdpNXpaxy+7Ub|cg&gP zqoWskO6E;v)T${^Om}EzLuVhxw-h6Oln;WY{$BdXmF&NP62<17!wag8Qy}I&uk`t& zf>7B}($@J2l*(e0r^blgR_bxueoIXJpiM3K$tTDvsayr8w^q7$`YUu-d;YL(rGqCU z{banvv6d%20W69V>~&xT6re-L4&1?xH|V#{%p_x!KCi_LSZNV`@(51}XrFDQ9U4;V zfG)42FZiSzJA?|)`Oizbhp{{K26>rf&2^&+hoR5AsHm}i$+E zRkfDeLOD`q=xp^CPo#g`ae4Os;m$J?<{;eL#jJU>p|4p;2(k-k)VvEkLo`C*?ByS| z2?p`b&kSp8oIo5t?Ai|{-Z9oa`H?ENUq2VNuXzQEb2^U|0}HV-+}>n%e>Mi#AS@Bb zcf5xZf0Ul%7v$Dj2yH-Q@;P6F!Cj+}p|*Q17`J(n^s`d_QSsa9Q=#8&V`%H2Yl`g` zjzimEaZ}`@!26#n{QK+Qr2Q{S&4qwsoN-)Bi)dI&`I?xbY?Myk0j1?hg+;h?u!D@m z!*{A-J>2OfT7&*twwu#-jSt`rm!5vg!%9Ev$#VrG>DDX5mmGY>vH8mvO(CFTrRBBf z84hM(YhZtiOB`#k$@NXF%(>B-%MBOS8SIEVoSNeKmg5e!q#c7SXS1f*)Rtn$1wYXO za9*|lz>Df&=z8X2SjqTkoo9Jqh^3?;J0iZO#JH!@PUkq2(5pU^Bqxi9bNC|u@6!H5 zmHu&YT>N`EY67*%#R2`xpfx(T7NK~k0BHVk5w0t#xaHEk|DK`SwR*A4(5zDkQ;4&h=(&0$luoL z9lC27cAyDw`L_K0_|%4isF(QY=El`)XgU#C;?fJO^(v~*wjb*w&P!2Ko_F=I>WA`a zqJOwBM&`aXBc=DLXgNniDw6JtV(fq>fel8Ks{MY;YwQx;mv?1nfL7|u zL|I=<*4Ili+)!=@f1^;7_;W1hi&gxHtCkF^`9A*$Z92V>_M%qfc>%;F)tm(*4*=Z4 zhptYH1kWaGiCB<5F2QrVX{C}@DoZ$*V?TmjDm(W&^Te`#$1^3@+}yM+&r_&@@&o3a znFQAr)b9bui|$#OzZ-w9wEuVBd4EA&@HI#=b)qiCPIdyzr)UQRFXsfQ!B0VBjuI`` z35Lhnujkv9v15)_>zbA&5T+Wuy0uy%+-6(AP+C5q@FAP>_F2c83tvjY3s%ux2ZhqM zvcUrTZKJPNXlpb#NjU!|*1$?pOuyshu?(DDcYn#@Yz-EyUkvv6NiY8~+{DpZM4v&A z1?rZBA{MfDy95ZALbFGChI`~2YtF2{(m{P+W}Hy5#V$2oOh}GSA!7puTwDL_G>|-jSb%;~gy0w*^&Fx~v5xqDpVrfiKqU!@UdSM>5XNWo4&;~m+qw4Ym(WE*n z3f>f-7NfhHGY%|?sboo}&>Mh^pOD&L=siM2YpmmN=#fXE378bK8GY?HNMR8m0^%E>_<1ySyHy^uy*ep_ z`^gN*PHHwBWA#a#)c%%4ZY9I1!7dHA(=_xl3+pLiMx)g55@!cn?7fs)?ik&6)j>J# z#GKvyJZWzuOpl6)PAI}450_ucx)-i~5QQ=>KZtkM+OSmQcs_==)vtfx2~GHtO=u*7 z2Do=l3Jr9=0pp@2rZmupq0_BWcYnb)RF{ypS>$XVxedoJH5p|+LT3J?16C6y8){WK z2;+kpGq*d6ZVgeovlD*#@D#y0ZR-@*s;z7d5X zGtEGpxG`N6$KuvnJ&PN8!BVtUFg%iO0Q&_=ALgkz*XZpjoUKngQwSdKk3U+3n_+)$ zyx_nO8`#0FqD-`%!FRl71S~EwaRF?NNJhoQG0gu_n^f-HycSM8ku_6ir*)LKNbW`^ z>4}Z^@|!*D*L>EPL+TnA?n|>lL;$vk(^hLk-CuYaKio^e-GX?ecvxkIwD|Ho*Rj63 ztKB&UH3zzMuWqT_D36>fQ&x*yajim2Oad zU6HHR?PQ?#tRxP;v~FXx9-*tob*gcW+-S&}1M@n$AK=ihwa~}8)Sku&U@WJ|q5**% z^3(qgoBwtEr~!L;54AmuJ0Iv#jp2ta$OD}h-=_3#(Nkn0&&nJ{8MhjP_A`$$JLxS+ z#2448K6EV^b7UhP)>tXN^~$gHMk5|86p+wJ`x>B+`vH7PjIv~|Lq7~vM8gRh$0=38 zT7pdy-2Nx+v zGL22orQ&UnH&!U}$py(dF6lKPjvTN7Ila+kT&u*UHmI}NyQFgS-$SCm^Z)-|#>ox% zv?++CQ_q*YYR5G1dd>|s&NnHn@f|7Qol3B$-mKQhzlTg1+Vh?MayY{bZg}2UJX&?u znz{YuURHfUI{WaNA@U<=J0AS&ET7-HQiT~uVS06$bI7rSJh0z=t zx_J<84OSb_UO5{>BJw?%Vqey;1$z_+7fQdsA#L2aimIO& z>pI0;H)hrutgBF7Ms0UT_A3J6S;t!TZsxInJ3fxB$GB^oXK@E~I(2mntr37ZTi3<0 zSxBoHb~r{WF5VD(Ebg@T%!j5a?HA_^$KWxp@?p~}zF_CrId#;3cVg>5+rll950|D( z%WbLpoh;bSZUJ^A$909L*KS@O*4jBTnXvfn`3dh+d(WSVc(!uj zcqa2~*1fpTpOwi-31r}`u!L)1r^e~HXWxALb{rAB{qctWx0uBf3i><&ekTugK8k)C zaYbtH^L4vzio>|YpoIgv3|CY{C1;5Dw=}^@ZDAI0I5WQHfl=aUX27~;InV?%-%pnt zPY&#+f9}*YAJS{PLwYf=YgD#BKowf3oJmQ1AF9k4ego0$56^hi^hIAk%d1U&Rgd^% zO5{S?fdzpD`%Y`>LF_fwFfa0`C&sL0Vv2?`^U$@63wK3NRkTPlE$Fsi#>D%y>hlvE ze;sb2Uwk%tfAbT%)(Pt;24rln9WEWGNyzy5^1bA1g{@c(QWv@#wY@E!`%pG$^2iU?_#Ie1Zrp2JIITV#{d^$#zNeDWvxh4XgG`(NMC{tz zeVv*nVv})Jr6i(2(=vH%P+m_>2)r+LY-%4*+y&H7@ePMDS$kdrpzRp>*lF~!;;E|l z>SbvmATjdI0dF}!O?@HP{XjSb-CFtUOyyO!jrAWGq@SoFV&~~UtmpW7=JJliJpb7L z^791Gs|ejfv%7{tNska`34#}`9@F$6u%8oO%H0PGmi9Ih)TUU#?xR-GtOw2Wmf%s@ zw3qa!+Hr})ZbNV5F@g(b^{@etn8c9r=ifG@UidwCg;-37A1S7)6IjJE!TWA6joHRB z^PSS7D<)1%g?wR&yw)Vi&cWR+ld1C$nN^yQ1!A6YuEn-bRLkd5OL*2Psp@(L^`LLTUF)V`5RQ@Hj4b-PY?Ev; z)GBMqR{F!JzTYo#_w_$4!TNdT&*Tzo7MaV|T)KR9>{?6y#XHGUF*N-%S9+4?g$4nG zvMAWu7<$>jwQ5LNrqQ-;jvd1JPPU0m(X(1ZH_bsAY~#Q+ZR<(cgYFmscK$W)j6o~; zOycRmYj2l05dmJVnk~jrq4%;bfjbu(Tdd|$MxR%;j~W~%K`AGwkKLy?*;lH9xMY`b znU$?u^qEk8EO#J`KVBh^Q9a8T)&lP5j%xX1O!D9gT2$p{Tcom}(>3z5hui$(O6~-d zgl3C&e>v8%C6@@&sar5bS#5EF>ep{G_#=8f?u|y-*W`s7lU3A(DeYunSG-b@ z71;M+<&@BGcDB&_?GwTF@iA+Acsf6ze;N0$6L;k_s3@eF3!!#ds{}X{wU|J z888i6LXW!c-u?Ss_{U*i6wk?j{P6pmKe<67c_wG!gv$P!+K$(N4WViMW1ydH^y6#h zX(yN!oo;=-4jHgSs|Tv|(a3>bY-1hTh~8gXdI=_4S|&Ru3+(nx@6HeqmTB!EsOQtq z5=+G?r+PW^VaVpPSq&L`iS`m>VuL|m?r8!wT$*yy5lI8_Ca*TdJ248yAT5vUrN3#- z?x9GXI9_v**$hBlWPIN~bR<709A_`KUJz+YOmMWzg$M1of}#*}2T4aMrYK8itGw8% zF=GyHpN<~6j{oytc=Gn}{G%57cR83`&bf1Ht~EvLl`!*^K=Yx7qF%qwjqAXEdIV~Z zic6KC&se*rpg<1Wy8I^RfojgUb-Y2r*0gqZeYmm9(LAEM(R_vwLe4Kk%}vM19~^wa zNaTL)H4l!}SDKyeSa!NUl0TpN<~3^k+;?%C?i)Tja>^dm^d1*UOd`c1xE^ ztYL|(P?pqA#J4DW08{)my+HC_3&=R;&=cjM4YOUo-$88>+-)V_>Ue`(#5$lJyuBA{WvpxnZIef!rEIV0a%wpiZrI#C4Zyfpf zWr=09?Pu0w;Lt16=i5rtBRT&TKW&=y8m~bP{J3fYhnHe6mwFGBZviPZC6!T&g+s@u zUY8Mw*>`9mk0;hy7t2DHqKrPq$hELu9wwJ(cnOdf(LM$jbfdX8wgDG+uFatA+nb`* zhD@n{PIvxY&Sy{VjQIV{KMsN>J5v6+!j0$9+g80n3c`*FQ?V#t1p-cTf6>Gx=d<$z zWqX8hS5Z?+Xjvb6<-6m-3_r8GH|(=@Tr!304$tW*yoCgJ5L86BZ)o$++^DO)^;YMe zs({C5%79MjP+soTnZh?7F#^S&Eeer=O|8(3T*q2M{w{WT2)S-CPPr^z%bgmPK}z4J zHZ=ZmP_brJB4oMz3&0fHQHd;9Y$G>@H5dGHsd@_nUQKP*(#RH2uEY}o-!YQbeF(i* zN74cRtO=b-eCNW(Ogg@ZYHuB$YaS6w-$P5dLsYK8d%pWc#eH*YhI6X9veu%n%yi+D zc$ax3rYdhytXt7l)RoCGN?9rhwvqe8f}!8*FaFGL{E7AoMo|0|k2{)6CC`W~x}R&) zIdkT=`5Dy|xKA*}%A0P&uaO%j?%Et#U}raDogMasH=t$fQ&qW;Oy;20L{HGz1tVLt zBICuanXznO#F6V@9#IlTHGmhb(T`d1f+yL>qbHqr zk5^`hyw~$AbM-hp+}Y~Nxu-r5T>D7+y3djB;Rl-&seG+IML{DrDcLiqlnS{~JU@32 zU2K3pymf?U=L%Fm_(#|qdm*2j`;d_rerhZn78*%`^vdkXIX#sNoFQK~TKHlYMi%Hq z2|n7ce$O`Q$|HPGiBCA)kJ@y$`*3|!aCD!D{<>QC`O+%4dgx=x{d6N<*+G8Fr-y5AUX>p`rPJ1q}_2yfJicZwwcfL1uCjDp$jzVEUb2 z=Lw~ub$nzs(sx*gPx^G6d(Y_AV*K+^W~@UeN3cPn{_)d%G3dB_lf#}>PU5FhL!jye zFmGQuV6bANNTOXX!|r;VM^Fu?4qdoU)tc>DUP5ApyjT*zpA^A1x$W`-@yq#9jdu~`#aHKHYD3Xq zIvWY51*{os^o1LQzy$-!RC%sf;wL)qlx}=wOYWU)>#2Ne!i9Oqte-ZMW1kRA6kJ5g z^tXNoX=t~^`*B)5fNz>_w8Z%5p%MvlttoT*Pe>}87S&$+HaLxJ+cAsz+wrMIno)oSyZ^WcO1#Vl>mAx%m6AMc2CndVr^e%Y_@%-{i zN+bBt&fCHgzBTWycNkmrVA?r4F#3(ez)e zn#w+#?$lg5Sgjrx)jm-i;J@`> z#&*0Pm{{N0fRR+84#JjYUhj{ch1Dp#Hc_4i>=~5Qwl%cJ=fzW(I2Lp*Y*CV-O~+Xo zl+6b!?gPF(`c8{E%4Ig2gAXOT12^XftYXrSbv_k$ZgLKHu&iHrmk^iu2`kPy61%mO zOme;lz}X6^s`z@&kQpw zg{3g_+;-&}%d`7H#2>Go`}_$W`oq@F-#_~kd0e{n+MiOE_XgG_cbTtrx`EMR@UrNU z$U~7ObI%)NQEvuqs#rt2#NY15JTeb_F&ET4ZJlkhE0u9RPMavLJMz>4(LNqxss6a} zd{gz*BPEJmcq~*mx^f<^07&_^8m#a7l`Mwm;_;=0yhl@D$w_|MR;a%DBI@npai#EI zjUb>OugzlA#)HngdD6UKYPocEgrIN>Ii7Tq_QCbJTM;W0n&MoQ-61E_Q~Ab6ZEMhl z$-c~U$mQhoLw8esca+O0G*4bhdr4C?dwox+b{2J6CWE@!rz&3^34llQr5x?f1ZZ3a z3-X@olk-holB~d=%m@fSx)vY~ZoYB29HHTopbJjgPbE4hjEmmu$(g`A5*2*R{#i6qbmPP84kxE6~`&Ui-b43IG1HOpl@k~0J*_Q7vhn}Be z%}7}=Ltd>w-#wX%he{v6(vvk`@ro_ARea8#IhFQ_WT!R{A+pi^JL z8FAENKP~tC`S(J6gV}wN#OpWWQZJ9t4b+e7)OE5Bo~=iXIP|VIbSOAB!GMX!@OYLx z2lT>aNqAw*b_kYM|oxG`> z%;fKSRd*h_3+rg;35M*k$hk2k4yT*d8uu{@_t0n5b^;a~;?W#A7mc;8=ax1d)Z;Gy z0Z@Vej5L1t3xCkkv#(6E;v3PTWrc!Ay?R*w9t&%?u{@3DU!iB+>Vy(6% zc+%oiJW52QGZ$*oMwKZ%;litZ6 z(dsPTlq$0eqMw_XPlc`e_aRG^CmJm_4c_~U^@poC9P0Efb|1HC#=>(fNze&7`skh- zEGO55FgSvIUly8_aS(NV;mmDZ5^ZieBQfes-1RVp^Ev@14}1i;J354{bb%4*Us2OP z(^7uN;)jGWevcZrI>&|7f`SsZFchQBTi9*d$I5>K)n{swtub83?1u60D{Q$~Vldg+ z=slIj3UmlMPiR|@7I#JzVgbah^Mu@=F^i=Eg6aRc`pli|>%BD@c9MmN0mbW01zof$Do6E^X zFfabICv%gAK>VYgZ=jcOHN-@dYSzB-1^aiZeCFe~@l)$Qmox|UXtiDN5@l~q+3yI` z2y24)dUWd%kLc@wj?B!s;!z}N?_h9ft>F#4#3(cRc-i=y!pjIL#tD(^r9`X8u-9Sh z1#V1`w?&zL1A}4JS9@;LM-I+KawHA$5oQ1CqWEF#Mzsk$c^=K)csfY7IU(Ukd>J76 z@$D=EX?WBR-++pLjNcAR%61;HNlrG@sQHXj;4b{Nvjo^ZF|>(x!lD zPWUTB35g5cv0Jf^S7+mE&&BQAe%VI%yW*s!OBX+uVaMSbPUj!?=wqGwm+U12%{Fm+ zIAC^Pr{>vf;76u$GzU#&2g23-gU+=fO6RH_fL$G)IE*l-^sS2&%$l01%!7FzdSFL> z(Y!VF_C8Ru@F2_W)Fwe*N8r@nf5j$$PHFw8!N|D^?r#wbP&xKmA!2i=i*ddoWkkKO zoAs^aVOISG!|n}v-WdAX2gWr@T%a^{jkz^giqae`$n}~EJq+X=8NQjtMI+h^W`xB6 z!6|Mt%eBma`ePnnN={J3>0OILvmtaV!lI;|N*UVYsfs3H59$cp9-Vr+HTY<0uXDYQ z8!5^kwPe`~YY0Jhz~#RRe%}?eGy6kZb8fR_%P?YgFgPPQ!E)x3{Ra|4Dg?jk;nkq@MdLRcB zN!oSZwS8i|bE$Ne6XuosH-mVw<*||Lp&>!nUz2uAHvG150X&~Y{Sm%YUgVX?M4|n_ zIBQE`#<|QTfUAAAPGYpzB;MmAk*_)GE^?>zGRUTuF-r$SNKfB*30b&!9=-^heA#D? zz}#V0_lZk%zn0l?_f^3 z`n6I`PS>X!>hl?u@aUud+CQQRsvU@8*8_o3j4B)e+pPKnIQw1Xe?nQ^|D%z7S~SQk zI*bU?5+`c;OLT0W;eP9K<#%45mK0xwiK`R4bG92tmPLl{gA4ojM_h^&^SPImGNMu8 zhJC^vl=8DXIsEz?J5FFx{9`Xb;7(q*{eESm&5jb|(`3V5nXshsvSax=FTj!=H!wfV zp;@@v8)hizPC)(;{~)Mt=%e5XihgL{c0j~L!L!rh_(S%39Am6TZ9oal#iBK*lox#G z0Uou~^geiH=8Z8hL_rL^4c__|vbc1ZYDrH+2%bI;Cyvt;#*&Nq4q>LAboltZ=(`h>h*j;?+PiPkM(CB5=80}0VQB|4vC z4lMMmwyI~(nbx9zp(GA(JVLp@)(J~m(!~VoLL&7zje4Te#Ro`iIEFtAMYkBDIz7At z$It|;dSq7+Ps1}xc~PB)ZdfSi=22be*0Csl;T`jtHX5#a=ADf5-*r|)Pd5YS0U54G zz;kh`0m*-Dgm-7er=$a5ony(u61R9xI3dam=j+LQlDjgh%+bT@(r0##D;e2_K&}gA z5Dx!}jFel2o=AATJ#!1*2H4*^ZCrCG-Z>~xn&n_f=9{UF|8)C{$uj~uCdtiB5wsGz z^WF;5+Amph)9MGQ_u5^qQvDJC{%M5Re&qc>1#YHxpK4d+Na}BfNGO>N!Zz*qaz6}| z9Fg^4nstuIzp*!)v5(gFeK`PPq*vq?zKJ#Mp@`;dF7ZD3YNvs>dxv`$4?Q8N*|!w( zrBLUnNBTz~b3wRn>(avUa*9)skyA|V^pDn04LJ`(==zI?JQieG`KRn1zAi+)l9`sr zu&V1qKQ&G>KzCPljz@W<-6j!n%<-$Gl>}WsDRb8rodheoR^dys*!B0!%*=LSA4%q7 z&`$y@X|##jcaYQ1R#Ld8gJjBH3L9S?wqpaa7Tibjpg`%b=6m|Ec0B>I$v@1_UJJ|S{kR^a z(d*<4lAs}cSwBv6LUv&AL#-v+IBo`Dy}QuaI;Fcru7&xV@J|}$53fIAQ4Vog0iAq& zS`kCErF?@ru0=8{<|Pzf6aj{TQ?n@VkVGx;^GK^YxSz)Kz^*^+36f5X@)ZU z^n#M<8D(d19dS(778PFPwzTkO8+~){S^~Yl_ zXJyTJ-U%T?M+SlYgFo6tCv`@!>6nW4ANRhMPGVFUS3bJ8AhDMqRo--Ek=;DT9$N_9 zELwYKL?-**T@&^ml zPDFD8j4pOsNDfPLR;KKz%2>>F+&w_S_A~QC8=Ckd}+4rKD-Qn1Zfq>Zz;U2b~s*j<3 z$e|d&^u}Sro{n&z^Hw8{l)mhQVU@cMnW$y4K?3Oqzwbl{GOCfz0&uGVSJsdMn8G8P z18#=P3FS(!utMMGt`Y5}8c zM1GoT)oOz-YrED5iHA2+wz9A)4}AJYF+PaC7S035JJ;u%)tuRbW)>Kk<9&>lQEs|NAPXGGRIx6viO^fbsfJ*H6;2O0&?SLsl8QUgTasva~nJE zH!!dH}K+QDD^gYr7-O3Ss}-67Ut?dB1R(1 zc=3nW-b~zL0MT)xtQNDGp7h|%JY%q3U++>IaDVX%^s_KysC@kG#bny<{zv)(F`O*V zt@7&M=;DMq;*u`H)5K2A$Aa~h{nERdDmaDocqS6?O^BwX;aJYz<4=QOtZ=#~KVpa`t@LS4{V4vZYs zRkJ%=nTB?hm_sNmq%wA3T|c-h8|z=RyvqgWF;85rrv5y=U^Vwv8Xt{G=ykKIVw^DP;$`^33DeX$^` z*QGDdsZ(>uyRH*#WHL6 zW&vp5+_5lr*yju1Ky{o)Qc;r6r{=Dq!#}x^o@N1w*cnyCgr`dVeUnn#id$FskJQgE zrHimOF6K;p>Aq5PZz(KKmRVD^Z1C)sLqU(H18|a?-1lNAdYE%uAdx|95Co7 zBM#ooaG-Qq#Q&ca;ptGmy5q}(&$NIns{%n3Sa-$7af>tUx5?Dwp!CWRHqD+jdP8!50+eJ&!D-i++;cR zeCywL=pt~fNDkpS-Z(Mwn(FRdT)zEF{N*}0?HE@mnt95py8*A+44WR&SJ4*yoH6?pt4|g5_wne$ zGy2bsyWe>tC#^i%5-}^`%ZP)>@-(HDD>P~4!~d7qJS*+O^QhpbGcnd)+aI|Yqj7Mc(RY!z zr+rGC#T2ih&QDhJJNRdb!1kwiwU$HrttkYLsH|3T<&$oaUvmMng0|iGYD>rL*Mb$b zfZp3VNUSPV&1Js>RH4wbr(LxHaIF+RR6SbP>BJcwedp3Ly7n<;7CEmBJBIa(iuKV^ z*w&#=Ntj0aG&{_@EPeBUf<<0qPG>CaX}fB5WUFa4yIjqcRP`W2->zm2JTUqi`}w42 z!NpFokXKwOeKA9p(*(Rr^C{u8KNIEQ&SE?z-6G>1GPpL|5AU2hM0WwpR*|fi$MfGN z4e7_9ceAX#lq~!9P`P5|f$fH+i|Cg<-^N~kS~YnTP+t}2_poL@ay!uD+BjQzinUu% z=3c=WIJn7twexE&8U=ma)*O@U>~uV9BtyTfVtVaqTq-@G%=l|F$v8k9t5Pm=#=L+Z zIVQYCvzrLU&6dW#d$k%4r0y_zi5o?Q|JF!PubT-u@rJ21U@hHT7YcDnYo0;`SJzPU zW7E^{$?w07gX^_eM{w}?+D}Vr$=YnG@yfbS2kdol?CwS2xTBw+@;m9*@Ar0Yn7E8A zq!GN~em!Wsl4!XPg9udLa-1L^ER*7JVNQvn=o{|=JKITcv=~tCUkrb1EUg^(xKXE1 zznSI49I_e5`^{JT9mW(Z*osD(CX)^Xf-%!iNwJ#G{0t$F{i^W9UaBiIZp^Bs3g09a z9~z%=M`5M%DD=3;j&z>u%{i|pCLQOvBZo}n+DzMhF87&aQ<5DvIR}D0dOX1Was>z2 z&u`mYLG~Vb9|6QWa2435@cV5O9+NZr_^+CblP*$~#8s9kW!Vm`@j!|j2%MYKccE8( z48Qu(-Ek7kCQ&yh?kk^h6GnWoRw)J29@P0o#RZH(l&kZh?1QC3W_97TV*x>z1@WTg zR1+o%UOrXPg*7sri;FWjx2sVYn(lt=Z(+)1KY*JWG*g~^1vWEh$C;WJNc7u34q%o! zPzZ`GMMI@1-BJk6^PB3df@aGGm3<66HnyzKkuWhg)*Rh5)%&=!4scCv2y_+X`ow$| ze$jl2ADp`}^@VGexMP1WQEIjBbCcVv=@a0=VG>hq7t*ZGs}eJ-n(dD0S+_A4#Q_rH zK~JVuQv>pgC)_bU6X>N+{w98$xP}Ah@DeQNWESM9(N~^Nn zNIo1jQtO&A?PgclUyBBEewDC45f)VAC=5nYeHL<(aliI#r7Q&sbiY_K&Ik;lwJu^1 zmI5Pa$DD&MBk2$iMou*|P&ld+_)$yEsb*6?FlMS|HvF|eamQLo;dbC1)W0-idP6vt zIbv$UlH7Zs$!b(--RhUC6F3)q7X{GZUmshx^s02%jfP+sFy?h6U*oFyS;sF$L}YNO zo3{Z2$ts!hVsD8CXw1-I+x>&6DAB3gogWct*afb1?#RZhwZ-fz2INNKYWQFhS>x|U zgp7@=z4Wpqz2vLrV!(@_I82Yy=zHXR1CdOT0(vfuZ-Ucsg$#Q3-3)M88a38T!lqZ%4WS&X z^Uh^C!K+JEekz7DpB{Rj)+)viz$sG)=IhNsJx!*`pST!S-O2)&p{OXDJUSN zgAb+#6kRgR9Ga>JSKqhzRuW)_i9&-*6q@}_X%+LF{+Ou%3t~Wz^TT-0&%d5C&;z@U zm0%GC^h>VKE|JV*wrrH^hZYMihXd8c$gQdu)*Bz)E|CK~gWmO)w9rIq#Ns<*I zx4L(-1APMIx`%BrK`rF1$WuG?o5r;sx;pF!M7OF&?|P61CjE#%6njLx-nBwS_w1En z^en*8Kw`ioVW#kMnL0u+BqE&a~ z^>T9s^4Rr_^v@CM8};XU$ooQDKfh9|_J2F|Bjaw2N+>5OD+lDLC4|)Nc$urcV1EV} zgI>-+EnlWl`9+tUK)~qd`Ob}n+}WBT5ctOn^5So6+Etkc0iOV^N6 z|8F+TmSvxYnwptfxl(iGO8um%r8d;u8Hzb@gd5@Aa5Nm1d*H}ixkYh{qrioGf=Wh8 zD&PhckstT>zJGu5;PGI*fx~s3^E%JhxyWeGdCAu-0;pyrLed_GKd9GOLEb29d~h?a z_I<+aM0j{FIPIiAawX=S)3@m?kH@i0GE?=S*+S^byt9CBN!6{Yn2fBmdV>y5Q*`Ra zK;Se0tVPP>Cv5+0jes-1NsEx%#bOAz9o%g1ikGZp#ZC<)u9+c~7W$ zj};+FDg>X%Txf`;sOgrdY43crB>qhU7zgrbv!rRGJeu&(5fKI1_`NVYG8iAXU zG?O>-G2lMkvQXzGIkq%bbk_-*8Op|cX)UDQ!rk#|a9T{MEfG_9rqn79#}6M#&fX6x z24&!oliPCY?Lpo>Y?N+wTNN_aLYHR$e`ZPUy1RRs=iQTgm5}i?I0OYKbg`MDf%Tyo zfeQg!DOIF(^D4pZf5O9w>nzeN)FWX`8#6Nb#=`$|;HaqP=|C_Y$6KF{9 zzj;mzkl{J7t;?3VmJwdlw}7&bMu$%NwUwUJt>(4$8P*M|1{i)$lF!sSm;yO&zaK`2CZCC>t~7i!S4Z4I{&`$z*vCUWmZzw7I8`{eW-5y% z6Yt2Fy30*FElPY$wCv|}CFcGO=JBJpuc#R!f43O1rFgEru0eqI8d*foV2=@T((Ws$ z7GEpz#N9^j2SDIy$N7bPW~kx)ZF{y@rLEVD2?937o5ffGX2~L!LXa4Dn5H04qUGGr z?7dGQy+4!HzMcE&?dRe%fb6ChaSeL?a3Fq&3GGt~Bz-Zmv^4N%yJt>YQ?Bb6rwuf* zqnhAvn-(tCKg*F1a3l4Pwu11)mX9_X*aYfw+un$_vy280t5%^d+92d*hR3M$62mCE z_4Cb){KtB6Dscx{(C8R{AKJ#`K~C4SOoEp=;KuTb7?rxla}6>$o#jQECMK+AIcF}G z&9&j871P{na1o4`F*pS^AEx}i$Frv|8G8c4H2BwGDxku=ozKFW_)Pezf11Y9pl?(gPpBU8I z$P@Fa+U|2xaZ=G`6BbH_2??=K;P>~oO5~w!-GJ^;2+<=^bEvsnxiJ{AVm@$r^aX$V z)|ML6p7#};J<>N35{pET*RJCpJgh@(Sf5K`P0P}1bPb;NSU3aO?(oQ#lk}ZAoz~YK zLwUyPME!gAJBN92VjAOX(`AYmL3e8TcxVHkd4AP*VoN@j*LMZRDx=E)=c~=Z{T&Tp zO^BPwK#ILD=?N(O#CI#%XhIKC>E?(ApSi#qK|kp*jK_~OMC+X}uZkQVFSi5jSMjTD(sfp{h*>3VAegbUp;HGUMJ3j57l?<9 z|I|ji1C|e#^%`2Tz(i5ssDEtAw&UAQXFtY=Bky(uBg+#+4*VG3pt;%Vn|yR`GdBn? z%!VaXQWFuHti8iv5$=`s6%Cvf?XBbEk-4;kGZH~mLNWyXYA^*>>i?gOd_}Kz5dZe@uF4>9b^B*DLYuf9_e=AOOK3=UZMMX1BKgBLTULIxejbrfeMJG?+M> zr7BXn+Zb2jc&&kvM$Q7wL+au_$2n8oF|mRB?9=+$gT$>xCa71DluiQ?u-jwV-H z(7hSn3=UREdX-jlH}$ruR-YloG=a& z#+>JuR$CIK{+-Q>p&=^CK~g86LssI8H;tCTq00Sl2sc9PuNU!6D_^CBFS_e32<@Xp zp03J>vRvsMD#Q-pWq%L`Fu7T-`0T#48-|Ts$%g>y49eFMg%`&;wJj5=6749wE$`dD zERGCzo1Ji)9PARIM7ea4DG%%v=OI*L)dCZyXw>$aTs|EzHX|r=cU9(mhyzrkQ$;X` z^=VDps-nr~yB9s*Lw)BErgTu9pL@fkR0jwGClGY$!Ou;nC9$fKCgk zMQ(0I+BjVd$x5ucq2DmI0S*o?r;_gH`IxuMe3CDpB3`|$o(ItahH93Yd~xei+d+$k zimIJ~i`gW?@zrA-{@{#zPnW;SDl)j0Xej<#Snk6ptvwlXJDk3lJ>uJ+p3)jt#B~37 zXoedmAN!WvKQp{xPQ=sRd!T}<3Y8~7aq^4^T>9z}X! zYC!UqP_odi=4U`_p28z%W(@GiomJ}Tp}7LOP&7h84y}bGHOe*q201Fu-Ka>RO?CpY z`-Gu!=Z^}URM3KD?^jt}y2w5>!7|TTq$ehnPP^Ck(BK8V@xCto#r&AsM+M9``8~>P zijj`)i~c8*Sjs=_X+@;Uu9-%~$VV!WGPV1)U*j743UEM=k~%%4M$Xpu?f52X#WMf< zZ{Beai^ee=-b#=5J>x;7=Z)))%(|2-<5Lfq8+RUkug-QkR1?WU-8gLkS<&(w{STzu zQOrj&4XKxA&c1(HjH}m7a`#S}Yq@Sma;tc;)oY)%Rcty%b@%W24>s#;E&n5E19`x5 zsmd9`@2s(cjv1TCX_USBL)~}C z8@l5xVRp249lb8R^YALw@{8ZsLw~8<@(bj%63Z3h$18$Erk;Cww3%NG81*GOPhnfk z#MDxXRhbsaib&NlIh%V^g5kvK9k-2rxS1HB%$aZq8a;mzs+i#ATpf@gx9pWDsrRm% z(?fL|@Yz=6Cc5ajFRNpVcsG@@DZVo05#`Ef1yhLRvG~0XrM#>?nq*4mNa@7%-GfU_ zob7`Hv`NFP^)MmBYMq@rYP{S^`ja+=W5p@wuqy6xDoa;YCcDXOXr_v?>FNGfDhkkE zX_b=20|S}RM_#s6WYbvBd|8?`T9;(EZ_|vx3ibC>-$M(p}-_%DNC?GAHp?+XprocB=rH` zs^YGv)s3#1X~I`we%Ai+&oj3GGTJpaNZ5-hZg0ydsy&(c1(V5;BnD>c!U|31BUknt!tKMj=CXT`e!N9y`pA2$=DE1gQnzH&DmJ==QK{~{KK--zvL%o z&V(g*6ba*KZx=A`+(SNApv(Sdsrl+|)_TivRkFNa|8Fg;AAXM@}bPD zrS87I9*;xgGUP<2i4#D2pe0x_(aoodb)bxqOzTO#Us4vCDM@v?Suu4*s?;6m zUuu`ZhpCgiVleRSvm5EXYyFNP$&GU*BpYOmsLud)J4x-uX1<)8&WQH_mXxnEU>lI! zxDnO#45&;IZ3V->#1 zeMZ5asF*Ad9a?Wg(2fvRbnI zvy3Tj55^nX@T@mIcMJCho%?$0}1&2R@^drF`sF1kl*d$a24ozE&AHSMpVi!qGy;)Hkj|VXQ%A z0H+*=r}TP9p7rkKv5&V$xF3JWyQ;Vr-4;MkrZ}N0ob^)@6I~<5iIU zfcmaWTED5s&libs7I*t`jMbEr)<=hgiPbfguyGwT$wVfuEUa{CPpIu9wQ%Nlh7Yvw zpKB65+zyG-tTC=6dWBv5!5~?Ge=%NIg?IlwBuZZsvCnMLgK9JHk{f1*fH~ttb5l!< z1IGSA1$(=3@+<4&$-EP+(?%~@wtH*hdGg!HYt=W@Y|2_~#uyry-ZI*T0*?J7?#Gvy z?i|OW9wFiGkI<06sh#O86_v*s*pB-K8%+@H`@#X(D<3p{0rq1o6CP*Dw~8dnwT62vmxp1X1WNFPwLJ*FWb*nv_Mk%eqjkwo-$Q746EJ5#ej5WaI>SQWB^}QEImaXd)qvaq&0C?G0nOnDWysALqCK>zN z<1D<;YH5B<8Sv@rroId)`rtRc)-7Fdq8+sTH*>?`Eej!@3_1wy*H0Dc+kA;|UMy1e4rAonO#s zzV@p*(p&y1iY{M!%YE?AuC{A=U~*Pp?Kvi^Ce!SIZ~fdovRpTmmXF7E;6F{aLiqJf zMNE(4;QkT^6qSNqmW}=R-5>%=MpvgbHh+O2M55>BNZK5@8yz0SVX zzX{rm*%Jw5mNC;081U;I<0o_tcN)rmAjo%jS#HIk#62!wlLDMIUV(j$1IlR~5W2}Ksl>{RwkXbvh&wN2#rZ_#rEPUE`{(baScaZD&9nAs8 z$$nILaFsB)3ar>r!8T(QKsWh{4SJ*hh+)x#6;`5}3ys+PNB3%s&kn-`g zqiINAdPlFl}2Z`ZigkC zeto@WqEZ5KW_p8i+W=Cnz0MBSOvy`PH*wd~t?+@Wfj#y5mxF%|Db;m?+Kn4n;+R!7 zD{&`G#Zm|IT}apL?WH=dat92oJq4lf1JcU@_^B8EHd&ZF z5tp{@%I`P@&TPwTxgW|dBkk3p(*|6L${!b~P!W}r%&lzKBd0`F@=tBnMRH0%W#7f( z*unDZjOF(WZs;OywX_6?X9B^6uaI{oL5!hOi7&N<9^paCFmsn^C9-ZELW zNESgSz&|xQtS|OvuvObL**Be9t|q$sy4yaQY*~3!P=h&inB9|*gUl@X)=Ce%N74>o z8R*L)M9fWHYC%i9R%7|Ix!t?a7^HJ5J8#s9S$^wH6q+Y@^e(q1XuS7{{(-Z$I0u5& z2;E5J0bLaINxTW<7a%^cgx2;AkmNsV57kIJVy$k-5h1lNF?Mmy>eRoHgW4U&x!#SF?YLt)gN? zv#ONiu*ya9Z}ngu!Qo|3Z~whmF~aJU$BY%jTe|N1(}gx8rc*Fe4V^&pmKV~+nE7Rv z0qFr^!jN%>Y5YT1^z0%X(M|UB{8$@>t*paF*rr1ld4#H#YsmO6FRM@LbHWmQ2DQW+B*r&CacLXzd(nrm}mdCHq{#@8c8GK|w z%I)Uh_$!c>pw;*2u)FgLk2@j}?cZwOmWbjq;GDY_*&AWwqWjPZJz3jG&ee!I&z}Q2 z9B@>fgA2B@ccpR4eIC^jnYHz~GL7czG_S)IvPFqFoq`#OhM6WuRNbx|1dv0Gh9-fs zl`MEaa$||TxFbEGZ{tc7T`?zjXz5GU!;#;i>^%>Bgz#1|8y~4rP1OLYj#mPOR&r z$TYthSf*MLa=Wn?Xmk0L2Z6ZYn-|6L@zP;J5MTT^4sk6ScnY`$Ws0J$X`u$m5bWNM0K^ zm&_(LIP(9QfiDlECx{2%E%So!Pw!W=TMC-Od?EJLYWpF?=L+YV(4oL?sfQ;v^KpiR zhDy!`@C=sIXZK<1_bFpSx6*Tg`q-6fQb1)>Cu`vR#G`sTPmb2bI+q6&p)<7h`W*D~ zKexZw+S811;qjhwTj7|-4OsB5LYezd8y{H>zVUD8}F5PG_jyxH7Kle7a`f9~|gY%Ja=~^U)W_EfxZ6adfBCQ2z50=2dFpGa;F~{Z3j}8;hvpxZ*)BI?cAYcDiv`Jj~vn`7CK$CuN1Hg&zXE}f+1p$!bYb{D>X^a0K zJ_G*ESiRDRB>#pZV}xaQh0oI}-6w9ftQ7HQQR1)G4=_OjV&o!=&9&BF4G z;O)Uox1Q3v;HDVbD&Tas#i@Kb37m6tR^zkKE*CON@BPs8sI3eWIw0*%0{GbhODYl) zLrQ#V`=TMO0Rj~{`K7V@b;e75UNNLyh{j~xA#6g7DC>SS!~gcIsD|$MjZ#D&1SKc6 z<1{j9y{G<=|0iT;HW@283k83l^=N?%d=@(3R(kJg1);6dF_Vw(DG zU3o~AbYL+j1dCwWmX&Je-y6F{M;c`bx__;mkxPceKiuPKs=sL3EMl_5k{<8Di`)Qf z>(!vgCwRVgU9DV40!On#JNk7?X39^SNzy`S%s7_Gfa^TB?uwge5=fpp7%7;Z*7O41 z^F>Zy&TOI4{X=g$EU0}E^;=$VKI@!+itIBxDY|%cXU)&J2_)_@0d*goTjfgUi%|*; zpJ;#otv)626jZ_E5Rd(VM5CKhBtKyJhe>qFzGh*nSv5F!B*u_N*4bv0Pfmo0Kju!2 zKF3u4ri{vj1vS)k-G|s``O53*uy8rbZH-Pn~V^^o!O^cxsL!1De<^as4j2 z(7Ry#QH`4CT_+Bh{v8mT(+OkPfILR#oCPn=7JF?79P+_toL=3DbP z`0S^_j7mic@hGnX7rsR;c0;H2?*zZIc=Ph5*;}1K8M3uO90Mm!1PjGB?Nxjd;sMq> zrHn9{Q`20f&WpswI=xhm*3Wf^sGRu!0NVxLSHK|luR^lfNf0J6r9Jj5an*v8x%i#a zw-|@}gIftK$yQC7OiCjyC}fJ(pYWcYHT`AGQT_mx3$PQbdgn@Y3LlFW)f4Nvn3Dfd z>dw{I#{8P6`m*z@|DoXS&tP{Njt^M=hg}g%5bFQtIKL;MvicwW?2&+*{cpJ>;M&dXjoam|)Uma?~;zg4FRvgVJWX(1hrLJ6H3FpvByISbhv8f-ekWJSeSknx3wK>q;5RVk*)T}?&*{SdG9 zCS=%1@Hr~kFM0VdY9L#@9^&E5-*0ksu;oYjIfQ-fZ@tm)(TMUdrvs;b;d7Y2UE9En zaOzMT&#wqcPW{eGeJ{r@i#4wT7U2?N$|5;z)VsdY5XR2&zA)`@l7+0EH1J<|{nd9# zZYtHKTt5>*{gRqgan^QNqucgt5G}lV+m~oo@jate@_8Ucf4&0ACPOU zx1LCjE-Qww*w{j&vw@BX)fxT98O?ql&6}KC#@iMh)?66JXWuvd_F);)3z3!f*N20D zy%X2&gl3D3S4Z0qD;{jy&v}-N+=H71Q<1lG0 zI-k6;2zK&dXXNR8d7lQl^*QS^{qo~6ug+E=Coh$(V+3n9?aH<8U-K^Yl9rz#>NC{6 zMS~l_?e>eu=JQPqjLLLPIMef|UeM}Df7>P|-B-=Nk}%9#U+%A@6EUv<>w7))20Qa9 z2==Rde&I`-AW)jF>xrRj5AR z*PR=tdi|nzZhscKaKU%~b;ARdqZ*6wI7F%vy?4MsHeEYle~HY-RGYu72;CFFW9>O0>ySCA-sw z^zFjY34$~KHWdL4_JUoHv$thTTxm}u`aTt2=W7hW=4hRknk!R(9--+b{s+ts(b=~I znAFI-I#IvJ>P zd(@78*xp=O>*pM!ApK+RFq6M8!Z`eRmf&8aZ}+jJ!%XjQM5oQV{qMPB2)tb%O5$#AnSL!#kiak!7~Az()rxRvW!`~x%b6?C9wahY;U{Kn3&+q#AG4qdy%ww za14lg@AL!S@EH$k(Wr5UufZE%M*i#h)^j}G*`NLHS5NQ<+B*y3ItW%4sq@GAL8hw~ z9SFfeR2LO)GOpjhC6cul+3?4A;5|<3&8viXIDk4eHNu8Ans3Se4i*MBeb;+d*?vM8 zvI2+6m>W7D+RLEaoMCCzs~WYiVK_E-fSjt&kh`HkVU3=XTDO?hf?SSO@Jo7ZK`HHL zZE)~5H3gUoO(DUj=19lB58^zMA4kEvzL)+bislB`d|sW5;-wU{2N15Z7*!sG~v}@+yD2CRieKHuSu~ zqB<<~Awx!l#@3oWC+JwWpl4+rw#y||NlWSemdR1I_h1iz)PRU3SJQ!qaV+KIUNT7V z<(S5B523xD@!7MnXnJ!^U?b(2X4bg&y6Z;k=+E>sgXRWWam@5ZTyg1UJ$PB=pn_8O ziRf|fz-o)?6{eyO{<54)qX%0C-O>;5+hn-aahwd>bjT!XXkp1saDUp|Mea^RW!yF* z^ywb_r3Tn=>fgTC5ko0T%Qk?FmV|>Acd#3FZbYK0r^sZ=+4J@e2g)7G{gQ2iW-6T4 z-1(T~Q;A#nOfg12xM|XvL{wJ|5MdQJ`0Q7=FkaS;xY}SE8#rPzmT2}l%9{FI*ZXq! z2(N?8(ioG?ggU>i&!=#$!!q)#n#@3<(jfi&p`#VK@)NVRa9S)S{r|Y9ZBh%=E2+u9`WrV zi%apbnyYt`bPzl@>b!}Hdn}L7^IFmg9-t0jW*Alqo$WJ_{}uJZhziH~mvB9#)Wi)S z)g{ItxHi#e=QqkKxISvgFpPaV{KSNcw!jn3UulQf%-oO_3G-b(o`)9)d_vm&x#e?l ztKROGxt<-jGP15W>oE6FJkabDyK#Km{J>8o<+m>;wWaXpzmfvO;TH7&sK+lV{7joHvLQtiC2YPM{x)oIIRyZ*4I7un)| zhYTk~D&*I{6fxWawdCEXS%(#3svH##D$tgWx(nmJ)nLTa@Pi7ygUAe6!*h(%mDlw} zlHu0sGTTwP=SrT`^*e>2$@@{NBA1x?a2nYw3~(-o zTo^x;_kiMb(+2)qCHrWpF9`h8I;2;JNKJ27jiXqsWOE%78-!%7JAZX4Jtx8u#B|L< zXQ>BZt(pn_C0W`$uBC!;Cofb%=w55w?N4bqYHsEG1nJ!-N#zLII%t+hY`JnCab*xJ0?wJbFE#q+%&D2 zo0?5*1sYH|AugqwvblG`7!cBwpXVK z24@!xy8;5+T;Um;(z367@R_h55R$1p!WMX5L02FbOS=fr#0E-etK^#TE4J5y29CBxp3&nv#ZalcPY#1OgBK0 zwQ?N(Hn@7mDSK)SK}#>g`<~Yc=J~lC3Owp}%XXX$9PF<4a$i;Mrl%cc4QO|(AG)S@ zql?sR5XU7uUf{g61nX}zJEp$(xfW=^2Kz2m9Ookt9=!Q9JR8Ji@Nz%&i5*F12d$uD za$oPDV*LHWf1#(%IvI>W@k@>kduMPOqN#wL{n5eiiJ$j-`h`&Rb6bKse167kQkZ$bPR}6*;L*9 zMb09k5`+%UyjJEHx_W*#Bvpym)^t$zI(oq`PklU zP?+q&CdA?~WeyCCXrP|^kZs(A8raku->A;WQ8Jo2zjLHhI#q?={IN?++!_coN@Glu+uAYm+3beVGvW3s zH3TKb?rvd;kgf!9rx>$Wb~N{)qM@v~|1@V1H(-+xAK1Ss!wSh7LNIcMqEwfkD?08D zw#Z&0?hoR0e~V}*3h_$ax==tDl-^vDnZj~epzj5EZ%(}1vcmhtHJk$9;~hJhHe>!Kg3j|41OR#qA>N${%e-}zV7c;_wW!f1 z%D*d|`nyXncN=IE=1svXL8C-R_v@_926y3=!^n!JKY=OXyT?G73)@FXRMbDFt3wEd zmx{gGWt@LVr*lHRMS$ghDvw|3U9-EYvFNm4M|?H=wO3Ke7r~wrOYo1kWqD@{W^QWz z*GkXzfB%If@(R|3uXQe2=&`cEN9liOCC6CO;suDU>D~qJKu|1>6r2dXKGM!-Q>e?z z{&bo6A>R;uZRiS$M{I_LTXxl$}dG+TJks7GwE127U>63fghzpMft`==vOy zDEsyK5Pv*fb9lPE4=kNq&UNv^a6xDRML^b*eN!^G&|-fcH@d4jkjjOvxb0cKzMwBT z^FQXM&X!S3Lb;8iRnm{VQ#K|qqfaSvAwO`NcMHVmZZRv~H?(ap?1ANDNATm3`OXmEbkhF4obwnAPK^XA?>QkK$*~kFYFmrW{VboT@EN?iPC*lF8vIP3x*b8 z@rvpC2E9MAXt%|noeXcBCtn&~{{FT(+C9G9?DRvzeS+0eGdqb?r25vPxKa%gGJB?D zZ&hX?Exw!aMm`4=VXs#jJCB8OxE-sq&huR*wz!NoPV z4Bp%0)BZ&4`L5KEFG*-FHZ}P=dXB~}@dN43z%y)wQ9~vo4W#4r{dS$6igLjdHQ>v)h;)K1 zKJ6D3BIEM&eW!l@1FRQSMFosUw4QH)w=Cdi(d)s%fJmyDnE-lVT3WyLy3XTtw$gs( z8o1Ju&=w9PDXkpyI9Y!276H<-e#NaXbL6({sXh@)xC*OpO`3>ak}^|{k5@YA@QJJH zgRhMe(1|iC(*2iGJ>ovkXax)5dRgf#SpN=mtZafb?Tu*yRzZP7=Psx(Pw5qsE{eA- zoCpHOl_V>W!_be<9U_*8N(xNl}eOtGu`js0B4Q-j{EPSkUJlFkk z7whsMfvlvwOBHDZ=@WHc>JnV^xCgTA2bg4-wDp^dIoA%egh#}VCOn%671tu2=$=a1 zPjd5~-%>eZ?xnjzJ-(3f+H@x)P~poIi~9n#i48$k%X%7L(pIUtRkHgyKqUoON?Ol% z{KkG$J~O}av3xrOgo)KnCPGCxBc&yMmNHvkE@!qNC(2(sJ?_~+tiP4Q1}S(XtAqOa z@bj)2nU97R$&X`B|p_?3Vv5|yA|LE+U#i+QONK~n8rii&;L>IqK=8MEY%4t zHn_>IPe>182w`2#&|~iEqW-c9;Uzry0Xu3*L@w_aLVpYX+0Cvi}1((P}GkM~Q29+gOn9 zC7asc>%v0@Uql}u_PvV@Gp`$iI;;GVfdp~qKVBMuDkjOAEt<0V7J@O~rqm{=5szj~ zj6#AEBaMa3}!2KrmIF;+#M2vE{3hnK;}gGtxYUPb?v`4h}ztI%&;Ix zz89ML@_El+Q6B{med}>&csD(df2=`rsDN;Gii1@`+T}uF_R_SwyIybnXQqNv@q%3H zn157-QPHLc?n|}cOVk^m1v%?82Va3j`LdPcC~#4;J=2_jeSFppcWLU=$d@-&>H#-r zKJoDB6S8(xh|A|eF7HJf;PzG}=6bL@qmu=;HSm%jDYGYOqr>Mo#(@L#{h_rw`2rRUzAr`xh%xPXI_KYD(t+{hh_!ob(*aKHs zdOwRQ&OQC&M~+$$oQO5Yu*S2Cpy!cg1(V=TmF4h6=6WFT(bk&7fG;Qf|0(kv^mmn1dd6!yx&S+6kw$Gim+nV}HZ>9N=9l~vIsQjJT=!A_%>oO#a+Xfv0J~R9_ zAb7bt&V}E1#-B`E=zDEFv*#rH?F2tLBE!Y3!mB*@T&&P66-7zQ)r?1^R0UIFIrNt7 z!1-{+rC+)8v9>%kE)$t%{dC|#MUFIzGA`J)BynMKEYG=m;y53d)N;K2;DiWpoc;fe9-5 zsm>k@77@&X(pgHK`c=-FS?-6Aa^J!#ICygK3bBTdCqGsy2kcCraw-ppOVUuD^FUG7 z*?8vD^Nl`Hi>_LX+xPBS_{_2xvMPOlrOgg0wyvoK&f+epu|^yK<(ew=Zl8A`W>lu!G;n-iC98pBhR-WI*Lp=3$pbCXQ|O0Z18#GO@?rTdtE3B z=C#?rh8F$~#F95XV*0MZ zZKh7|e@0?^Bqxw`T|=EFJeuSV#QZRMu}I{s8meyp5+)nJC&6@$!Bq)4&ywf#dL{Mj z%jk}KmF_db2bxrug7SO>zaBRi#MiG7xdtlk2{L*TD1OuWfq2ys zd&w8fSMIj!ojpDI+>OnDBq~IOrwAQ}8MRi#v?cZZ8?vFET*UR|js(MEPY-);iGpIb z4=Z1tlp0v9;o9IH)m5VmUJVx@+Ru9Mg_;kg?ALZ7OrMz>WI2sj?BwtE>&+IZL8dQx zzFz{`&sn76Qp8~)>c{v;;LMV`?KnedX+?+wn;01EsUn+qXx3G_LtT4GQg4?8Uv62T z#lAyT_b4~lIRr;fsr!JBj$C7c$t(J_XOTQ^TKi=7-3?7-2Vn5VbD?#+@AS2Hy@vPd z28@B3ItAvmv69-4M<^ez=V`i*$`sQz2lBc8opNW?P@P!pXx&}=YgjrE%BLo_4eX_~w#YFGS(2^j!H{P5bA4uaW`p<*16; zzYUu{_Q=*cjhEXNU5w~(r-?~A($nzH&hOlLfnwIm(xrcD(9FU0XsfKgjl_o}k=CHM zn#Y|BSBtkC__qUvFTBjc%$2C8q7LlpRMc_=igR{n*75e*b)bs)J$nOFk59DOFt)r= z_AI4|TW~mQ7Wp*nlL!V7YvAahZ?Yk4*>{@|{9Li3_#prA3^36GG5c*NJXflpr-R9! zM3^33-ET@}C11a~Df7BBI;CP2Zk|W))f#t9mTTS0AlVE+rvKQ+pY&?c17bD*-q`@8 zLeSe-@$~jqbC#luZfMp7^v{|(OL%OY0_6KN?MvIgs=Ujv?eJaa!kSx2>@T*bX?w}d zNvD6sayHA*emQyOSdv)1S6U<2Hd)K2$>=#ePo^*%iRGA~Qq&>*-n~1kSfFusI*z1S zp=1sCMD6W8<<^3`lXXzC9voGoq=+(aTwe0o2qD6aX0`_=O85{pH5;k72tjKP>Vn|Y z3hcS(B*^4j;Pro12A)kT)?Yr(mE3pFqZVzzJfr{CvlHh%-Hg<|_`f;pa7_RBnb^%z zz7tW)!2BA>ux39oC+pCkt52@JKE{8|y9Il5;|ia1Pj^+0avfLl0=Nyqrnm{tLRH{jSfA2$;upVpbP74Hun~vG zHK5rUCvcuM`w%(zkchli!B*4XG%GOWOOTjKGY#vFYo?Id3K28*tiDeLH*8;QmdV4cm7)C__?{`*=NO3Chi`ebjfjdPcU{Q)})DcuC2&ZnHR}ck6@i{!Cpu z%B!2nG-+jR)JwjZjo@J($4|^h5bvD!Z1Pb)NiGd%oJ>c>mIQBs62L}R~hAk zwP7hN2I1#R*DK*EM%RtO7qnN%7g9ONmd_G}cq(>? z7@vJuXS#C{HzdP>dO8SiyHE-m8w!$$yPl?R$++u;nz=Ml5fI*5Q=zJoRmsr1-_^Ho z7do?%yW2pw_w@>OyWYeNdQp$*Tge%S3XoQ;+IHZdT@6<_r}^aTLprGF!FPlknfj&o-sMyc?4 zj#(excB(w2GMTjDU>#oN&J$o(8he)T2@Cf@`wwBifhV$a6RTrYVHneIv5zwkRKA#~ zdOv1UI8YFp&38=W;4@R4)pJjwtUXzGwM7=AMK88X|mpgF09uH4)2b0 zHWbmAe~eP!~SWpkB9?pm-EB3C3q%9d4X3Z7sSpUxTAB1XY~AmwwmJ= za=fpmBzaQL@V;8)-f-`Ab8onVu)44CT+~;_jb5|*mky_No)k_|m4?_|AFtg>9?j0o)7EY_f)v z{cy>^Q-Jwsj`7u#&KK|r0(ULYHR;PC)$!OA?{Egv=WoIA4Y8)Q2o^4~w< zxdpH#(asm3Kko%VLr*qCPHts&G@Nj`deP1eefqN7V%$UidRs!Wars1TMww>s(*2Ck zFX>8@TN@ zD%=K&Dt&OxlUY9V-QBK&;Je8k8CiRnN0zz?9k3kPwNU2B&tZP5@84-zBZ?mT-y;92 z^z{EGK%deXDfsS0UI3(Dw{ffYV<)+}oh{ci5V%n>dN5dCW{>ZGPwBe!zxm|9Ztf4R zLE=reSGX2l6Pd@ftf^BExGAElAalg4* ziK^i%?l<^OnAgef0YZY5 z1d@>OZO?nod(ZpbJHGGogFUhbjFC0hTys5Zu4g`TrFV<7^sxS0ZV0;Z4_~+Ulur{B z;L+1fpEsNAp^1~@r^YfSsW+H%p0o7!$x%2z5u>L22oBxijv2VJz)U_}q-J06efc-< ziOsGzCzG(_We(^JGB7rB1B1;qsUqX0iWU1R6g*v(YRwA5Vr~kYBP?(kmyyMeUIy)U z3*bfGVQ>BLT<_ZB>$k`@Y@g_o2ck@I6>TN&|1xVx-GhHy_+PJdrT@D`_qH(IhLw)9~av^zW#r8((Qdbmka#`U42&xAV1MTsJBJgBY`{Ggc#*NsBfEI_Owc$7%j)dpTbXcvH%Px0F;&Nv zC9(T%!lv#i($VNqn{-BINK7l~yS1`Q?0DcQcrM?}kx2q4;z^8iIM~%-&JTAF+ea5a zFv|+6t<#gU#L$sToVF|C{>Kg;j&Q9TOW^X^CZ$gwl<2zdx>XN%)3d$=ded=iUJ}u; z%kaA>K5D;^8B@QCQ5#^o5Hyx9i$*?(nNh5xg#K^3+`Q%u(Wn^K;_D_veb`V@>w1zs zVgg;Lf5q$7V9-hq^;dg}G783FgzHyG4jCq8f^6lp2CIMopou~2GZH?i(Dzo)USty@ zMEMRiM=e`?bRfMWaG_LB6Snf_D~LYz!S1>*-3=!8j(pUGi#fLiNVb1}6ivH;^HHwd zNyi2k5O0mb*7j9CT}88Be?we3d6s?gMV&SBEpv!UVyo(qm{DCnIgsuFmaBIQyhdCj2Bjq@p1+s` zZFs|b@z6bZr_ID^kQVu&nyMX4%hm^JA6E%qpO;Ai!ju!!hmeS876 z?psln`cV^UXrwfwZM0;cN)1Mie9@=6;TXhM2H-9pdr(0B@$nm?8u_MAuKwiE(g<~_ z6;{JKc@=&jSpb`8xM^d)%44;-{r&Ud{%L&i9Q?O%>wo5=+myYu2Ap$^K^AS^ePpbkHx#gxt#0|g# zy8NmyomMm{X++Y7qALddor|<7cJ(v19i^7?#T`CPSxupXA^#Pm^%Sk4VY#94LMLGN_?w`F zh+D$sp(Uj_pT``*imo!m1$ib8PBex0dQB&m*E=mc8SygT;3|t!st3iyvl$VRy~T*X zHTr&kmyqjBkk@Lhzz&rAxjeC(%yts8^0?zprmXG3ixp%dy8P-d5-Kw&P1fG&nn;}! z@3+qtGTub5>Qxr?`i6*%-}H-~U+7+?4gJ0{H0S;$ zP@OU(;90i1X3|Oti@P98aqp<#b9qVpcXbh}|i(OJ3EB!e?mx1VlKbpSd% ze>O5W=d}5Q`qKL1KIx6#sc#g`+jb7nvf|iwH;K4(y9sifQTJwESHJNFi4%jqfj|dku_9rZ>$vCKm8FB0=ca3{k8Ek)mSeqLQdBx8LYZlBc&!&5fMJLC;4Qev8zN> z?ts%F;EO|8&2()1hYqyEZ-pW*dHkn`edt5WY$GEz^PdcFpJI4?3SnbzXM-Z)9bfa6 zyDz?72pGD^>~ZvOzcei@2Ep9U$H|kw)dp8>4Xej)=s2KfQq^Ds7z-Tm)xleH^WzGG zt=P4R1U4%@gbO2J(XHZS2%C;qj1qtcE0o_)663g1Kry85vPSZ%L3!lv9Q}weQ!Q^tKs~X6~0?PhgZnG zE(+v6Gu9CS*Z?@f02V9LGg*w^x^w5%@>GUQt@YJSt%m3Ukd{ zdj#rdbn`yMy?In-)a7bD!TP3gV|}NmKaB-nVeZvl-$6W{vd61i{dD4k*={~2x*>v;8AL1ive^6Zr!S*xu-aFpD z-VDH&cR=%pxp8puI*q6}D_ARSex~zYxQR*@uPGIq{JH7x1BNb(9kfnZQcvG0-V}oW zyq$Q`s_GF~xNs&WNwoi}MyI-xU?cqg<1c!x_jjNf*-=Wls7lL>0IyeO!KhQ{kR;P+ zfrx-z?q$-Rk-%7iov-{wfya*ZE8)hn_CUtLb~Rc=#ZsS`Ngd(qcDFaJ-#u5oPwC=B zxb4D`mq6ael%l$MX@EoZR>NKNr=&Rd*QIW>-2Me*iZgQA&*F$iFydp#dxf0s^_o}1bYhL4 zR7H9gW=HAD9%t=ro+x5}(7a-O8&!K&fAsKR5;i=h1Z2bRsK3+!wsHkzd#(7zKZAl{ zr@KWK(EvU`wclZ28I$tuZlFKH_0VN*!(FxR2>hgevd*`0#XY7Gn*R_YTR)5(tR6(g@+CoDT7@dc^f#61|` zZE7Ak*>h3)XOmFlVt&WPgXGSa8=!t(`l3pwFK}XigP=GUeF=Vza_h;%+LEIYe@9dB zd70|)QsLr&qWHDrA3u#7 zM7uqgzfrkZU(4rR9=Kjkus0dfZUw?=UUv(8q&w2yZ3@Q6JGbl?MuGp9{71jSaRg~0 z)0^RNg7gPA=Em}m?hihISl|=geO>$DG?%8{;;8ed;NBen(GaXCgdH-(WM99s%gV6F zB{9>-qNc&@lb}sg;1ngLq^FgWW)PuUm;lluBfW^7n&W~3RmMPjdsbsq1OX3np zjaGa3&|cCj0Xbo@ZqljneZO&IGh!a|L-1ta>KRMvb=AB>4s&ZahYlNH1{JLKo%xFy;gPK3WkgIHBn0e5Pa^bw~(7(Xta z#QWk-GE2WphTa%JQf{&{Pn@nAE{O#chMmwE-89Tuq>#H1@JyIO$v-{0F7%>GsLf@> zA?(pfx89eg4>(G6;Ps}S3G&gGbK@Ebp@|WT&oR#%i77VyT%TfpWd<@xlK1I%s!_Yz z#FLsCcCJbXE%)WdIwL@q6FR)3MUY0*d1?LZg2Z8KWy<}|7LzQb)Zwo@Un9V2YxeY@ z3LNZ)R{Hs9XYX!+x`_5RbV?(FTxWegP;ex6Li1^ntnhC+c_)~AkmQmj+hl8|HcB%T z5eSw(FOFxr65O+cX9k*st=^l!YL5}G3^|vHcr{w}8I+?Os>xA1Y86kTGFq(}jVTcr z!#6fXZ#&2F7TGtV`;uw5a}hKB7j70_F?c84wc;HKbWE^~N5;^;Y~hC?m!Cu`J9u$fAS3M`0O z0nT}Odfd;A5TEm!=8p1Xry8}=yd0)#TwCzMmE4cu*O_X%9hd=nm6nE{`eP;2i60iP zET%oF&*$FD$m;WGEi4roABy%4E=!s-6CSr@+$uyi?wrQ(3vx48rBUJ6Z9=yvaOU` z{J8q3z8StjVWKX`og1q~dZgOaD9u}Sj4Qs%0Q?U_s0vf}m4mFF+>`QePW*z1E;?u1 z_)RLup7G9m5UZ?ClnEr9m7VNVSj=EEjWX)=*-U(9{nFeuSVJVN{OQ^?mqpBApP<-Y zU&~AfgMY6nE2AW=)=L=CxDl1{DxM-QphW2u!Ko#(TIuP51s z60U#1oV^*)(!pvL)M=AB{Q{8OTK(nG?5dw9w=rtcGNBa54;-cqgjcgwvLm z2G?G0aANR^GRns4o1*Uzt(V~y$12!JsZ@gg16`&H4lBAQZMf|iAl;G%-vy7`L9cvN z1Tq~0H4|90W5zr>!0Y9}B~U~E2g%@{J;sZ|c|*=k^d9NEO-Mm)co3Iecvo-G$?wI~ zCBkdUy?*s~O0}Y?)?DtG6z{#& zvx{7S`%+fVTxNGSU*(ZWl@F0Vra3FtL2oAPD{?lSrVfbvtnG~!*B>pQ-2Ypf zpB8}-ZDpImOjj$L6>w9zxs2i}lADVrx}^eYV)SB^oW_!lim~}tj}y^Kb+~fv#V12= zFbXvTmYL&cx|Ouj=Tbzs3Q?n}T~Af3?RGRis=WHkB|`AS>w$5T&cLU<_3A%+xBk!w zJra^q>WecD!6W`Z+R(#8pMi5Za{S6T16Q8Eb^uuOtWoA+VL}RhaW1*mC z9qH=oG{mv34aDxH^Y~;^Q$lzAhfh4U{WD96&~kh60aoG&}t)SZOrCIVYNcK4?q5wIRAPf=ur{ zYV|@Ev3RqLSw2A{0d?d1$rvBmJcTJf&Dc;sp7(pi+^N7=Z9CMN; zoEz=rVHNo+AF+fSLvM@ghBYXAr%*X#!$o49~j zT&=ARccG7>mlE;lc0J@0ua|3&=0ppWm`$l4Q30=mV!u(IwtB#=hqd&nm}g)0Hk;P! zkiOqr*3;p$xktjw?%!-TUsWg?%XZ^5Q!m2C$Xq&qaMldR=54v3st2$tjLBn6G@H;QG=PvD+y;Z9-9{#*)!~3rFeNEPT@k7F5$`} z#}s%Pmm7GUKmgax`^t`FjbNvPHV1qJ^J>%mTLkd1mK~KG5Qo9CS&CZ2F#@%Pf_?yD zW?>V$lg2X8kd@5ZO2WF#sS}%sX>DMy1`vro8^(2#y~*NoZrJl zjqQN+6ETxMCKVSd;q@4s0KU{p$+gBaK(NnHuoW~AIyIMCMkvB)z075)JM3QV@U@#&!(!p zQYN%ptvq5U4s1u2e3^9ZA8u6T6tWz?ep@qVqr6RHCD` zI5OMW2l@^D&eB(<#nBdEYO6EOk6 z*DH#lx`~%+wYw%Vo;x|qSR*D5rkkA^57k7v+=$8u7q$N0@Yiio8S4xXJcA5J)(57! z9<<3casQku_obEP7KCq~dfg!%CAsoA2(*PoVOG{%ez$Lqw;<12f`w*G92 zFj`3sDr17FY^M34b??O_yx#`a8rUxzNbF^rwljuaIy+o_3BQIKt##QPp5QAKOp^_4 za4)ea07o7g_2sisEo@9-jF|G`kNiTB>)mU3^t(1XWhkGYVCF%D>f0}RnEM@mO@>+` zsDQd11Pe`E>9v|d z^K(T+|`*XThlV|68zU$8JaBb_2cs?B< zR=$O2Q!sh*%chBfU4V}@0w&|SGu7u2cb~FWKC@~UFAXtKmTi)H@N2z>%Ox5-xegE> z&JZraKH(r^5x!4;oUgaaY9z5SR)rEWOl#{)yYDAv7K7>bxq26bo&HR;noJ^`ctrfU z)KDFD25E(D94=PyW4rMjmRYzt;Z5sHbg75^iZvzK)+pBk_l>)qPpc>_i&ADXfh~3K z^$p_KX@pOCA~Z|bpSs1z!$u~!0z1`xDdJ~9|A@Y1BBEgl9$XD=y*De2OD%AIn)W|q zzhv=D@E{?{sS)!Au-Y)FU7q5erq}tiSo@W4;0aU>MFlSgBwyKg;r;rz>W=mNPO&VC z`e(=i{L&}~3|;hx&$&aI0eIdQjKAo2dZpIgCq~$c*eml>=i9*~mNg>}w6xc(d;`Oc zkSiA2;LmYmrLFl#p&ki)x3rwAYAnE2S2VL9?d`Y8))}phpDEZ;TYqg3FoF&uq(r$q z0XLYv+fxr{W0q2;r%YNyL-iShF2nu^-021`{O-nn$JakfFDjaK@^h$YAzxYBF2CHB zLfjFQ?(K$JV-G^{gewDcV?as%u!WRYaq~yV#f5@DrYqX%&#o1W>=l6h+}x-2g>>A{ z-t)p?<^twq8q#bc_g?O9QSW^m(Qk-1NU$m9T$DzZ8@wT&o;{HOdEjKLrk57*7IruA!XT=itg4VadYD#k}KhqxF-VYOY9Xp9LErUU2g2}fKxT@X!V`VhF zwNgHqUdxto&Xk^yTkNiwd8Dvpao)FM!_letWygk__=&vaJfk)~t0d^r^{DL>DE_e~E2LNal~;IvH_>-Gw>vb;q=eEdlK8 zAQkvfs}&AjF3p}JoBN>ph9#^I;%qp6r-Cdz_CUZS6@An>@9snxNMZf{Ec>$9EUyCeQ&-%GgoO=S)LUh-iGc9#r z23j}J4sRdYw~UV0$Q_J1#DXg9D=hsSzpKhZ2E!@S%SN@QBPD^!(b<2*WJvHy$W;lk z%E>%$Xu+b6%qZykSo^bm_xQvg|JD}AH~s>){i84%1#0%gl_1i5_{Ya(Z=A+P1E^nS zn*jR=i8?kT8;`wlMKuu8<1F*odCFA}b~pvz3G_^yNky2Bkt8a5mVHYcQh#dO-$)ak zJ8Wo|683z(X*=5D&z3&Wq%=^_2G-Z*$bS5gS$)RQfc}zf*CuwKoW;`n*dF79Qv@LV zi_by0K9Za1j!&#d7zb_^A6vaN{}o*%a{aN7W|-;1rEguCh0@*S&e&^DdT6lv<<#)s z>k28S996M|Pef1??fW&4Jkvkn%a0Hh&)6&R+6hyE_>&L#s3KUq8cv zY1{f~FdD#I0J-_N!j;lyD;OYw<)uTq9k%tXyV17#xcWYB^FG6<+G9NX&N?>trhnO+ zO1!KuMbECDG%%QywIx`+L{ZZFr;XFUfE{$aFWpi;A!j+mYtJr1Rf34Bb*g%1==#iW{vFRJ|zd-kw5pe69QGBRW-@60#x zvQVgRBzsJ_7&fJQiR~U)(IIs^?RTpAmN5Mx2{hc6nd>8~Yn8Z(pMoJDU%stQk>SWr z1&p8f-WsyXPrnk)=8qpk{&ML<`hUc6|57cr3#)YvzB!1^EoG$~`_*KRWe|Ur&*NB3 zTu#(E-CQE_ml5uW6BLTTuQ}RN#|Xa4$-PeZwE$)6|~1Ef)!b!oq#wVsT-TaPU z=Jg}s5YzV4t~e8&iKy3SkTmerVCRZM93p8-hYnSwn6G2d7RTf*psC#jh#f2S5Q=Wx zAfDh7XL<8z4_Rt9;1CAx7;7dv$)wFLfON)lZH{<6%h*%ew%ib|ekMpS&8AIH(O0Gqz8Qe)>pCV5a zD~&Utq93I(fzvI&Eii-9thRiRP%=aaaUJ8U(kk{#?{LWo#VS5H-OpNRB-0l>;Hb%; zJ5zsE%AW_3l9+C~voyo#`g1sU#Xa0u9wQ8H{{b&ufV6vXFXqjzO6cnOh!WAwZL>Z zuVAX@Q=xWqkIr9Kx>ZN7--CM4XjD`j!9Pq*w9xL0ay2oNXSBL z&xCyiBx$QB5I@N!i7(G@DD!huk~diNimtCp%||mzBznfrC3K(StF&(>g{5coDb0a_ zr+?~OTNe_4KourzyywSy2{6}jgWj9;fCRBo9u(xDqDB8_Iz~G4SA+Y0|DS9XbG!iS226t%~W2GSm4I0+i)j)?a zjPRL(u5b*5nNGCLR3zH5H=xduy7JKFD%In)9#Aaoc8S7ISHPxHQ`&rX6l;BeNE{jM zxhq~U5-EujwdU(1oJ!}-v&UiP?Z1|d99CpPNgFU5PK%v(9a($VSf)wPMF7SXWG>zy zAWHwl!GOcgmR5)2Jx2=uyPS?0?s3mH-(uc?H8eB;o{eObLN(R*f$;qFibPZ*x91en zF9^OW`O(L9x9{$Xq_ueB(pf3tCSq5ytB`lJ?B0ViPcg5+zTy*^VPbH^U?F@LD*#`z zOq|Bvw>bM~ zefa4HZMv^PMtiD2ge_Crwko7QGZ>!BcqByVHLux8NR5av_*-%nnAJQ@_f;Ew!35b= zg@{aspM;Q=m`>1r-8}~ptPu-F>p*nPk3kw$AR_Q#gxoPmEc!g%*Rv-fd6trNUoUi? zeFb^!a12t(qyRCA;SG85RHmZ_%yO`1%L84fp>hd4z(12q5M8Zo!z)I99moQmfotKi_ysw-k@PKSc?I*DKvXo)EA1=M z4;}EbM%wB$2T8JQO;tIJc?K!vg~bG)bufqrc|g6SWAU+HG2v!Zq3S+!H#zRWK=jeZ zSyzW-c*gy0Y1JCran?dEaj@PjtZy#PGQ@O=UtrN=P*4M8Q0+(>_Cqc!$BKR)xi3GD zq*vw6J1hOTinIyd$!NI1=Yi#~W775v3?~_!#+J(+6t&mAdpMGLL>k({))qb?4z{jH zdoTO7-JevBWbU;SN)g&KHzftXKowT=7m<0zw?EAKzgP}#Y%6z2?3K=q#MM3MXT~ra zK8n~3b=q!J?)TH#qTJZC#|G8@(X)D+(;rqLpz8d*`E0XeP06$Q3!8w6CU%ehNXVUz zv+TfQ&ru{yxtmsd*!Un-gJy>Cm;4^{?Vp=Hq%#_F`PAl!3(|W!@k?6o@6Fu*wDWIf z1jr5FyYPN~1cxYoRojgJb2I$+zvg5S2NoypF4Vw$z8_`tK&`t6SGxoG!DrToBz z7!!{CD#rTzhsA0 ze_WW0u5_G%J{2=+`jyt$LAKsw`=zmG5iL-=PILIka72{WI>P(WQ#UD_^|Q{buKUnec>VjhO4TLJWzU z^Fi+mrP>1!{4mqp zN$sPh>pGb=YWRZ1y>k37AUP4_Lo{;Q@v;hrmoVTGr+r?bRR<@+&i&09{%Z~|oc)h$ zN$~BdxBtP&0^j^`TisD-uNtFqOS5upq3NOT{pqlPCD<{9Oh(=*o}u!n;?D!kfOjzu z;av{*=iovvm0ciSX)@2qE5l}3BLm)cG1Ab-iOqReMcD2H5oQ$KlZLXHS)?m1Yp!(8 zG)u5kRYba54tyM|egJj`Z>~|ZPuzbtnSM3MHx}bBe)Ilelwds>OYk=FMm93w!%hK+ z(>b>28H5~ulU>FP$6k%Znp&Z(lwrLgSc2Ktq2l{{z-F%kckwE07Sw`~S`ON>w9nbr zAfwJry8xxfk~@%I?2?8XWI`CmCM-i=qAZU)`aL)Sn!H<48Gi zkCm`jh*!$1SBCVz2d}pD;)Qaiw1AOki(cVA3OC0VHTP&ErNKu2(HiOz#8W%xap=^h z)!RPOWevCFMnuiN)I8Lh^;Y|IF#g*>G`qk8j6d#CN$`&YPc?^vFEhgKgb+Ztb;~g)R1wnQMuW2>*kU+M7x>{$T=;^$#F&h zX&kj}U?HumLFu8>t@cU>CzO}61Xw~%hs0sS``iZ%35_X5ap^{;cGLM4aq-K0!6Z)O zOUEH}`x=;gSIn0y--m`jxx*MiV4ZB`nSaMRsmyqj_R#F~&h-mN*w9*L5-NGrR+&c4 zK@Q1XBlqPg->nYYZs71s?s<&X^-`B{kpvIDPEh5iGOL2)h-13eZ<(Hb}TkjJOmanUg>e-2gV(nyI>OcZ=3)53_0@Or{aI;P7f4X zl;`=mf1eH$fp$F`*ttqn@$vRaynrxwSX>%m_E+~ona+Bx_nnU@)wDCo40y}81a?7= zqAr_erlA~!x??L^FZSdf)Pzfruc(tI(nnQl?u)UZ={S1MZ-Ontj5AYQF&l;*!4|yi ze7w?`_YfX02^u-nZ7vN^9;Y#dA2?4@6daal)_yOo-O7&*{=*Ty*%>5ZLch#8Rt;7_ zelM{+GIs7sfajlXj1*soRQoOk-wK$Rh)5SPDqNqaPudr<);XYEI72A3n)n%)JBD%T ze1COH;AhFCKpm(3Uwr?+ZSyJQB;=n=7%=~=d*{E?$@Oj-G$2$nVc@N02m<_CP!N91N*m?_OS?@iP{O zq#g(OXF*5gg|cT*QEV*mgF|9bIl96|eYq*lSI%&kS`E_h=9MLvN7D-%-oedbQ%jziLUi~{|MH+o;p3R|Ghl+b-*tb?nsN5UEdju zyq{IuOpmirG!*F%agBk$sd_{>NY&#f>U^~iKaqA+<}=PAk`*Y!45BaqI9-Zz&0skP zXWF0f<+6&Z19C|JmonksCiq{*+`?N6DTKS7bvmCNC`OC~-A}fxEYXE;Z3@BG z#JxR^gUwnRCP>3*Ie;uKKQsBByw8RUxIDznNBxY5o4h*wFQd%pmxL1+U+x*BD?FR` z?KN+Y_(R=(?ob6*@2{Oi&!lx7Y{?+xhM{VaHVwzn?-K5oZ6Zt;JfBxM^p&mdEw`+^ z>_~lcCg~oJxVCIp3H)isruqb6C%xyXg$8NnsJ(*vL?E3Ct10QcwWw%k3VP^;KpuSt z$o71(^s2yXJw`&rfuhp$yJi=&j-R5MS{!`6sMf;Q%jwQg%~a%=CA51-2|@$;_alzs ztBFn#%y*1&C~=f?Z461;JU;kw(-pb$sGiPX)%XiNmqbd}9coh5Y%kGWR_x_Zzpz<( zggTKP0MHBb5-uHepN#$AlsLTCfc%^63V~FJeQr_3%{T{sdSpPDdkZpAlh)IV; zc~?WP6gE*R)bag2RsrbKR8(;##b~XRP!^b~k924c9Oi5O#{5c~S_n*y7oh?kNc5h$ zf{p16)Z6M%s{#4fQFbt&8Rmpp>IX}MC2B?*Ch)l|g&RTk&&==iE!FD|eqOvv3FQO5 z($OmO8MGt5@p-A@X!QUfI1oJ3|NP)SZBP>_88w?{MB_Hgceb429e*?dmnn^ZzmZ3q z&O|84-AJ9iMCeTgq9}o?5&CYM6jviZdd@}nz{}0PRkx7F4e?n*?`s$j5(;4xRu#oM zLa2%^(?>GIo1=9PH{=Spo0W3B?}LR$fBWUXo)?(@S176d(HrlC<~Vm`Cs2E%=F$D% zU`cgtc%pe^ADfJw%^QZMfQ599%s>dQuAkYdao^;kht}-@&`##Xd(jm$PtyXKxy*M} zRA#;3NuO00KR$h`pHWZhTq8nS(){VLYIg8LqQ{-=mcqvMn0fDLUp))VzUL_Kp~mp* z$s5(!>|TO^EhRTVh`st3aFzdQ`l~qi%qBxSrNz&12tW$@XrcJVT1c z9u)oXfFsAwU>bj^_dm+8K{`;{F%!K-Y^_7U{i`Ucl@?wI@;~y?Ei43X$-8|c;m5zJG>YG2$ zn#n!(N|~LY63}kAC+_#lp5*?Sxmo*eJ7wCmlepMSziPI1_DUHgw!^W?Y0!VCWCYuR z<1*IsK5lXhr^OP~vKV3F!Kq@ou;X1D!ybHaLf+^Ce1mB?A}?cV>ga#CE;w8N+V=i~ z_s#!F?;ogFm;TybQ!a6IuZp`M(lAi zwoOVy&QfD$K=kq{0FxA>PuqBN>^u4Djf#(fJ{+~9RE2AMMu&$){Czc74mk+_#85)> z&(TM;LvaH&LB|JeeoNJX-_XS8Etrhg^YQ(}m_JPm_3#|tYwwOrQ7pQ+rYdU4V*{M-4tD(IO0{Xy3DA4Mu& z4ghI8#%t|i{n0$}_rXN!rE778C^6d~o}I?FSYx2vrYUU+I{W;5b7Uu4C4q%>bCUmB zd%l&Gwn0j);)p(Y?RQma0xx&;`_s2oP{*Xqq4MhW9t#CS9m>LG*Y2oT8XtLu56^bu z==ZBGV)YB*X4@8f7q;L-^b^!you~su!%Ko`)OX{Z}W>{ z{Ow&0DbU~l>9cM{ld37c>TvYM)Uhfg=B+glJoVPGWb2wnw@{AHeIvcT#aC?yJ3Jqj z_m|na;sYT@W zRsFB%d?)PLe<8n+v&(XS!{ZQq&n9B%U`?dSZcj{T2k1Hmxg$?0!3d%$MMWoWMEm8D zPTH-PGo0CJy0yl;KfmM{DoZtNzIxv+dwVZQlcYvU$$4<;rsAtnBUX;69*;fc#X!xj zh5;D2y4+M9NGf+8ym2_{x-D54hP=L#`_OVNRcfduF5L-!?@(F<-Q@I65+lcJ)mI+% z!8)t@4e%c45XHS`wAZ`u@{_zWUSp2T0-L8xz|a0zOdLZ;(`Yq^F645ZafqL+^`NG* zG~$ieqFPhqhdnH5`KL~O){|oAD_lA0%j^ZniwI|Ib*HIVx`~|$;TF)c_rhX32yrch z?r+chq$2rW;P+n^`g{F{oW^NZzh2 zDw~$e)NcH7wD-+sdg96gpQuY<_!?lPCl$Qd)7A;JBVKuzRBn}pN$#7T5LNWd!1NDo zT&Iq-{9Kbd138@D^3l(Q3A{EL zwOr=WqR==@pml1{^MLfEjJ%lOvcO&0L?r57XJ5?nHP|4B@0;)H1Fo*l$(fptu==p7 zGB$V~e3C6Dv-VQ>T~whFvozs3lN4)lzCf`f*z9am-UM%5G^tx1i(+6x^eH{6Ds}Pf z0X{w3!@0Zs8a`}k2J9j|Hj- zM^g_yx4a_C) z$xQu3`%th7*lmu(fuch~y0@sX30~K;Hst~C+OX7j4OIL#<7G-MLh0}zy|pQ|<&cah zR33aaz8d%;)2!@F8ORfN>6Yr+D#I4;#*QY82I~n)V0^))D4wx3^j;!j&sb_FeUrce z`R^<7PyhSBf)y_RxmbE-+O~udV^WltJ=Lr^J`0tk+PCxmp!DWoXG{GODdpwy67=Wq z0;W5GRyhrWQ8qd7pWEYy+%-K;%qK!uSkzop6*!ND->)veqaY6|hz95}jvX*;Ran%S zgp+2xw>{Hgb&S}?^#{O0ZLK=Cg7Qz^KKn0m)fpqK=uN(&e#hPdElX2$T}NM|@{; zzC-7Ze?6D{^+T&NNl(8`=*Fr_^Z*a}3hUU!W3MkB*@^M~AxS{@Sfw0ezW+TA=dg5C0B|06%`wWX|7T zsiCGj7!`5tPzfE_#1TfV6t9uW4tVSw-`gzQ)>fjv+ zk^N20U%zfiXltMqaiQXGvfi}ztj($_NgQ=~8d5Hxp|8v6B?B_;;-*r#F<-e&r&jRGtLgMFs5 z@MtU~fet-176F^8>Kw5w^k^?imEUU2i~_X(?S>F8;Qs+!l#E!Y8>C|zt?dC}iLhbw znceY(@6yF~_h~CT`pej|0j!i6?Yn^GV$(F%*=W;$a?87PXHbM%`J&lQP||`C_Hsm} zp8k#*xrbqr2S1um39W*%UuK=?5L+A`S%Tq+vVG5iF$?_rh4@VGYVreqmG`A_o{@KL z36 zHsIZpYnu}lXWmK9DF_hL3!g?P;kAxV=S7Dz!Lpz5^mZ{7s!9KiHb9sAPc-=B+}FR{ z@bwq-V9iZnGgG*G2OJkO1d_-y4Uujo^&|?KDthQuw`Bzur*colT*M^ajPB||(r%-h znG~!Bw)w20*PeGbCN3N8NfA8EyAJNXZwC>kW`c|{R{9tsY|gPyjXA_)Em3r(?t`IF zSH(h@`o#KvQyL$F+qH--LljjgzcqzFzy}|k2X^#J(Y2+;&$gWMUctI6Yiun`Th4Vp z|LI?!qOGU=&Jwf!&ZW4fE?%wXe!?}%pNOO-FnKnZikXRPG`JCj6=D-+km7gSZ}u!F zu29vWj)~Y_i7tipN)7JvQ4yzHqgt)FHC6x4xs#9o8u{-9cqZguAAZNb{wx0x87Vi5 z&-G1}ndAkkl`3jB)CR1TbG>s9#%=qhY&Vts&`54WBQCmc2;DSmy1JaNYo*`f^9cGI zhlIG?F4QWce$$r}c~qrMd3NN(c2+{oG zbOpF8uL2w{=856peZ@%o6Sz3G?It(WU}U+WsN{_P#`5{xQf^GKw(z4LnMi;COd^`L zw>mkM2xxYt&HK*WV}$9Y&!~Jxpk3_oEA0A{p|c~;$j#k5j@3x`h*_YsF?1mRB)b&E z>>fYw-^(Z z+s8d;a8Uc9<6O)r&J`?S%mbXZq{_%b)J1}Gib={(KPkfzBOYYI6RX)M1nRdDCUt^hRk~`BVrd=H&l$VEGsRk&WB>_w4XH)3#)LGS6boeHxW$ zeuOiSXG6@DpTH@>f70xF&-hxgpaJD`L80#{IgNK-{b{Y4K}n-^302`iaM@|r)MZ+3 z{Ww)q?%hXXVTZq|S#RO6%G=$<*HuyjH;y|Vg-OLb{z3Rab(Yj;Tz>OD4xk@4{74z| z#%+7f9{awMu)ihC3y?;-JVz)hd*|`~20y)DB|I9&thaZ|zA4EIKi-Ual z(#&s-jN5guDOW%{)5 z#*#k}{Vprgqte^JqL7fek2^SYHWG7%VN)s9-+&5KfLhnf0 z1_SBAB(jee4mWm~mQY`b4jWo-YKV($>T*-3spmD*dgBVGi$@W)6|8K0rA^{VX3Oi& zK`oq%ESrBA8$U|-<8_7X-nm^ByGPVeA;9ZZjgd zt(nY>iFoPahq+VM(k={VeIgPe$uxOud^$L8UfX=ktiR{hQIO0azhxGxD7X8s^!Zis z{RhpZ(s0_{mnh^%>f*HR`d+n14k`ykS^Q?ZrbC?r0oHjw(Ja_Hx#wS!RPFX^pKNXS zM%Vlc6%7D)j-q+$h~03T*tff>t+T{=14ErE4?2sNh(yNF25|Xz@-$~LrtSr&xUimE z!=?34X@jFZ^(^?-a`GgH6DKTnK*BzRmcRn&8u z?52V?5XEPxH<-YzfvW|fC?OgHdwm!LJC=FmT?rup-v5>dPILw}Cfd&x#EvIe(D8Ge z`KXKU`T(%45ze^vZTb1{-TV3K1&Tq_`+NHJgukoxOzg}{vLspIII-cHOp*5qSe{G$ z)X4Gn<3}p7eHx?t^kM!{a9-mx$Ia!A7o4i=?Z0THWv*tMBgy6#LwXtqClk38maPi< zX=l?%aX()0)`ee~`Njc^EZ3eCxsJ_u5g97I!V@`No{MU)h*XJAff}+pk zCa z`T(|O>pf)r{g0~|?tG{#yX^-HYFQliWK|Z%U72<_BDxf!-a7NtFTS5m$DMghK#z%nRfh4lQ|#Z7x4~Y-f|zAV5QCU2 zo!ij(K89Xce)YmtF+pbBR5!p{u|_&H1he-KKfKNR=t8MKC_I}z#Ic-E>MX<4c!r7G znAA~xS$u~MVhkHY&E+_DTR`_ zD?#@+Wr~{96Jkk6Qypdxl(EE& z2!``;2a&O{*;q6gzs~KlfL90$K|ecpyX(pNxa7*0>4VkDF@&bR^(UFbll|9SC^Veb zrqKr~;&R)-pCb4tfBw&a{*uzHx}IkCryy+)usv^Vm?=slyJJ&PH2H-LqTD9XE0gFC zx_UDxLGe0m{y_)X(Ql_-*y5+_il@324!BxMKMqCG9%&gr%urFwcFK z5t?^X*30g{iX^uYv!rAbLY6g0cU!TI3Tjrn4Je;_5>;$`g z5mkcj^8ERvOh>nu_@Z_;jh;$cqonpdZgFV7IZP3s;?Imuc^0E>?B&-_3quy~F1WB4 z@@x7QG;*}!7T~!k$?Q6_R5H<_9qT==^ip)V;K+@w5iRus&u5ob3{ld+y`U~juVx2{ir<%TD+Pq7;PsVos{_K~k*gCuID_*vCU2iekccEhYQYS?~kwWBJ@{sF4zf*!GN8R)CU3pC?l#wGsCqb*jv+Z6y1hG9$Kv41ZasjH+xtLF zvt?=qj0?c&MoX2nHZleegRPXA%6g*%+JmhI#>!c9kqvP-)6~0vz0(URh8P{F^~t!L znh4dWxsgG;uraJXDJ#<3D4T|wE`t7jp9wJ=C6$cs)ZAPZ$WnWTrr)$B&{H9&-l{^(4_Qhp9TMto%8wXUwrTV2YA7^WB>pF delta 52236 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 From 817207a9239d65c4ef450f94a53201069dc5dd99 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 11:41:18 +0900 Subject: [PATCH 18/32] feat: add fast-xml-parser dependency --- package.json | 1 + pnpm-lock.yaml | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/package.json b/package.json index f714d3c..9a229e6 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "@vitejs/plugin-react-swc": "4.0.1", "chalk": "5.6.0", "commander": "14.0.0", + "fast-xml-parser": "^5.2.5", "vite": "7.1.3", "zip-a-folder": "3.1.9" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52098b6..f730f81 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: commander: specifier: 14.0.0 version: 14.0.0 + fast-xml-parser: + specifier: ^5.2.5 + version: 5.2.5 vite: specifier: 7.1.3 version: 7.1.3(@types/node@22.17.2)(jiti@2.5.1) @@ -697,6 +700,10 @@ packages: 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'} @@ -928,6 +935,9 @@ packages: 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==} @@ -1548,6 +1558,10 @@ snapshots: 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 @@ -1784,6 +1798,8 @@ snapshots: strip-bom@3.0.0: {} + strnum@2.1.1: {} + tar-stream@3.1.7: dependencies: b4a: 1.6.7 From b83adc97bdf3b9f68fefb527e4f0b421ff20b387 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 12:33:06 +0900 Subject: [PATCH 19/32] feat: add mendix on dependency --- package.json | 3 ++- pnpm-lock.yaml | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 9a229e6..0c4bfdf 100644 --- a/package.json +++ b/package.json @@ -38,13 +38,14 @@ "@rslib/core": "0.12.2", "@types/node": "22.17.2", "type-fest": "4.41.0", - "typescript": "^5.9.2" + "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" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f730f81..aaa1af8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: 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) @@ -572,12 +575,24 @@ packages: '@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} @@ -675,6 +690,9 @@ packages: 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==} @@ -795,6 +813,9 @@ packages: 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} @@ -1412,12 +1433,24 @@ snapshots: 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 @@ -1517,6 +1550,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + csstype@3.1.3: {} + eastasianwidth@0.2.0: {} emoji-regex@8.0.0: {} @@ -1640,6 +1675,11 @@ snapshots: 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 From 06f236b18bf06c5451640d0c654965a3e58ec9b8 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 12:33:29 +0900 Subject: [PATCH 20/32] fix: remove caret on fast-xml-parser version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0c4bfdf..2832cb8 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@vitejs/plugin-react-swc": "4.0.1", "chalk": "5.6.0", "commander": "14.0.0", - "fast-xml-parser": "^5.2.5", + "fast-xml-parser": "5.2.5", "mendix": "10.24.77222", "vite": "7.1.3", "zip-a-folder": "3.1.9" From 5dbd07dbf2408107c7ce5f97069f861e97892c03 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 12:44:54 +0900 Subject: [PATCH 21/32] feat: add copy widget schema script --- .gitignore | 5 ++++- package.json | 3 ++- pnpm-lock.yaml | 6 +++--- tools/copy-widget-schema.js | 20 ++++++++++++++++++++ 4 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 tools/copy-widget-schema.js 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/package.json b/package.json index 2832cb8..00c62ed 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "build": "rslib build", "watch": "rslib build --watch", "start": "pnpm build && node ./dist/cli.js", - "package": "pnpm build && pnpm pack" + "package": "pnpm build && pnpm pack", + "postinstall": "node ./tools/copy-widget-schema.js" }, "main": "dist/index.cjs", "module": "dist/index.mjs", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aaa1af8..19278cd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,10 +18,10 @@ importers: specifier: 14.0.0 version: 14.0.0 fast-xml-parser: - specifier: ^5.2.5 + specifier: 5.2.5 version: 5.2.5 mendix: - specifier: ^10.24.77222 + specifier: 10.24.77222 version: 10.24.77222 vite: specifier: 7.1.3 @@ -40,7 +40,7 @@ importers: specifier: 4.41.0 version: 4.41.0 typescript: - specifier: ^5.9.2 + specifier: 5.9.2 version: 5.9.2 packages: 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 From 5f636d47eb0ae61492a89deceb245332770093c5 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 12:45:18 +0900 Subject: [PATCH 22/32] feat: add custom_widget.xsd on files --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 00c62ed..7f6c31c 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,8 @@ "dist/**/*", "package.json", "LICENSE", - "src/configurations/hotReload/**/*" + "src/configurations/hotReload/**/*", + "custom_widget.xsd" ], "publishConfig": { "access": "public", From e385ed41d863b2ac4e73c4b5a4a2cff8a1058ff7 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 14:39:52 +0900 Subject: [PATCH 23/32] feat: add type generator --- src/type-generator/generator.ts | 146 ++++++++++++ src/type-generator/header.ts | 37 +++ src/type-generator/index.ts | 25 ++ src/type-generator/mendix-types.ts | 347 ++++++++++++++++++++++++++++ src/type-generator/parser.ts | 194 ++++++++++++++++ src/type-generator/preview-types.ts | 221 ++++++++++++++++++ src/type-generator/system-props.ts | 87 +++++++ src/type-generator/types.ts | 174 ++++++++++++++ src/type-generator/utils.ts | 88 +++++++ 9 files changed, 1319 insertions(+) create mode 100644 src/type-generator/generator.ts create mode 100644 src/type-generator/header.ts create mode 100644 src/type-generator/index.ts create mode 100644 src/type-generator/mendix-types.ts create mode 100644 src/type-generator/parser.ts create mode 100644 src/type-generator/preview-types.ts create mode 100644 src/type-generator/system-props.ts create mode 100644 src/type-generator/types.ts create mode 100644 src/type-generator/utils.ts diff --git a/src/type-generator/generator.ts b/src/type-generator/generator.ts new file mode 100644 index 0000000..6f42a7c --- /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)}Props`; +} + +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 From 4ec8a831f7e66ef56928927d5b82fa4d170de8e8 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 15:51:19 +0900 Subject: [PATCH 24/32] fix: fix generate type name --- src/type-generator/generator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/type-generator/generator.ts b/src/type-generator/generator.ts index 6f42a7c..372dd79 100644 --- a/src/type-generator/generator.ts +++ b/src/type-generator/generator.ts @@ -63,7 +63,7 @@ export function generateTypeDefinition(widget: WidgetDefinition, target: Generat } function generateInterfaceName(widgetName: string): string { - return `${pascalCase(widgetName)}Props`; + return `${pascalCase(widgetName)}ContainerProps`; } export function extractAllProperties(properties: PropertyGroup[] | Property[]): (Property | SystemProperty)[] { From 978f7c71078c71e80df7f2823893406f2647f643 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 15:51:29 +0900 Subject: [PATCH 25/32] fix: change postinstall script to prepare script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7f6c31c..a8d3c67 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "watch": "rslib build --watch", "start": "pnpm build && node ./dist/cli.js", "package": "pnpm build && pnpm pack", - "postinstall": "node ./tools/copy-widget-schema.js" + "prepare": "node ./tools/copy-widget-schema.js" }, "main": "dist/index.cjs", "module": "dist/index.mjs", From 5214ccec435da79d747debfcb968be1bb90c7e3d Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 15:51:46 +0900 Subject: [PATCH 26/32] feat: generate types on build, start --- src/commands/build/web/index.ts | 29 ++++++++--- src/commands/start/web/index.ts | 91 +++++++++++---------------------- 2 files changed, 54 insertions(+), 66 deletions(-) diff --git a/src/commands/build/web/index.ts b/src/commands/build/web/index.ts index 05a0188..c880620 100644 --- a/src/commands/build/web/index.ts +++ b/src/commands/build/web/index.ts @@ -12,9 +12,28 @@ 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 { + 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); @@ -46,10 +65,8 @@ const buildWebCommand = async (isProduction: boolean = false) => { 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,9 +111,9 @@ const buildWebCommand = async (isProduction: boolean = false) => { await fs.copyFile(mpkFileDestPath, mendixMpkFileDestPath); showMessage(`${COLOR_GREEN('Build complete.')}`); - // } catch (error) { - // showMessage(`${COLOR_ERROR('Build failed.')}\nError occurred: ${COLOR_ERROR((error as Error).stack)}`); - // } + } catch (error) { + showMessage(`${COLOR_ERROR('Build failed.')}\nError occurred: ${COLOR_ERROR((error as Error).stack)}`); + } }; export default buildWebCommand; \ No newline at end of file diff --git a/src/commands/start/web/index.ts b/src/commands/start/web/index.ts index 1db55c7..940db16 100644 --- a/src/commands/start/web/index.ts +++ b/src/commands/start/web/index.ts @@ -10,11 +10,32 @@ 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'; + +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); + + 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); +}; const startWebCommand = async () => { try { showMessage('Start widget server'); + await generateTyping(); + const customViteConfigPath = path.join(PROJECT_DIRECTORY, VITE_CONFIGURATION_FILENAME); const viteConfigIsExists = await pathIsExists(customViteConfigPath); let resultViteConfig: UserConfig; @@ -362,66 +383,16 @@ const startWebCommand = async () => { } } }, - // { - // name: 'mendix-hotreload-react', - // enforce: 'pre', - // transform(code, id) { - // if (!id.includes('node_modules') && /\.(tsx?|jsx?)$/.test(id)) { - // let transformedCode = code; - - // transformedCode = transformedCode.replace( - // /import\s+(\w+)\s+from\s+['"]react['"]/g, - // 'const $1 = window.React' - // ); - - // transformedCode = transformedCode.replace( - // /import\s+\*\s+as\s+(\w+)\s+from\s+['"]react['"]/g, - // 'const $1 = window.React' - // ); - - // transformedCode = transformedCode.replace( - // /import\s+{([^}]+)}\s+from\s+['"]react['"]/g, - // (match, imports) => { - // const cleanImports = imports.replace(/\s+/g, ' ').trim(); - // return `const { ${cleanImports} } = window.React`; - // } - // ); - - // transformedCode = transformedCode.replace( - // /import\s+(\w+)\s*,\s*{([^}]+)}\s+from\s+['"]react['"]/g, - // (match, defaultImport, namedImports) => { - // const cleanImports = namedImports.replace(/\s+/g, ' ').trim(); - // return `const ${defaultImport} = window.React;\nconst { ${cleanImports} } = window.React`; - // } - // ); - - // transformedCode = transformedCode.replace( - // /import\s+(\w+)\s+from\s+['"]react-dom['"]/g, - // 'const $1 = window.ReactDOM' - // ); - - // transformedCode = transformedCode.replace( - // /import\s+{([^}]+)}\s+from\s+['"]react-dom['"]/g, - // 'const { $1 } = window.ReactDOM' - // ); - - // transformedCode = transformedCode.replace( - // /import\s+{([^}]+)}\s+from\s+['"]react-dom\/client['"]/g, - // 'const { $1 } = window.ReactDOM' - // ); - - // transformedCode = transformedCode.replace( - // /import\s+type\s+{([^}]+)}\s+from\s+['"]react['"]/g, - // '// Type import removed: $1' - // ); - - // return { - // code: transformedCode, - // map: null - // }; - // } - // }, - // }, + { + name: 'mendix-xml-watch-plugin', + configureServer(server) { + server.watcher.on('change', (file) => { + if (file.endsWith('xml')) { + generateTyping(); + } + }); + } + } ] }); From 5f2c9e9bae8217ee1fde30a4ae73b04ea2e276fe Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 15:52:11 +0900 Subject: [PATCH 27/32] feat: bump version to 0.1.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a8d3c67..0e180be 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@repixelcorp/hyper-pwt", - "version": "0.1.4", + "version": "0.1.5", "description": "A faster, more modern, superior alternative for Mendix PWT.", "repository": { "type": "git", From 6fb6bac7881efc1b371df490cc12070cd2762951 Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 16:30:29 +0900 Subject: [PATCH 28/32] fix: split vite plugins --- src/commands/start/web/index.ts | 313 +----------------- .../mendix-hotreload-react-esbuild-plugin.ts | 186 +++++++++++ .../plugins/mendix-hotreload-react-plugin.ts | 129 ++++++++ 3 files changed, 320 insertions(+), 308 deletions(-) create mode 100644 src/configurations/vite/plugins/mendix-hotreload-react-esbuild-plugin.ts create mode 100644 src/configurations/vite/plugins/mendix-hotreload-react-plugin.ts diff --git a/src/commands/start/web/index.ts b/src/commands/start/web/index.ts index 940db16..eb8752f 100644 --- a/src/commands/start/web/index.ts +++ b/src/commands/start/web/index.ts @@ -11,6 +11,8 @@ 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'; const generateTyping = async () => { const widgetName = await getWidgetName(); @@ -71,318 +73,13 @@ const startWebCommand = async () => { optimizeDeps: { esbuildOptions: { plugins: [ - // @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. - { - name: 'replace-react-with-virtual', - 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 - }; - }); - } - } + mendixHotreloadReactEsbuildPlugin(), ], } }, plugins: [ ...resultViteConfig.plugins as PluginOption[], - // @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. - { - 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; - `; - } - } - }, + mendixHotreloadReactPlugin(), { name: 'mendix-xml-watch-plugin', configureServer(server) { @@ -392,7 +89,7 @@ const startWebCommand = async () => { } }); } - } + }, ] }); 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 From de1242426fd74ae7c03cb0321b7692f16f1bdf1c Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 16:45:19 +0900 Subject: [PATCH 29/32] feat: add esbuild on dev dependency --- package.json | 1 + pnpm-lock.yaml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/package.json b/package.json index 0e180be..610b1c6 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "devDependencies": { "@rslib/core": "0.12.2", "@types/node": "22.17.2", + "esbuild": "0.25.9", "type-fest": "4.41.0", "typescript": "5.9.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19278cd..bf4b390 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,6 +36,9 @@ importers: '@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 From e3bcb5dd885960fb7515c753cd68f5809f70f07d Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 17:39:16 +0900 Subject: [PATCH 30/32] feat: add mendix patch vite client plugin --- src/commands/start/web/index.ts | 2 + .../mendix-patch-vite-client-plugin.ts | 56 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/configurations/vite/plugins/mendix-patch-vite-client-plugin.ts diff --git a/src/commands/start/web/index.ts b/src/commands/start/web/index.ts index eb8752f..54b6fa4 100644 --- a/src/commands/start/web/index.ts +++ b/src/commands/start/web/index.ts @@ -13,6 +13,7 @@ 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 generateTyping = async () => { const widgetName = await getWidgetName(); @@ -80,6 +81,7 @@ const startWebCommand = async () => { plugins: [ ...resultViteConfig.plugins as PluginOption[], mendixHotreloadReactPlugin(), + mendixPatchViteClientPlugin(), { name: 'mendix-xml-watch-plugin', configureServer(server) { 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 From c43ba98f9c708e79c6209f30139aca80ab4bbf8a Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 17:39:44 +0900 Subject: [PATCH 31/32] feat: bump version to 0.1.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 610b1c6..212c6b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@repixelcorp/hyper-pwt", - "version": "0.1.5", + "version": "0.1.6", "description": "A faster, more modern, superior alternative for Mendix PWT.", "repository": { "type": "git", From cb303ef03290b70e237b52f44941ec92b9301dcc Mon Sep 17 00:00:00 2001 From: Chan Kang Date: Thu, 28 Aug 2025 17:47:20 +0900 Subject: [PATCH 32/32] feat: version bump to 0.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 212c6b2..756a54b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@repixelcorp/hyper-pwt", - "version": "0.1.6", + "version": "0.2.0", "description": "A faster, more modern, superior alternative for Mendix PWT.", "repository": { "type": "git",