diff --git a/.gitignore b/.gitignore index fef3571d..6ea838d8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,16 +9,16 @@ node_modules /coverage # next.js -/.next/ -/out/ -/src/generated/ +/.next +/out # production /build /public/script.js /geo /dist -src/generated/prisma/ +/generated +/src/generated # misc .DS_Store diff --git a/esbuild.mjs b/esbuild.mjs new file mode 100644 index 00000000..ca090255 --- /dev/null +++ b/esbuild.mjs @@ -0,0 +1,36 @@ +import esbuild from 'esbuild'; +import { commonjs } from '@hyrious/esbuild-plugin-commonjs'; +import fs from 'node:fs'; + +fs.copyFileSync('./package.components.json', './dist/package.json'); + +esbuild + .build({ + entryPoints: ['src/index.client.ts'], + outfile: 'dist/client/index.js', + platform: 'browser', + bundle: true, + jsx: 'automatic', + format: 'esm', + plugins: [commonjs()], + external: ['react', 'react-dom', 'react-jsx/runtime', '@swc/helpers'], + }) + .catch(e => { + // eslint-disable-next-line + console.error(e); + process.exit(1); + }); + +esbuild + .build({ + entryPoints: ['src/index.server.ts'], + outfile: 'dist/server/index.js', + platform: 'node', + bundle: true, + format: 'esm', + }) + .catch(e => { + // eslint-disable-next-line + console.error(e); + process.exit(1); + }); diff --git a/package.components.json b/package.components.json index 2ca9458d..ae9cbe75 100644 --- a/package.components.json +++ b/package.components.json @@ -1,6 +1,6 @@ { "name": "@umami/components", - "version": "0.1.0", + "version": "0.101.0", "description": "Umami React components.", "author": "Mike Cao ", "license": "MIT", @@ -13,7 +13,6 @@ "colord": "^2.9.2", "date-fns-tz": "^1.1.4", "immer": "^9.0.12", - "moment-timezone": "^0.5.35", "next": "^13.4.0", "next-basics": "^0.36.0", "react": "^18.2.0", diff --git a/package.json b/package.json index edaf6c2e..014c6854 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "build-app": "next build", "build-app-turbo": "next build --turbo", "build-icons": "svgr ./src/assets --out-dir src/components/svg --typescript", - "build-components": "rollup -c rollup.components.config.js", + "build-components": "npm-run-all types esbuild", "build-tracker": "rollup -c rollup.tracker.config.js", "build-prisma-client": "node scripts/build-prisma-client.js", "build-lang": "npm-run-all format-lang compile-lang download-country-names download-language-names clean-lang", @@ -51,7 +51,10 @@ "postbuild": "node scripts/postbuild.js", "test": "jest", "cypress-open": "cypress open cypress run", - "cypress-run": "cypress run cypress run" + "cypress-run": "cypress run cypress run", + "rollup": "rollup -c rollup.components.config.js", + "esbuild": "node esbuild.mjs", + "types": "tsup" }, "lint-staged": { "**/*.{js,jsx,ts,tsx}": [ @@ -82,7 +85,7 @@ "@react-spring/web": "^10.0.1", "@svgr/cli": "^8.1.0", "@tanstack/react-query": "^5.85.5", - "@umami/react-zen": "^0.171.0", + "@umami/react-zen": "^0.174.0", "@umami/redis-client": "^0.27.0", "bcryptjs": "^3.0.2", "chalk": "^5.6.0", @@ -136,6 +139,7 @@ }, "devDependencies": { "@formatjs/cli": "^4.2.29", + "@hyrious/esbuild-plugin-commonjs": "^0.2.6", "@netlify/plugin-nextjs": "^5.12.1", "@rollup/plugin-alias": "^5.0.0", "@rollup/plugin-commonjs": "^25.0.4", @@ -143,6 +147,7 @@ "@rollup/plugin-node-resolve": "^15.2.0", "@rollup/plugin-replace": "^5.0.2", "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^12.1.4", "@types/jest": "^30.0.0", "@types/node": "^24.3.0", "@types/react": "^19.1.12", @@ -150,6 +155,7 @@ "@types/react-window": "^1.8.8", "@typescript-eslint/eslint-plugin": "^8.41.0", "@typescript-eslint/parser": "^8.41.0", + "@umami/esbuild-plugin-css-modules": "^0.4.0", "babel-plugin-react-compiler": "19.1.0-rc.2", "cross-env": "^10.0.0", "cypress": "^13.6.6", @@ -173,12 +179,13 @@ "postcss-preset-env": "7.8.3", "prettier": "^3.6.2", "prompts": "2.4.2", - "rollup": "^3.28.0", + "rollup": "^4.49.0", "rollup-plugin-copy": "^3.4.0", - "rollup-plugin-delete": "^2.0.0", - "rollup-plugin-dts": "^5.3.1", - "rollup-plugin-esbuild": "^5.0.0", - "rollup-plugin-node-externals": "^6.1.1", + "rollup-plugin-delete": "^3.0.1", + "rollup-plugin-dts": "^6.2.3", + "rollup-plugin-esbuild": "^6.2.1", + "rollup-plugin-node-externals": "^8.1.0", + "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.2", "stylelint": "^15.10.1", "stylelint-config-css-modules": "^4.5.1", @@ -187,6 +194,7 @@ "tar": "^6.1.2", "ts-jest": "^29.4.0", "ts-node": "^10.9.1", + "tsup": "^8.5.0", "typescript": "^5.9.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9950fbb..a49082bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,8 +45,8 @@ importers: specifier: ^5.85.5 version: 5.85.5(react@19.1.1) '@umami/react-zen': - specifier: ^0.171.0 - version: 0.171.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) + specifier: ^0.174.0 + version: 0.174.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) '@umami/redis-client': specifier: ^0.27.0 version: 0.27.0 @@ -201,27 +201,33 @@ importers: '@formatjs/cli': specifier: ^4.2.29 version: 4.8.4(ts-jest@29.4.1(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.9)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)))(typescript@5.9.2)) + '@hyrious/esbuild-plugin-commonjs': + specifier: ^0.2.6 + version: 0.2.6(cjs-module-lexer@1.4.3)(esbuild@0.25.9) '@netlify/plugin-nextjs': specifier: ^5.12.1 version: 5.12.1 '@rollup/plugin-alias': specifier: ^5.0.0 - version: 5.1.1(rollup@3.29.5) + version: 5.1.1(rollup@4.49.0) '@rollup/plugin-commonjs': specifier: ^25.0.4 - version: 25.0.8(rollup@3.29.5) + version: 25.0.8(rollup@4.49.0) '@rollup/plugin-json': specifier: ^6.0.0 - version: 6.1.0(rollup@3.29.5) + version: 6.1.0(rollup@4.49.0) '@rollup/plugin-node-resolve': specifier: ^15.2.0 - version: 15.3.1(rollup@3.29.5) + version: 15.3.1(rollup@4.49.0) '@rollup/plugin-replace': specifier: ^5.0.2 - version: 5.0.7(rollup@3.29.5) + version: 5.0.7(rollup@4.49.0) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@3.29.5) + version: 0.4.4(rollup@4.49.0) + '@rollup/plugin-typescript': + specifier: ^12.1.4 + version: 12.1.4(rollup@4.49.0)(tslib@2.8.1)(typescript@5.9.2) '@types/jest': specifier: ^30.0.0 version: 30.0.0 @@ -243,6 +249,9 @@ importers: '@typescript-eslint/parser': specifier: ^8.41.0 version: 8.41.0(eslint@8.57.1)(typescript@5.9.2) + '@umami/esbuild-plugin-css-modules': + specifier: ^0.4.0 + version: 0.4.0 babel-plugin-react-compiler: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2 @@ -313,23 +322,26 @@ importers: specifier: 2.4.2 version: 2.4.2 rollup: - specifier: ^3.28.0 - version: 3.29.5 + specifier: ^4.49.0 + version: 4.49.0 rollup-plugin-copy: specifier: ^3.4.0 version: 3.5.0 rollup-plugin-delete: - specifier: ^2.0.0 - version: 2.2.0(rollup@3.29.5) + specifier: ^3.0.1 + version: 3.0.1(rollup@4.49.0) rollup-plugin-dts: - specifier: ^5.3.1 - version: 5.3.1(rollup@3.29.5)(typescript@5.9.2) + specifier: ^6.2.3 + version: 6.2.3(rollup@4.49.0)(typescript@5.9.2) rollup-plugin-esbuild: - specifier: ^5.0.0 - version: 5.0.0(esbuild@0.25.9)(rollup@3.29.5) + specifier: ^6.2.1 + version: 6.2.1(esbuild@0.25.9)(rollup@4.49.0) rollup-plugin-node-externals: - specifier: ^6.1.1 - version: 6.1.2(rollup@3.29.5) + specifier: ^8.1.0 + version: 8.1.0(rollup@4.49.0) + rollup-plugin-peer-deps-external: + specifier: ^2.2.4 + version: 2.2.4(rollup@4.49.0) rollup-plugin-postcss: specifier: ^4.0.2 version: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)) @@ -354,6 +366,9 @@ importers: ts-node: specifier: ^10.9.1 version: 10.9.2(@types/node@24.3.0)(typescript@5.9.2) + tsup: + specifier: ^8.5.0 + version: 8.5.0(jiti@2.5.1)(postcss@8.5.6)(typescript@5.9.2)(yaml@2.8.1) typescript: specifier: ^5.9.2 version: 5.9.2 @@ -1136,6 +1151,16 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@hyrious/esbuild-plugin-commonjs@0.2.6': + resolution: {integrity: sha512-LIPT8Y6EbNaHdV7lS9Ki6nnK0G1fP4bhzlMU1fgbOEJkR+yOA6FCORnPhjbQyeRTjG/ALPXdqCMRxTGwroL9CQ==} + engines: {node: '>=14'} + peerDependencies: + cjs-module-lexer: '*' + esbuild: '*' + peerDependenciesMeta: + cjs-module-lexer: + optional: true + '@img/sharp-darwin-arm64@0.34.3': resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1528,8 +1553,8 @@ packages: '@prisma/get-platform@6.15.0': resolution: {integrity: sha512-Jbb+Xbxyp05NSR1x2epabetHiXvpO8tdN2YNoWoA/ZsbYyxxu/CO/ROBauIFuMXs3Ti+W7N7SJtWsHGaWte9Rg==} - '@react-aria/autocomplete@3.0.0-beta.3': - resolution: {integrity: sha512-8haBygHNMqVt4Ge90VOk+iVlLW+zhiOGHYz2IKCE6+Sy1dTE6mzhHjxrtwWYnSez/OQLbxjHlwLch4CDd5JkLA==} + '@react-aria/autocomplete@3.0.0-rc.1': + resolution: {integrity: sha512-4/+XHkCq9nkC0TNfgPsbuMTu3iwM6Gz4j67rTQRMXrWwCTAqAHJJEmDz/YDt/04Rg+dkGPsauHHMqDxwxZV24Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -1558,8 +1583,8 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/collections@3.0.0-rc.1': - resolution: {integrity: sha512-R8FE4z82lsXsNJgMu545U9BzDlnjEOVh8hDFWDwFFTf/NZSPw2ESgEZhFnVusvn5mHtr4mTzb2MyfGY5E2wVYw==} + '@react-aria/collections@3.0.0-rc.6': + resolution: {integrity: sha512-N4AzRqzFJ4BztM1x56ot33smDUUsYQ6pzlbz6m4f8ARSqQYl0a2FsM13PYDtuNI5Dt9KtkL6rK/tLaZlTghLyg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -1783,12 +1808,6 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/toolbar@3.0.0-beta.16': - resolution: {integrity: sha512-TnNvtxADalMzs9Et51hWPpGyiHr1dt++UYR7pIo1H7vO+HwXl6uH4HxbFDS5CyV69j2cQlcGrkj13LoWFkBECw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/toolbar@3.0.0-beta.20': resolution: {integrity: sha512-Kxvqw+TpVOE/eSi8RAQ9xjBQ2uXe8KkRvlRNQWQsrzkZDkXhzqGfQuJnBmozFxqpzSLwaVqQajHFUSvPAScT8Q==} peerDependencies: @@ -1879,8 +1898,8 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@react-stately/autocomplete@3.0.0-beta.1': - resolution: {integrity: sha512-ohs6QOtJouQ+Y1+zRKiCzv57QogSTRuOA1QfrnIS1YPwKO1EDQXSqFkq2htK5+bN9GCm94yo6r4iX++SZKmLXA==} + '@react-stately/autocomplete@3.0.0-beta.3': + resolution: {integrity: sha512-YfP/TrvkOCp6j7oqpZxJSvmSeXn+XtbKSOiBOuo+m2zCIhW2ncThmDB9uAUOkpmikDv/LkGKni40RQE8USdGdA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -2034,8 +2053,8 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-types/autocomplete@3.0.0-alpha.31': - resolution: {integrity: sha512-L+5JtCAM+Y2/hCQ0BYXti6P2KGyiEM7FTYFBaTr2CoaHDN3u8e3cpDjOig83zzs9FcdUClovkqpVtvu26IZvhw==} + '@react-types/autocomplete@3.0.0-alpha.34': + resolution: {integrity: sha512-wswz7r0823EWfBZVMVicoDmFw0T6k7LqGlsLivq/2mq1dL62ywPFPtRUNU5nYqgslZYPUZMPyZgKdehKyuwE7Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -2257,6 +2276,19 @@ packages: rollup: optional: true + '@rollup/plugin-typescript@12.1.4': + resolution: {integrity: sha512-s5Hx+EtN60LMlDBvl5f04bEiFZmAepk27Q+mr85L/00zPDn1jtzlTV6FWn81MaIwqfWzKxmOJrBWHU6vtQyedQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.14.0||^3.0.0||^4.0.0 + tslib: '*' + typescript: '>=3.7.0' + peerDependenciesMeta: + rollup: + optional: true + tslib: + optional: true + '@rollup/pluginutils@5.2.0': resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} engines: {node: '>=14.0.0'} @@ -2266,6 +2298,106 @@ packages: rollup: optional: true + '@rollup/rollup-android-arm-eabi@4.49.0': + resolution: {integrity: sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.49.0': + resolution: {integrity: sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.49.0': + resolution: {integrity: sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.49.0': + resolution: {integrity: sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.49.0': + resolution: {integrity: sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.49.0': + resolution: {integrity: sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.49.0': + resolution: {integrity: sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.49.0': + resolution: {integrity: sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.49.0': + resolution: {integrity: sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.49.0': + resolution: {integrity: sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.49.0': + resolution: {integrity: sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.49.0': + resolution: {integrity: sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.49.0': + resolution: {integrity: sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.49.0': + resolution: {integrity: sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.49.0': + resolution: {integrity: sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.49.0': + resolution: {integrity: sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.49.0': + resolution: {integrity: sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.49.0': + resolution: {integrity: sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.49.0': + resolution: {integrity: sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.49.0': + resolution: {integrity: sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==} + cpu: [x64] + os: [win32] + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -2278,6 +2410,10 @@ packages: '@sinclair/typebox@0.34.40': resolution: {integrity: sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==} + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} @@ -2606,8 +2742,11 @@ packages: resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@umami/react-zen@0.171.0': - resolution: {integrity: sha512-FlVgvJBZHTQRAJyWFy6cQrf/jo0Qx62SBqUAeZA8Ly1lYrRublJZ1J0JS/qsM6BLEbOWTBQenuN52jmAOMBYYw==} + '@umami/esbuild-plugin-css-modules@0.4.0': + resolution: {integrity: sha512-OcFbipBJZCmMnJ52/eHkZxpXGQT8Q5bAePgkhpxlreT4zP98grZ6iLzaIkDPFqURQwM/llDhPyNEFRzkSfVYFw==} + + '@umami/react-zen@0.174.0': + resolution: {integrity: sha512-16+ePYWJsnu67kZupCsb2ZhSeKlYKSC+xARdVFWxUY1BOxi5My+z7BfT+JFEStZ5d8yDZEQLoeoeNYr2OWcqHw==} '@umami/redis-client@0.27.0': resolution: {integrity: sha512-SbHTpxhgeZyTBUSp2zdZM+XUtpsaSL4Tad8QXIEhEtjWhvvfoornyT5kLuyYCVtzSAT4daALeGmOO1z6EE1KcA==} @@ -2804,6 +2943,9 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -3012,6 +3154,12 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + c12@3.1.0: resolution: {integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==} peerDependencies: @@ -3020,6 +3168,10 @@ packages: magicast: optional: true + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + cachedir@2.4.0: resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} engines: {node: '>=6'} @@ -3062,9 +3214,6 @@ packages: caniuse-lite@1.0.30001735: resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} - caniuse-lite@1.0.30001736: - resolution: {integrity: sha512-ImpN5gLEY8gWeqfLUyEF4b7mYWcYoR2Si1VhnrbM4JizRFmfGaAQ12PhNykq6nvI4XvKLrsp8Xde74D5phJOSw==} - caniuse-lite@1.0.30001737: resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==} @@ -3215,6 +3364,10 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} engines: {node: '>= 6'} @@ -3244,6 +3397,9 @@ packages: concat-with-sourcemaps@1.1.0: resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + confbox@0.2.2: resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} @@ -3543,6 +3699,10 @@ packages: resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} engines: {node: '>=10'} + del@8.0.0: + resolution: {integrity: sha512-R6ep6JJ+eOBZsBr9esiNN1gxFbZE4Q2cULkUSFumGYecAiS6qodDvcPx/sFuWHMNul7DWmrtoEOpYSm7o6tbSA==} + engines: {node: '>=18'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -4045,6 +4205,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + fix-dts-default-cjs-exports@1.0.1: + resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4226,6 +4389,10 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + globjoin@0.1.4: resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} @@ -4533,10 +4700,18 @@ packages: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} + is-path-cwd@3.0.0: + resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -4871,9 +5046,6 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -4984,6 +5156,10 @@ packages: resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} engines: {node: '>=8'} + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + loader-utils@3.3.1: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} @@ -5033,6 +5209,9 @@ packages: resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==} deprecated: This package is deprecated. Use destructuring assignment syntax instead. + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} @@ -5088,6 +5267,9 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.18: + resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} + make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -5231,6 +5413,9 @@ packages: engines: {node: '>=10'} hasBin: true + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mmdb-lib@3.0.1: resolution: {integrity: sha512-dyAyMR+cRykZd1mw5altC9f4vKpCsuywPwo8l/L5fKqDay2zmqT0mF/BvUoXnQiqGn+nceO914rkPKJoyFnGxA==} engines: {node: '>=10', npm: '>=6'} @@ -5238,6 +5423,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nano-spawn@1.0.2: resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} engines: {node: '>=20.17'} @@ -5420,6 +5608,10 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + p-queue@6.6.2: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} @@ -5484,6 +5676,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -5571,6 +5767,9 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} @@ -5748,6 +5947,24 @@ packages: ts-node: optional: true + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + postcss-logical@5.0.4: resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} engines: {node: ^12 || ^14 || >=16} @@ -5828,6 +6045,11 @@ packages: peerDependencies: postcss: ^8.0.0 + postcss-modules@6.0.1: + resolution: {integrity: sha512-zyo2sAkVvuZFFy0gc2+4O+xar5dYlaVy/ebO24KT0ftk/iJevSNyPyQellsBLlnccwh7f6V6Y4GvuKRYToNgpQ==} + peerDependencies: + postcss: ^8.0.0 + postcss-nesting@10.2.0: resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} engines: {node: ^12 || ^14 || >=16} @@ -6110,8 +6332,8 @@ packages: rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - react-aria-components@1.9.0: - resolution: {integrity: sha512-7cOYxvODDPn8PlWh7eM6/hcydM9sem9PJfL9XD90hIUGfX/f5wMu4lplpjFVzkoCPe4UcOrqC77k3vpRN+1eaw==} + react-aria-components@1.12.1: + resolution: {integrity: sha512-UTn2y2Pr1QuapXLRoGE/GWHrjcZZSuMf+zhbJjInOHgS+MC4hqXiINufvjQrdjQDzS1llc2aepP9op6+z6QSxA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6324,31 +6546,36 @@ packages: resolution: {integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==} engines: {node: '>=8.3'} - rollup-plugin-delete@2.2.0: - resolution: {integrity: sha512-REKtDKWvjZlbrWpPvM9X/fadCs3E9I9ge27AK8G0e4bXwSLeABAAwtjiI1u3ihqZxk6mJeB2IVeSbH4DtOcw7A==} - engines: {node: '>=10'} + rollup-plugin-delete@3.0.1: + resolution: {integrity: sha512-4tyijMQFwSDLA04DAHwbI2TrRwPiRwAqBQ17dxyr9CgHeHXLdgk8IDVWHFWPrL3UZJWrAmHohQ2MgmVghQDrlg==} + engines: {node: '>=18'} peerDependencies: rollup: '*' - rollup-plugin-dts@5.3.1: - resolution: {integrity: sha512-gusMi+Z4gY/JaEQeXnB0RUdU82h1kF0WYzCWgVmV4p3hWXqelaKuCvcJawfeg+EKn2T1Ie+YWF2OiN1/L8bTVg==} - engines: {node: '>=v14.21.3'} + rollup-plugin-dts@6.2.3: + resolution: {integrity: sha512-UgnEsfciXSPpASuOelix7m4DrmyQgiaWBnvI0TM4GxuDh5FkqW8E5hu57bCxXB90VvR1WNfLV80yEDN18UogSA==} + engines: {node: '>=16'} peerDependencies: - rollup: ^3.0 - typescript: ^4.1 || ^5.0 + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 - rollup-plugin-esbuild@5.0.0: - resolution: {integrity: sha512-1cRIOHAPh8WQgdQQyyvFdeOdxuiyk+zB5zJ5+YOwrZP4cJ0MT3Fs48pQxrZeyZHcn+klFherytILVfE4aYrneg==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} + rollup-plugin-esbuild@6.2.1: + resolution: {integrity: sha512-jTNOMGoMRhs0JuueJrJqbW8tOwxumaWYq+V5i+PD+8ecSCVkuX27tGW7BXqDgoULQ55rO7IdNxPcnsWtshz3AA==} + engines: {node: '>=14.18.0'} peerDependencies: - esbuild: '>=0.10.1' - rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 + esbuild: '>=0.18.0' + rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - rollup-plugin-node-externals@6.1.2: - resolution: {integrity: sha512-2TWan0u0/zHcgPrKpIPgKSY8OMqwDAYD380I0hxx7iUQw8mrN34DWwG9sQUMEo5Yy4xd6/5QEAySYgiKN9fdBQ==} - engines: {node: '>=16.0.0'} + rollup-plugin-node-externals@8.1.0: + resolution: {integrity: sha512-0D3S0E0Dl1V3Q6Cywnc7wt88VAfOB9AC5QHwVdgvP1vByRHW2wnEXoK0x3VYZzJ/EmGsR5Uix5HUmMJNG+hz2Q==} + engines: {node: '>= 21 || ^20.6.0 || ^18.19.0'} peerDependencies: - rollup: ^3.0.0 || ^4.0.0 + rollup: ^4.0.0 + + rollup-plugin-peer-deps-external@2.2.4: + resolution: {integrity: sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==} + peerDependencies: + rollup: '*' rollup-plugin-postcss@4.0.2: resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} @@ -6359,9 +6586,9 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@3.29.5: - resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} + rollup@4.49.0: + resolution: {integrity: sha512-3IVq0cGJ6H7fKXXEdVt+RcYvRCt8beYY9K1760wGQwSAHZcS9eot1zDG5axUbcp/kWRi5zKIIDX8MoKv/TzvZA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-parallel@1.2.0: @@ -6493,6 +6720,10 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} @@ -6533,6 +6764,11 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -6711,6 +6947,11 @@ packages: engines: {node: ^14.13.1 || >=16.0.0} hasBin: true + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -6774,6 +7015,13 @@ packages: thenby@1.3.4: resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + throttleit@1.0.1: resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} @@ -6787,6 +7035,9 @@ packages: resolution: {integrity: sha512-UxWEfRKpFCabAf6fkTNdlfSw/RDUJ/4C6i1aLZaDnGF82PERHyYhz5CMCVYXtLt34LbqgfpJ2bjmgGKgxuF/6A==} engines: {node: '>=12'} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} @@ -6820,6 +7071,9 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -6838,6 +7092,9 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-jest@29.4.1: resolution: {integrity: sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} @@ -6888,6 +7145,25 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsup@8.5.0: + resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + tsutils@3.21.0: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -6965,6 +7241,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} @@ -6977,6 +7256,10 @@ packages: undici-types@7.10.0: resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -6985,6 +7268,10 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unplugin-utils@0.2.5: + resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==} + engines: {node: '>=18.12.0'} + unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} @@ -7055,6 +7342,12 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -7941,6 +8234,12 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@hyrious/esbuild-plugin-commonjs@0.2.6(cjs-module-lexer@1.4.3)(esbuild@0.25.9)': + dependencies: + esbuild: 0.25.9 + optionalDependencies: + cjs-module-lexer: 1.4.3 + '@img/sharp-darwin-arm64@0.34.3': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.2.0 @@ -8393,7 +8692,7 @@ snapshots: dependencies: '@prisma/debug': 6.15.0 - '@react-aria/autocomplete@3.0.0-beta.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@react-aria/autocomplete@3.0.0-rc.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@react-aria/combobox': 3.13.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/focus': 3.21.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -8403,9 +8702,9 @@ snapshots: '@react-aria/searchfield': 3.8.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/textfield': 3.18.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/utils': 3.30.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@react-stately/autocomplete': 3.0.0-beta.1(react@19.1.1) + '@react-stately/autocomplete': 3.0.0-beta.3(react@19.1.1) '@react-stately/combobox': 3.11.1(react@19.1.1) - '@react-types/autocomplete': 3.0.0-alpha.31(react@19.1.1) + '@react-types/autocomplete': 3.0.0-alpha.34(react@19.1.1) '@react-types/button': 3.14.0(react@19.1.1) '@react-types/shared': 3.32.0(react@19.1.1) '@swc/helpers': 0.5.17 @@ -8466,7 +8765,7 @@ snapshots: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - '@react-aria/collections@3.0.0-rc.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@react-aria/collections@3.0.0-rc.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@react-aria/interactions': 3.25.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/ssr': 3.9.10(react@19.1.1) @@ -8960,16 +9259,6 @@ snapshots: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - '@react-aria/toolbar@3.0.0-beta.16(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@react-aria/focus': 3.21.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@react-aria/i18n': 3.12.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@react-aria/utils': 3.30.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@react-types/shared': 3.32.0(react@19.1.1) - '@swc/helpers': 0.5.17 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - '@react-aria/toolbar@3.0.0-beta.20(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@react-aria/focus': 3.21.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -9099,7 +9388,7 @@ snapshots: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - '@react-stately/autocomplete@3.0.0-beta.1(react@19.1.1)': + '@react-stately/autocomplete@3.0.0-beta.3(react@19.1.1)': dependencies: '@react-stately/utils': 3.10.8(react@19.1.1) '@swc/helpers': 0.5.17 @@ -9357,7 +9646,7 @@ snapshots: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - '@react-types/autocomplete@3.0.0-alpha.31(react@19.1.1)': + '@react-types/autocomplete@3.0.0-alpha.34(react@19.1.1)': dependencies: '@react-types/combobox': 3.13.8(react@19.1.1) '@react-types/searchfield': 3.6.5(react@19.1.1) @@ -9535,59 +9824,128 @@ snapshots: dependencies: '@redis/client': 1.6.1 - '@rollup/plugin-alias@5.1.1(rollup@3.29.5)': + '@rollup/plugin-alias@5.1.1(rollup@4.49.0)': optionalDependencies: - rollup: 3.29.5 + rollup: 4.49.0 - '@rollup/plugin-commonjs@25.0.8(rollup@3.29.5)': + '@rollup/plugin-commonjs@25.0.8(rollup@4.49.0)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@3.29.5) + '@rollup/pluginutils': 5.2.0(rollup@4.49.0) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.17 optionalDependencies: - rollup: 3.29.5 + rollup: 4.49.0 - '@rollup/plugin-json@6.1.0(rollup@3.29.5)': + '@rollup/plugin-json@6.1.0(rollup@4.49.0)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@3.29.5) + '@rollup/pluginutils': 5.2.0(rollup@4.49.0) optionalDependencies: - rollup: 3.29.5 + rollup: 4.49.0 - '@rollup/plugin-node-resolve@15.3.1(rollup@3.29.5)': + '@rollup/plugin-node-resolve@15.3.1(rollup@4.49.0)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@3.29.5) + '@rollup/pluginutils': 5.2.0(rollup@4.49.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 3.29.5 + rollup: 4.49.0 - '@rollup/plugin-replace@5.0.7(rollup@3.29.5)': + '@rollup/plugin-replace@5.0.7(rollup@4.49.0)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@3.29.5) + '@rollup/pluginutils': 5.2.0(rollup@4.49.0) magic-string: 0.30.17 optionalDependencies: - rollup: 3.29.5 + rollup: 4.49.0 - '@rollup/plugin-terser@0.4.4(rollup@3.29.5)': + '@rollup/plugin-terser@0.4.4(rollup@4.49.0)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.43.1 optionalDependencies: - rollup: 3.29.5 + rollup: 4.49.0 - '@rollup/pluginutils@5.2.0(rollup@3.29.5)': + '@rollup/plugin-typescript@12.1.4(rollup@4.49.0)(tslib@2.8.1)(typescript@5.9.2)': + dependencies: + '@rollup/pluginutils': 5.2.0(rollup@4.49.0) + resolve: 1.22.10 + typescript: 5.9.2 + optionalDependencies: + rollup: 4.49.0 + tslib: 2.8.1 + + '@rollup/pluginutils@5.2.0(rollup@4.49.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 3.29.5 + rollup: 4.49.0 + + '@rollup/rollup-android-arm-eabi@4.49.0': + optional: true + + '@rollup/rollup-android-arm64@4.49.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.49.0': + optional: true + + '@rollup/rollup-darwin-x64@4.49.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.49.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.49.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.49.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.49.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.49.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.49.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.49.0': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.49.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.49.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.49.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.49.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.49.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.49.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.49.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.49.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.49.0': + optional: true '@rtsao/scc@1.1.0': {} @@ -9597,6 +9955,8 @@ snapshots: '@sinclair/typebox@0.34.40': {} + '@sindresorhus/merge-streams@2.3.0': {} + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -9995,7 +10355,12 @@ snapshots: '@typescript-eslint/types': 8.41.0 eslint-visitor-keys: 4.2.1 - '@umami/react-zen@0.171.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))': + '@umami/esbuild-plugin-css-modules@0.4.0': + dependencies: + postcss: 8.5.6 + postcss-modules: 6.0.1(postcss@8.5.6) + + '@umami/react-zen@0.174.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))': dependencies: '@fontsource/jetbrains-mono': 5.2.6 '@internationalized/date': 3.9.0 @@ -10007,7 +10372,7 @@ snapshots: lucide-react: 0.511.0(react@19.1.1) next: 15.5.2(@babel/core@7.28.3)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 - react-aria-components: 1.9.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react-aria-components: 1.12.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react-dom: 19.1.1(react@19.1.1) react-hook-form: 7.62.0(react@19.1.1) react-icons: 5.5.0(react@19.1.1) @@ -10113,7 +10478,7 @@ snapshots: '@vue/compiler-ssr': 3.5.18 '@vue/shared': 3.5.18 estree-walker: 2.0.2 - magic-string: 0.30.17 + magic-string: 0.30.18 postcss: 8.5.6 source-map-js: 1.2.1 @@ -10205,6 +10570,8 @@ snapshots: ansi-styles@6.2.1: {} + any-promise@1.3.0: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -10467,6 +10834,11 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bundle-require@5.1.0(esbuild@0.25.9): + dependencies: + esbuild: 0.25.9 + load-tsconfig: 0.2.5 + c12@3.1.0: dependencies: chokidar: 4.0.3 @@ -10482,6 +10854,8 @@ snapshots: pkg-types: 2.3.0 rc9: 2.1.2 + cac@6.7.14: {} + cachedir@2.4.0: {} call-bind-apply-helpers@1.0.2: @@ -10523,14 +10897,12 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.25.2 - caniuse-lite: 1.0.30001736 + caniuse-lite: 1.0.30001737 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 caniuse-lite@1.0.30001735: {} - caniuse-lite@1.0.30001736: {} - caniuse-lite@1.0.30001737: {} caseless@0.12.0: {} @@ -10661,6 +11033,8 @@ snapshots: commander@2.20.3: {} + commander@4.1.1: {} + commander@6.2.1: {} commander@7.2.0: {} @@ -10679,6 +11053,8 @@ snapshots: dependencies: source-map: 0.6.1 + confbox@0.1.8: {} + confbox@0.2.2: {} consola@3.4.2: {} @@ -11050,6 +11426,15 @@ snapshots: rimraf: 3.0.2 slash: 3.0.0 + del@8.0.0: + dependencies: + globby: 14.1.0 + is-glob: 4.0.3 + is-path-cwd: 3.0.0 + is-path-inside: 4.0.0 + p-map: 7.0.3 + slash: 5.1.0 + delayed-stream@1.0.0: {} destr@2.0.5: {} @@ -11730,6 +12115,12 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + fix-dts-default-cjs-exports@1.0.1: + dependencies: + magic-string: 0.30.18 + mlly: 1.8.0 + rollup: 4.49.0 + flat-cache@3.2.0: dependencies: flatted: 3.3.3 @@ -11962,6 +12353,15 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + globjoin@0.1.4: {} gonzales-pe@4.3.0: @@ -12222,8 +12622,12 @@ snapshots: is-path-cwd@2.2.0: {} + is-path-cwd@3.0.0: {} + is-path-inside@3.0.3: {} + is-path-inside@4.0.0: {} + is-plain-obj@1.1.0: {} is-plain-obj@2.1.0: {} @@ -12754,8 +13158,6 @@ snapshots: json5@2.2.3: {} - jsonc-parser@3.3.1: {} - jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -12904,6 +13306,8 @@ snapshots: strip-bom: 4.0.0 type-fest: 0.6.0 + load-tsconfig@0.2.5: {} + loader-utils@3.3.1: {} locate-path@5.0.0: @@ -12938,6 +13342,8 @@ snapshots: lodash.pick@4.4.0: {} + lodash.sortby@4.7.0: {} + lodash.truncate@4.4.2: {} lodash.uniq@4.5.0: {} @@ -12999,6 +13405,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.18: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + make-dir@3.1.0: dependencies: semver: 6.3.1 @@ -13139,10 +13549,23 @@ snapshots: mkdirp@1.0.4: {} + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + mmdb-lib@3.0.1: {} ms@2.1.3: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nano-spawn@1.0.2: {} nanoid@3.3.11: {} @@ -13341,6 +13764,8 @@ snapshots: dependencies: aggregate-error: 3.1.0 + p-map@7.0.3: {} + p-queue@6.6.2: dependencies: eventemitter3: 4.0.7 @@ -13395,6 +13820,8 @@ snapshots: path-type@4.0.0: {} + path-type@6.0.0: {} + pathe@2.0.3: {} pend@1.2.0: {} @@ -13460,6 +13887,12 @@ snapshots: dependencies: find-up: 4.1.0 + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + pkg-types@2.3.0: dependencies: confbox: 0.2.2 @@ -13612,6 +14045,14 @@ snapshots: postcss: 8.5.6 ts-node: 10.9.2(@types/node@24.3.0)(typescript@5.9.2) + postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.5.6)(yaml@2.8.1): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.5.1 + postcss: 8.5.6 + yaml: 2.8.1 + postcss-logical@5.0.4(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -13694,6 +14135,18 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.5.6) string-hash: 1.1.3 + postcss-modules@6.0.1(postcss@8.5.6): + dependencies: + generic-names: 4.0.0 + icss-utils: 5.1.0(postcss@8.5.6) + lodash.camelcase: 4.3.0 + postcss: 8.5.6 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) + postcss-modules-scope: 3.2.1(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) + string-hash: 1.1.3 + postcss-nesting@10.2.0(postcss@8.5.6): dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) @@ -13985,22 +14438,23 @@ snapshots: defu: 6.1.4 destr: 2.0.5 - react-aria-components@1.9.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + react-aria-components@1.12.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@internationalized/date': 3.9.0 '@internationalized/string': 3.2.7 - '@react-aria/autocomplete': 3.0.0-beta.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@react-aria/collections': 3.0.0-rc.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@react-aria/autocomplete': 3.0.0-rc.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@react-aria/collections': 3.0.0-rc.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/dnd': 3.11.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/focus': 3.21.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/interactions': 3.25.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/live-announcer': 3.4.4 '@react-aria/overlays': 3.29.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/ssr': 3.9.10(react@19.1.1) - '@react-aria/toolbar': 3.0.0-beta.16(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@react-aria/textfield': 3.18.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@react-aria/toolbar': 3.0.0-beta.20(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/utils': 3.30.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-aria/virtualizer': 4.1.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@react-stately/autocomplete': 3.0.0-beta.1(react@19.1.1) + '@react-stately/autocomplete': 3.0.0-beta.3(react@19.1.1) '@react-stately/layout': 4.5.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-stately/selection': 3.20.5(react@19.1.1) '@react-stately/table': 3.15.0(react@19.1.1) @@ -14319,34 +14773,37 @@ snapshots: globby: 10.0.1 is-plain-object: 3.0.1 - rollup-plugin-delete@2.2.0(rollup@3.29.5): + rollup-plugin-delete@3.0.1(rollup@4.49.0): dependencies: - del: 6.1.1 - rollup: 3.29.5 + del: 8.0.0 + rollup: 4.49.0 - rollup-plugin-dts@5.3.1(rollup@3.29.5)(typescript@5.9.2): + rollup-plugin-dts@6.2.3(rollup@4.49.0)(typescript@5.9.2): dependencies: - magic-string: 0.30.17 - rollup: 3.29.5 + magic-string: 0.30.18 + rollup: 4.49.0 typescript: 5.9.2 optionalDependencies: '@babel/code-frame': 7.27.1 - rollup-plugin-esbuild@5.0.0(esbuild@0.25.9)(rollup@3.29.5): + rollup-plugin-esbuild@6.2.1(esbuild@0.25.9)(rollup@4.49.0): dependencies: - '@rollup/pluginutils': 5.2.0(rollup@3.29.5) debug: 4.4.1(supports-color@8.1.1) es-module-lexer: 1.7.0 esbuild: 0.25.9 - joycon: 3.1.1 - jsonc-parser: 3.3.1 - rollup: 3.29.5 + get-tsconfig: 4.10.1 + rollup: 4.49.0 + unplugin-utils: 0.2.5 transitivePeerDependencies: - supports-color - rollup-plugin-node-externals@6.1.2(rollup@3.29.5): + rollup-plugin-node-externals@8.1.0(rollup@4.49.0): dependencies: - rollup: 3.29.5 + rollup: 4.49.0 + + rollup-plugin-peer-deps-external@2.2.4(rollup@4.49.0): + dependencies: + rollup: 4.49.0 rollup-plugin-postcss@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)): dependencies: @@ -14371,8 +14828,30 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@3.29.5: + rollup@4.49.0: + dependencies: + '@types/estree': 1.0.8 optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.49.0 + '@rollup/rollup-android-arm64': 4.49.0 + '@rollup/rollup-darwin-arm64': 4.49.0 + '@rollup/rollup-darwin-x64': 4.49.0 + '@rollup/rollup-freebsd-arm64': 4.49.0 + '@rollup/rollup-freebsd-x64': 4.49.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.49.0 + '@rollup/rollup-linux-arm-musleabihf': 4.49.0 + '@rollup/rollup-linux-arm64-gnu': 4.49.0 + '@rollup/rollup-linux-arm64-musl': 4.49.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.49.0 + '@rollup/rollup-linux-ppc64-gnu': 4.49.0 + '@rollup/rollup-linux-riscv64-gnu': 4.49.0 + '@rollup/rollup-linux-riscv64-musl': 4.49.0 + '@rollup/rollup-linux-s390x-gnu': 4.49.0 + '@rollup/rollup-linux-x64-gnu': 4.49.0 + '@rollup/rollup-linux-x64-musl': 4.49.0 + '@rollup/rollup-win32-arm64-msvc': 4.49.0 + '@rollup/rollup-win32-ia32-msvc': 4.49.0 + '@rollup/rollup-win32-x64-msvc': 4.49.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -14541,6 +15020,8 @@ snapshots: slash@3.0.0: {} + slash@5.1.0: {} + slice-ansi@3.0.0: dependencies: ansi-styles: 4.3.0 @@ -14588,6 +15069,10 @@ snapshots: source-map@0.6.1: {} + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -14833,6 +15318,16 @@ snapshots: - supports-color - typescript + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + ts-interface-checker: 0.1.13 + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -14914,6 +15409,14 @@ snapshots: thenby@1.3.4: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + throttleit@1.0.1: {} through@2.3.8: {} @@ -14922,6 +15425,8 @@ snapshots: tiny-lru@11.3.4: {} + tinyexec@0.3.2: {} + tinyexec@1.0.1: {} tinyglobby@0.2.14: @@ -14951,6 +15456,10 @@ snapshots: dependencies: tldts: 6.1.86 + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + tree-kill@1.2.2: {} trim-newlines@3.0.1: {} @@ -14961,6 +15470,8 @@ snapshots: dependencies: typescript: 5.9.2 + ts-interface-checker@0.1.13: {} + ts-jest@29.4.1(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.9)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)))(typescript@5.9.2): dependencies: bs-logger: 0.2.6 @@ -15011,6 +15522,34 @@ snapshots: tslib@2.8.1: {} + tsup@8.5.0(jiti@2.5.1)(postcss@8.5.6)(typescript@5.9.2)(yaml@2.8.1): + dependencies: + bundle-require: 5.1.0(esbuild@0.25.9) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.1(supports-color@8.1.1) + esbuild: 0.25.9 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(yaml@2.8.1) + resolve-from: 5.0.0 + rollup: 4.49.0 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.5.6 + typescript: 5.9.2 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + tsutils@3.21.0(typescript@5.9.2): dependencies: tslib: 1.14.1 @@ -15083,6 +15622,8 @@ snapshots: typescript@5.9.2: {} + ufo@1.6.1: {} + uglify-js@3.19.3: optional: true @@ -15095,10 +15636,17 @@ snapshots: undici-types@7.10.0: {} + unicorn-magic@0.3.0: {} + universalify@0.1.2: {} universalify@2.0.1: {} + unplugin-utils@0.2.5: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.3 + unrs-resolver@1.11.1: dependencies: napi-postinstall: 0.3.3 @@ -15186,6 +15734,14 @@ snapshots: web-streams-polyfill@3.3.3: {} + webidl-conversions@4.0.2: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 diff --git a/rollup.components.config.js b/rollup.components.config.js index 5c567c27..04f23955 100644 --- a/rollup.components.config.js +++ b/rollup.components.config.js @@ -8,7 +8,6 @@ import copy from 'rollup-plugin-copy'; import del from 'rollup-plugin-delete'; import nodeExternals from 'rollup-plugin-node-externals'; import esbuild from 'rollup-plugin-esbuild'; -import dts from 'rollup-plugin-dts'; const md5 = str => crypto.createHash('md5').update(str).digest('hex'); @@ -24,11 +23,11 @@ const aliasConfig = { customResolver, }; -const jsBundle = { - input: 'src/index.ts', +const clientConfig = { + input: 'src/index.client.ts', output: [ { - file: 'dist/index.js', + file: 'dist/client/index.js', format: 'es', sourcemap: true, }, @@ -52,9 +51,9 @@ const jsBundle = { }, }, }), + alias(aliasConfig), nodeExternals(), json(), - alias(aliasConfig), esbuild({ target: 'es6', jsx: 'automatic', @@ -65,14 +64,14 @@ const jsBundle = { ], }; -const dtsBundle = { - input: 'src/index.ts', +const serverConfig = { + input: 'src/index.server.ts', output: { - file: 'dist/index.d.ts', + file: 'dist/server/index.ts', format: 'es', }, - plugins: [alias(aliasConfig), nodeExternals(), json(), dts()], + plugins: [alias(aliasConfig), nodeExternals(), json()], external: [/\.css/], }; -export default [jsBundle, dtsBundle]; +export default [clientConfig, serverConfig]; diff --git a/scripts/build-prisma-client.js b/scripts/build-prisma-client.js index 04a71bdd..b5edc3dc 100644 --- a/scripts/build-prisma-client.js +++ b/scripts/build-prisma-client.js @@ -4,7 +4,7 @@ esbuild .build({ entryPoints: ['src/generated/prisma/client.ts'], // Adjust this to your entry file bundle: true, // Bundle all files into one (optional) - outfile: 'dist/generated/prisma/client.js', // Output file + outfile: 'generated/prisma/client.js', // Output file platform: 'node', // For Node.js compatibility target: 'es2020', // Target version of Node.js format: 'esm', // Use ESM format diff --git a/scripts/check-db.js b/scripts/check-db.js index ef974e80..7c7daaa1 100644 --- a/scripts/check-db.js +++ b/scripts/check-db.js @@ -3,7 +3,7 @@ import 'dotenv/config'; import { execSync } from 'node:child_process'; import chalk from 'chalk'; import semver from 'semver'; -import { PrismaClient } from '../dist/generated/prisma/client.js'; +import { PrismaClient } from '../generated/prisma/client.js'; import { PrismaPg } from '@prisma/adapter-pg'; const MIN_VERSION = '9.4.0'; diff --git a/src/app/(main)/admin/users/[userId]/UserProvider.tsx b/src/app/(main)/admin/users/[userId]/UserProvider.tsx index 39df7cfc..8ac321da 100644 --- a/src/app/(main)/admin/users/[userId]/UserProvider.tsx +++ b/src/app/(main)/admin/users/[userId]/UserProvider.tsx @@ -1,8 +1,9 @@ import { createContext, ReactNode } from 'react'; import { Loading } from '@umami/react-zen'; -import { useUserQuery } from '@/components/hooks'; +import { User } from '@/generated/prisma/client'; +import { useUserQuery } from '@/components/hooks/queries/useUserQuery'; -export const UserContext = createContext(null); +export const UserContext = createContext(null); export function UserProvider({ userId, children }: { userId: string; children: ReactNode }) { const { data: user, isFetching, isLoading } = useUserQuery(userId); diff --git a/src/app/(main)/links/LinkEditForm.tsx b/src/app/(main)/links/LinkEditForm.tsx index 38298d9f..b7a458dd 100644 --- a/src/app/(main)/links/LinkEditForm.tsx +++ b/src/app/(main)/links/LinkEditForm.tsx @@ -14,7 +14,7 @@ import { import { useConfig, useLinkQuery } from '@/components/hooks'; import { useMessages } from '@/components/hooks'; import { Refresh } from '@/components/icons'; -import { getRandomChars } from '@/lib/crypto'; +import { getRandomChars } from '@/lib/generate'; import { useUpdateQuery } from '@/components/hooks/queries/useUpdateQuery'; import { LINKS_URL } from '@/lib/constants'; import { isValidUrl } from '@/lib/url'; diff --git a/src/app/(main)/links/LinkProvider.tsx b/src/app/(main)/links/LinkProvider.tsx index 6593d85a..0a8900cf 100644 --- a/src/app/(main)/links/LinkProvider.tsx +++ b/src/app/(main)/links/LinkProvider.tsx @@ -1,9 +1,10 @@ 'use client'; import { createContext, ReactNode } from 'react'; -import { useLinkQuery } from '@/components/hooks'; import { Loading } from '@umami/react-zen'; +import { Link } from '@/generated/prisma/client'; +import { useLinkQuery } from '@/components/hooks/queries/useLinkQuery'; -export const LinkContext = createContext(null); +export const LinkContext = createContext(null); export function LinkProvider({ linkId, children }: { linkId?: string; children: ReactNode }) { const { data: link, isLoading, isFetching } = useLinkQuery(linkId); diff --git a/src/app/(main)/pixels/PixelEditForm.tsx b/src/app/(main)/pixels/PixelEditForm.tsx index 6024a745..bd29e69e 100644 --- a/src/app/(main)/pixels/PixelEditForm.tsx +++ b/src/app/(main)/pixels/PixelEditForm.tsx @@ -13,7 +13,7 @@ import { import { useConfig, usePixelQuery } from '@/components/hooks'; import { useMessages } from '@/components/hooks'; import { Refresh } from '@/components/icons'; -import { getRandomChars } from '@/lib/crypto'; +import { getRandomChars } from '@/lib/generate'; import { useUpdateQuery } from '@/components/hooks/queries/useUpdateQuery'; import { useEffect, useState } from 'react'; import { PIXELS_URL } from '@/lib/constants'; diff --git a/src/app/(main)/pixels/PixelProvider.tsx b/src/app/(main)/pixels/PixelProvider.tsx index 1a5c1d5d..d46b687d 100644 --- a/src/app/(main)/pixels/PixelProvider.tsx +++ b/src/app/(main)/pixels/PixelProvider.tsx @@ -1,9 +1,10 @@ 'use client'; import { createContext, ReactNode } from 'react'; -import { usePixelQuery } from '@/components/hooks'; import { Loading } from '@umami/react-zen'; +import { Pixel } from '@/generated/prisma/client'; +import { usePixelQuery } from '@/components/hooks/queries/usePixelQuery'; -export const PixelContext = createContext(null); +export const PixelContext = createContext(null); export function PixelProvider({ pixelId, children }: { pixelId?: string; children: ReactNode }) { const { data: pixel, isLoading, isFetching } = usePixelQuery(pixelId); diff --git a/src/app/(main)/settings/SettingsLayout.tsx b/src/app/(main)/settings/SettingsLayout.tsx index 08f5a34c..2d9ceac0 100644 --- a/src/app/(main)/settings/SettingsLayout.tsx +++ b/src/app/(main)/settings/SettingsLayout.tsx @@ -41,9 +41,9 @@ export function SettingsLayout({ children }: { children: ReactNode }) { }, ]; - const selectedKey = - items.flatMap(e => e.items)?.find(({ path }) => path && pathname.includes(path))?.id || - 'overview'; + const selectedKey = items + .flatMap(e => e.items) + .find(({ path }) => path && pathname.endsWith(path.split('?')[0]))?.id; return ( diff --git a/src/app/(main)/settings/layout.tsx b/src/app/(main)/settings/layout.tsx index fcc7392a..1d4c418b 100644 --- a/src/app/(main)/settings/layout.tsx +++ b/src/app/(main)/settings/layout.tsx @@ -2,10 +2,6 @@ import { Metadata } from 'next'; import { SettingsLayout } from './SettingsLayout'; export default function ({ children }) { - if (process.env.cloudMode) { - return null; - } - return {children}; } diff --git a/src/app/(main)/teams/TeamLeaveForm.tsx b/src/app/(main)/teams/TeamLeaveForm.tsx index 0477ee1d..f3afc69a 100644 --- a/src/app/(main)/teams/TeamLeaveForm.tsx +++ b/src/app/(main)/teams/TeamLeaveForm.tsx @@ -32,7 +32,7 @@ export function TeamLeaveForm({ {teamName}, + target: teamName, })} onConfirm={handleConfirm} onClose={onClose} diff --git a/src/app/(main)/teams/TeamProvider.tsx b/src/app/(main)/teams/TeamProvider.tsx index a0161ff0..1c139b17 100644 --- a/src/app/(main)/teams/TeamProvider.tsx +++ b/src/app/(main)/teams/TeamProvider.tsx @@ -1,9 +1,10 @@ 'use client'; import { createContext, ReactNode } from 'react'; -import { useTeamQuery } from '@/components/hooks'; import { Loading } from '@umami/react-zen'; +import { useTeamQuery } from '@/components/hooks/queries/useTeamQuery'; +import { Team } from '@/generated/prisma/client'; -export const TeamContext = createContext(null); +export const TeamContext = createContext(null); export function TeamProvider({ teamId, children }: { teamId?: string; children: ReactNode }) { const { data: team, isLoading, isFetching } = useTeamQuery(teamId); diff --git a/src/app/(main)/teams/[teamId]/TeamEditForm.tsx b/src/app/(main)/teams/[teamId]/TeamEditForm.tsx index 7be3e6a7..8444dcb8 100644 --- a/src/app/(main)/teams/[teamId]/TeamEditForm.tsx +++ b/src/app/(main)/teams/[teamId]/TeamEditForm.tsx @@ -6,7 +6,7 @@ import { TextField, Button, } from '@umami/react-zen'; -import { getRandomChars } from '@/lib/crypto'; +import { getRandomChars } from '@/lib/generate'; import { useMessages, useTeam, useUpdateQuery } from '@/components/hooks'; const generateId = () => `team_${getRandomChars(16)}`; diff --git a/src/app/(main)/teams/[teamId]/TeamSettings.tsx b/src/app/(main)/teams/[teamId]/TeamSettings.tsx index fe9647ea..578b6d32 100644 --- a/src/app/(main)/teams/[teamId]/TeamSettings.tsx +++ b/src/app/(main)/teams/[teamId]/TeamSettings.tsx @@ -13,7 +13,7 @@ import { PageHeader } from '@/components/common/PageHeader'; import { Panel } from '@/components/common/Panel'; export function TeamSettings({ teamId }: { teamId: string }) { - const team = useTeam(); + const team: any = useTeam(); const { formatMessage, labels } = useMessages(); const { user } = useLoginQuery(); const { query, pathname } = useNavigation(); diff --git a/src/app/(main)/teams/[teamId]/TeamWebsitesTable.tsx b/src/app/(main)/teams/[teamId]/TeamWebsitesTable.tsx index da97fc51..b9542eef 100644 --- a/src/app/(main)/teams/[teamId]/TeamWebsitesTable.tsx +++ b/src/app/(main)/teams/[teamId]/TeamWebsitesTable.tsx @@ -1,8 +1,19 @@ -import { DataColumn, DataTable } from '@umami/react-zen'; +import { DataColumn, DataTable, Row } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; import Link from 'next/link'; +import { ROLES } from '@/lib/constants'; +import { TeamMemberEditButton } from '@/app/(main)/teams/[teamId]/TeamMemberEditButton'; +import { TeamMemberRemoveButton } from '@/app/(main)/teams/[teamId]/TeamMemberRemoveButton'; -export function TeamWebsitesTable({ teamId, data = [] }: { teamId: string; data: any[] }) { +export function TeamWebsitesTable({ + teamId, + data = [], + allowEdit, +}: { + teamId: string; + data: any[]; + allowEdit: boolean; +}) { const { formatMessage, labels } = useMessages(); return ( @@ -14,6 +25,26 @@ export function TeamWebsitesTable({ teamId, data = [] }: { teamId: string; data: {(row: any) => row?.createUser?.username} + {allowEdit && ( + + {(row: any) => { + if (row?.role === ROLES.teamOwner) { + return null; + } + + return ( + + + + + ); + }} + + )} ); } diff --git a/src/app/(main)/websites/WebsiteProvider.tsx b/src/app/(main)/websites/WebsiteProvider.tsx index 16aa55fb..3f439550 100644 --- a/src/app/(main)/websites/WebsiteProvider.tsx +++ b/src/app/(main)/websites/WebsiteProvider.tsx @@ -1,8 +1,8 @@ 'use client'; import { createContext, ReactNode } from 'react'; -import { useWebsiteQuery } from '@/components/hooks'; import { Loading } from '@umami/react-zen'; import { Website } from '@/generated/prisma/client'; +import { useWebsiteQuery } from '@/components/hooks/queries/useWebsiteQuery'; export const WebsiteContext = createContext(null); diff --git a/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx b/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx index 78d31ade..e0d5ffb0 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx @@ -143,12 +143,12 @@ export function WebsiteNav({ websiteId }: { websiteId: string }) { }, ]; - const selectedKey = - items.flatMap(e => e.items).find(({ path }) => path && pathname.endsWith(path.split('?')[0])) - ?.id || 'overview'; + const selectedKey = items + .flatMap(e => e.items) + .find(({ path }) => path && pathname.endsWith(path.split('?')[0]))?.id; return ( - + ); diff --git a/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx b/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx index 60985a4c..41a8cfc2 100644 --- a/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx +++ b/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx @@ -1,5 +1,5 @@ import { useMemo, useState } from 'react'; -import { Select, ListItem, Grid } from '@umami/react-zen'; +import { Select, ListItem, Grid, Column } from '@umami/react-zen'; import { useEventDataPropertiesQuery, useEventDataValuesQuery, @@ -33,40 +33,41 @@ export function EventProperties({ websiteId }: { websiteId: string }) { isFetching={isFetching} error={error} minHeight="300px" - gap="6" > - {data && ( - - - - - )} - {eventName && propertyName && ( - - )} + + {data && ( + + + + + )} + {eventName && propertyName && ( + + )} + ); } diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteShareForm.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteShareForm.tsx index ef225d19..613a16fa 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteShareForm.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteShareForm.tsx @@ -10,7 +10,7 @@ import { Row, } from '@umami/react-zen'; import { useState } from 'react'; -import { getRandomChars } from '@/lib/crypto'; +import { getRandomChars } from '@/lib/generate'; import { useMessages, useUpdateQuery } from '@/components/hooks'; const generateId = () => getRandomChars(16); diff --git a/src/app/api/send/route.ts b/src/app/api/send/route.ts index 652ff4f0..31ced9c2 100644 --- a/src/app/api/send/route.ts +++ b/src/app/api/send/route.ts @@ -39,7 +39,7 @@ const schema = z.object({ url: urlOrPathParam.optional(), name: z.string().max(50).optional(), tag: z.string().max(50).optional(), - ip: z.string().ip().optional(), + ip: z.string().optional(), userAgent: z.string().optional(), timestamp: z.coerce.number().int().optional(), id: z.string().optional(), diff --git a/src/app/api/teams/route.ts b/src/app/api/teams/route.ts index b6121532..5ea1064b 100644 --- a/src/app/api/teams/route.ts +++ b/src/app/api/teams/route.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { getRandomChars } from '@/lib/crypto'; +import { getRandomChars } from '@/lib/generate'; import { unauthorized, json } from '@/lib/response'; import { canCreateTeam } from '@/validations'; import { uuid } from '@/lib/crypto'; diff --git a/src/components/common/DataGrid.tsx b/src/components/common/DataGrid.tsx index e112a410..f4c94340 100644 --- a/src/components/common/DataGrid.tsx +++ b/src/components/common/DataGrid.tsx @@ -59,7 +59,6 @@ export function DataGrid({ delay={searchDelay || DEFAULT_SEARCH_DELAY} autoFocus={autoFocus} placeholder={formatMessage(labels.search)} - style={{ width: '280px' }} /> {renderActions?.()} diff --git a/src/components/common/ErrorBoundary.module.css b/src/components/common/ErrorBoundary.module.css deleted file mode 100644 index 915022c4..00000000 --- a/src/components/common/ErrorBoundary.module.css +++ /dev/null @@ -1,19 +0,0 @@ -.error { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - margin: auto; - z-index: var(--z-index-overlay); - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - min-height: 600px; - gap: 20px; -} - -.error button { - align-self: center; -} diff --git a/src/components/common/ErrorBoundary.tsx b/src/components/common/ErrorBoundary.tsx index 92802c33..acb979ed 100644 --- a/src/components/common/ErrorBoundary.tsx +++ b/src/components/common/ErrorBoundary.tsx @@ -1,8 +1,7 @@ import { ErrorInfo, ReactNode } from 'react'; import { ErrorBoundary as Boundary } from 'react-error-boundary'; -import { Button } from '@umami/react-zen'; +import { Button, Column } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; -import styles from './ErrorBoundary.module.css'; const logError = (error: Error, info: ErrorInfo) => { // eslint-disable-next-line no-console @@ -14,12 +13,20 @@ export function ErrorBoundary({ children }: { children: ReactNode }) { const fallbackRender = ({ error, resetErrorBoundary }) => { return ( -
+

{formatMessage(messages.error)}

{error.message}

{error.stack}
-
+ ); }; diff --git a/src/components/common/SideMenu.tsx b/src/components/common/SideMenu.tsx index c92eeb56..3081a317 100644 --- a/src/components/common/SideMenu.tsx +++ b/src/components/common/SideMenu.tsx @@ -45,7 +45,7 @@ export function SideMenu({ {title} )} - + {items?.map(({ label, items }, index) => { return (

{formatMessage(messages.actionConfirmation, { - confirmation: {confirmationValue}, + confirmation: confirmationValue, })}

) { const { del, useMutation } = useApi(); diff --git a/src/components/hooks/queries/useTeamQuery.ts b/src/components/hooks/queries/useTeamQuery.ts index 497e3b36..1ba1a6ea 100644 --- a/src/components/hooks/queries/useTeamQuery.ts +++ b/src/components/hooks/queries/useTeamQuery.ts @@ -1,5 +1,5 @@ import { useApi } from '../useApi'; -import { useModified } from '@/components/hooks'; +import { useModified } from '../useModified'; import { keepPreviousData } from '@tanstack/react-query'; import { ReactQueryOptions } from '@/lib/types'; diff --git a/src/components/hooks/queries/useUserQuery.ts b/src/components/hooks/queries/useUserQuery.ts index 3b687f39..2f3a15ca 100644 --- a/src/components/hooks/queries/useUserQuery.ts +++ b/src/components/hooks/queries/useUserQuery.ts @@ -1,5 +1,5 @@ import { useApi } from '../useApi'; -import { useModified } from '@/components/hooks'; +import { useModified } from '../useModified'; import { keepPreviousData } from '@tanstack/react-query'; import { ReactQueryOptions } from '@/lib/types'; diff --git a/src/components/hooks/queries/useWebsiteCohortQuery.ts b/src/components/hooks/queries/useWebsiteCohortQuery.ts index 1f468862..50ac76b3 100644 --- a/src/components/hooks/queries/useWebsiteCohortQuery.ts +++ b/src/components/hooks/queries/useWebsiteCohortQuery.ts @@ -1,5 +1,5 @@ import { useApi } from '../useApi'; -import { useModified } from '@/components/hooks'; +import { useModified } from '../useModified'; import { keepPreviousData } from '@tanstack/react-query'; import { ReactQueryOptions } from '@/lib/types'; diff --git a/src/components/hooks/queries/useWebsiteCohortsQuery.ts b/src/components/hooks/queries/useWebsiteCohortsQuery.ts index f769df23..d1032fa2 100644 --- a/src/components/hooks/queries/useWebsiteCohortsQuery.ts +++ b/src/components/hooks/queries/useWebsiteCohortsQuery.ts @@ -1,5 +1,5 @@ import { useApi } from '../useApi'; -import { useModified } from '@/components/hooks'; +import { useModified } from '../useModified'; import { keepPreviousData } from '@tanstack/react-query'; import { ReactQueryOptions } from '@/lib/types'; import { useFilterParameters } from '@/components/hooks/useFilterParameters'; diff --git a/src/components/hooks/queries/useWebsiteQuery.ts b/src/components/hooks/queries/useWebsiteQuery.ts index a1183593..044b2bac 100644 --- a/src/components/hooks/queries/useWebsiteQuery.ts +++ b/src/components/hooks/queries/useWebsiteQuery.ts @@ -1,5 +1,5 @@ import { useApi } from '../useApi'; -import { useModified } from '@/components/hooks'; +import { useModified } from '../useModified'; import { keepPreviousData } from '@tanstack/react-query'; import { ReactQueryOptions } from '@/lib/types'; diff --git a/src/components/hooks/queries/useWebsiteSegmentQuery.ts b/src/components/hooks/queries/useWebsiteSegmentQuery.ts index 95a4eb2d..07561622 100644 --- a/src/components/hooks/queries/useWebsiteSegmentQuery.ts +++ b/src/components/hooks/queries/useWebsiteSegmentQuery.ts @@ -1,5 +1,5 @@ import { useApi } from '../useApi'; -import { useModified } from '@/components/hooks'; +import { useModified } from '../useModified'; import { keepPreviousData } from '@tanstack/react-query'; import { ReactQueryOptions } from '@/lib/types'; diff --git a/src/components/hooks/queries/useWebsiteSegmentsQuery.ts b/src/components/hooks/queries/useWebsiteSegmentsQuery.ts index 4a556822..1da72fc2 100644 --- a/src/components/hooks/queries/useWebsiteSegmentsQuery.ts +++ b/src/components/hooks/queries/useWebsiteSegmentsQuery.ts @@ -1,5 +1,5 @@ import { useApi } from '../useApi'; -import { useModified } from '@/components/hooks'; +import { useModified } from '../useModified'; import { keepPreviousData } from '@tanstack/react-query'; import { ReactQueryOptions } from '@/lib/types'; import { useFilterParameters } from '@/components/hooks/useFilterParameters'; diff --git a/src/components/hooks/useApi.ts b/src/components/hooks/useApi.ts index bd46d6c3..5b6b5482 100644 --- a/src/components/hooks/useApi.ts +++ b/src/components/hooks/useApi.ts @@ -1,5 +1,5 @@ import { useCallback } from 'react'; -import * as reactQuery from '@tanstack/react-query'; +import { useQuery, useMutation } from '@tanstack/react-query'; import { getClientAuthToken } from '@/lib/client'; import { SHARE_TOKEN_HEADER } from '@/lib/constants'; import { httpGet, httpPost, httpPut, httpDelete, FetchResponse } from '@/lib/fetch'; @@ -72,6 +72,7 @@ export function useApi() { }, [httpDelete], ), - ...reactQuery, + useQuery, + useMutation, }; } diff --git a/src/components/input/FilterEditForm.tsx b/src/components/input/FilterEditForm.tsx index 585787dc..bd8a7f86 100644 --- a/src/components/input/FilterEditForm.tsx +++ b/src/components/input/FilterEditForm.tsx @@ -19,6 +19,9 @@ export function FilterEditForm({ websiteId, onChange, onClose }: FilterEditFormP const [currentFilters, setCurrentFilters] = useState(filters); const [currentSegment, setCurrentSegment] = useState(segment); const [currentCohort, setCurrentCohort] = useState(cohort); + const panelProps = { + style: { height: 500 }, + }; const handleReset = () => { setCurrentFilters([]); @@ -48,17 +51,17 @@ export function FilterEditForm({ websiteId, onChange, onClose }: FilterEditFormP {formatMessage(labels.segments)} {formatMessage(labels.cohorts)} - + - + - + crypto.pbkdf2Sync(password, salt, 10000, 32, 'sha512'); diff --git a/src/lib/filters.ts b/src/lib/filters.ts index ec50393e..17b93ffc 100644 --- a/src/lib/filters.ts +++ b/src/lib/filters.ts @@ -1,51 +1,3 @@ -export const urlFilter = (data: any[]) => { - const map = data.reduce((obj, { x, y }) => { - if (x) { - if (!obj[x]) { - obj[x] = y; - } else { - obj[x] += y; - } - } - - return obj; - }, {}); - - return Object.keys(map).map(key => ({ x: key, y: map[key] })); -}; - -export const refFilter = (data: any[]) => { - const links = {}; - - const map = data.reduce((obj, { x, y }) => { - let id; - - try { - const url = new URL(x); - - id = url.hostname.replace(/www\./, '') || url.href; - } catch { - id = ''; - } - - links[id] = x; - - if (!obj[id]) { - obj[id] = y; - } else { - obj[id] += y; - } - - return obj; - }, {}); - - return Object.keys(map).map(key => ({ x: key, y: map[key], w: links[key] })); -}; - -export const emptyFilter = (data: any[]) => { - return data.map(item => (item.x ? item : null)).filter(n => n); -}; - export const percentFilter = (data: any[]) => { if (!data) return []; const total = data.reduce((n, { y }) => n + y, 0); diff --git a/src/lib/generate.ts b/src/lib/generate.ts new file mode 100644 index 00000000..8e25aa09 --- /dev/null +++ b/src/lib/generate.ts @@ -0,0 +1,20 @@ +import prand from 'pure-rand'; + +const seed = Date.now() ^ (Math.random() * 0x100000000); +const rng = prand.xoroshiro128plus(seed); + +export function random(min: number, max: number) { + return prand.unsafeUniformIntDistribution(min, max, rng); +} + +export function getRandomChars( + n: number, + chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', +) { + const arr = chars.split(''); + let s = ''; + for (let i = 0; i < n; i++) { + s += arr[random(0, arr.length - 1)]; + } + return s; +} diff --git a/src/queries/prisma/team.ts b/src/queries/prisma/team.ts index 290b5cf7..70750783 100644 --- a/src/queries/prisma/team.ts +++ b/src/queries/prisma/team.ts @@ -1,6 +1,6 @@ +import { uuid } from '@/lib/crypto'; import { Prisma, Team } from '@/generated/prisma/client'; import { ROLES } from '@/lib/constants'; -import { uuid } from '@/lib/crypto'; import prisma from '@/lib/prisma'; import { PageResult, QueryFilters } from '@/lib/types'; import TeamFindManyArgs = Prisma.TeamFindManyArgs; diff --git a/src/queries/prisma/teamUser.ts b/src/queries/prisma/teamUser.ts index 45024b41..3f9d9fcd 100644 --- a/src/queries/prisma/teamUser.ts +++ b/src/queries/prisma/teamUser.ts @@ -1,5 +1,5 @@ -import { Prisma, TeamUser } from '@/generated/prisma/client'; import { uuid } from '@/lib/crypto'; +import { Prisma, TeamUser } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; import { PageResult, QueryFilters } from '@/lib/types'; import TeamUserFindManyArgs = Prisma.TeamUserFindManyArgs; diff --git a/src/queries/prisma/user.ts b/src/queries/prisma/user.ts index 48640ec7..96288dd0 100644 --- a/src/queries/prisma/user.ts +++ b/src/queries/prisma/user.ts @@ -2,7 +2,7 @@ import { Prisma, User } from '@/generated/prisma/client'; import { ROLES } from '@/lib/constants'; import prisma from '@/lib/prisma'; import { PageResult, Role, QueryFilters } from '@/lib/types'; -import { getRandomChars } from '@/lib/crypto'; +import { getRandomChars } from '@/lib/generate'; import UserFindManyArgs = Prisma.UserFindManyArgs; export interface GetUserOptions { diff --git a/src/queries/sql/events/saveEvent.ts b/src/queries/sql/events/saveEvent.ts index 06376740..6cd2ce7a 100644 --- a/src/queries/sql/events/saveEvent.ts +++ b/src/queries/sql/events/saveEvent.ts @@ -1,9 +1,9 @@ +import { uuid } from '@/lib/crypto'; import { EVENT_NAME_LENGTH, URL_LENGTH, EVENT_TYPE, PAGE_TITLE_LENGTH } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import clickhouse from '@/lib/clickhouse'; import kafka from '@/lib/kafka'; import prisma from '@/lib/prisma'; -import { uuid } from '@/lib/crypto'; import { saveEventData } from './saveEventData'; import { saveRevenue } from './saveRevenue'; diff --git a/src/queries/sql/getRealtimeData.ts b/src/queries/sql/getRealtimeData.ts index 647ea5e7..b004c420 100644 --- a/src/queries/sql/getRealtimeData.ts +++ b/src/queries/sql/getRealtimeData.ts @@ -1,4 +1,6 @@ -import { getPageviewStats, getRealtimeActivity, getSessionStats } from '@/queries'; +import { getPageviewStats } from '@/queries/sql/pageviews/getPageviewStats'; +import { getRealtimeActivity } from '@/queries/sql/getRealtimeActivity'; +import { getSessionStats } from '@/queries/sql/sessions/getSessionStats'; import { QueryFilters } from '@/lib/types'; function increment(data: object, key: string) { diff --git a/tsconfig.prisma.json b/tsconfig.prisma.json index 25d5e43c..b8b0714b 100644 --- a/tsconfig.prisma.json +++ b/tsconfig.prisma.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.json", "include": ["src/generated/prisma/client.ts"], "compilerOptions": { - "outDir": "dist/generated/prisma", + "outDir": "generated/prisma", "module": "ESNext", "moduleResolution": "Node", "target": "ES2020", diff --git a/tsup.config.ts b/tsup.config.ts new file mode 100644 index 00000000..29ff733c --- /dev/null +++ b/tsup.config.ts @@ -0,0 +1,23 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig([ + { + entry: { index: 'src/index.client.ts' }, + format: ['esm'], + outDir: 'dist/client', + dts: true, + splitting: false, + sourcemap: false, + clean: true, + external: ['react', 'react-dom', 'react/jsx-runtime'], + }, + { + entry: { index: 'src/index.server.ts' }, + format: ['esm'], + outDir: 'dist/server', + dts: true, + splitting: false, + sourcemap: false, + clean: true, + }, +]);