From ebe5e7741eec93590e7015f7ba9f91fbafc3b1e2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 9 Jan 2026 14:54:02 +0000 Subject: [PATCH 01/24] Initial plan From fae347d94607767a641e30eb0a74b252de6624c3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 9 Jan 2026 15:03:32 +0000 Subject: [PATCH 02/24] Add build configuration for TypeScript sprinkle packages - Install vite-plugin-dts for generating .d.ts files - Create tsconfig.build.json for each sprinkle package - Update vite.config.ts with library mode for all sprinkles - Update package.json exports to point to dist/*.js files - Add build scripts to all packages - Update .gitignore to ignore dist directories - Remove sprinkles from skeleton optimizeDeps.exclude Co-authored-by: lcharette <2566513+lcharette@users.noreply.github.com> --- .gitignore | 3 + package-lock.json | 866 ++++++++++++++++-- package.json | 8 + packages/skeleton/vite.config.ts | 10 +- packages/sprinkle-account/package.json | 20 +- packages/sprinkle-account/tsconfig.build.json | 18 + packages/sprinkle-account/vite.config.ts | 46 +- packages/sprinkle-admin/package.json | 18 +- packages/sprinkle-admin/tsconfig.build.json | 18 + packages/sprinkle-admin/vite.config.ts | 51 +- packages/sprinkle-core/package.json | 16 +- packages/sprinkle-core/tsconfig.build.json | 18 + packages/sprinkle-core/vite.config.ts | 43 +- packages/theme-pink-cupcake/package.json | 20 +- .../theme-pink-cupcake/tsconfig.build.json | 18 + packages/theme-pink-cupcake/vite.config.ts | 71 +- 16 files changed, 1137 insertions(+), 107 deletions(-) create mode 100644 packages/sprinkle-account/tsconfig.build.json create mode 100644 packages/sprinkle-admin/tsconfig.build.json create mode 100644 packages/sprinkle-core/tsconfig.build.json create mode 100644 packages/theme-pink-cupcake/tsconfig.build.json diff --git a/.gitignore b/.gitignore index af211cb05..a5ab26c97 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ vendor/ # Ignore node modules node_modules/ +# Ignore build output +packages/*/dist/ + # Ignore compiled assets public/assets/ diff --git a/package-lock.json b/package-lock.json index 4b9476c65..3b5d7c4cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,10 @@ "packages/sprinkle-admin", "packages/theme-pink-cupcake", "packages/skeleton" - ] + ], + "devDependencies": { + "vite-plugin-dts": "^4.5.4" + } }, "node_modules/@ampproject/remapping": { "version": "2.3.0", @@ -1745,6 +1748,7 @@ "os": [ "aix" ], + "peer": true, "engines": { "node": ">=18" } @@ -1762,6 +1766,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -1779,6 +1784,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -1796,6 +1802,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -1813,6 +1820,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -1830,6 +1838,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -1847,6 +1856,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -1864,6 +1874,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -1881,6 +1892,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -1898,6 +1910,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -1915,6 +1928,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -1932,6 +1946,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -1949,6 +1964,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -1966,6 +1982,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -1983,6 +2000,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -2000,6 +2018,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -2017,6 +2036,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -2034,6 +2054,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -2051,6 +2072,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -2068,6 +2090,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -2085,6 +2108,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -2102,6 +2126,7 @@ "os": [ "openharmony" ], + "peer": true, "engines": { "node": ">=18" } @@ -2119,6 +2144,7 @@ "os": [ "sunos" ], + "peer": true, "engines": { "node": ">=18" } @@ -2136,6 +2162,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -2153,6 +2180,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -2170,6 +2198,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -2477,6 +2506,29 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -2839,6 +2891,154 @@ "dev": true, "license": "MIT" }, + "node_modules/@microsoft/api-extractor": { + "version": "7.55.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.55.2.tgz", + "integrity": "sha512-1jlWO4qmgqYoVUcyh+oXYRztZde/pAi7cSVzBz/rc+S7CoVzDasy8QE13dx6sLG4VRo8SfkkLbFORR6tBw4uGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/api-extractor-model": "7.32.2", + "@microsoft/tsdoc": "~0.16.0", + "@microsoft/tsdoc-config": "~0.18.0", + "@rushstack/node-core-library": "5.19.1", + "@rushstack/rig-package": "0.6.0", + "@rushstack/terminal": "0.19.5", + "@rushstack/ts-command-line": "5.1.5", + "diff": "~8.0.2", + "lodash": "~4.17.15", + "minimatch": "10.0.3", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "source-map": "~0.6.1", + "typescript": "5.8.2" + }, + "bin": { + "api-extractor": "bin/api-extractor" + } + }, + "node_modules/@microsoft/api-extractor-model": { + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.32.2.tgz", + "integrity": "sha512-Ussc25rAalc+4JJs9HNQE7TuO9y6jpYQX9nWD1DhqUzYPBr3Lr7O9intf+ZY8kD5HnIqeIRJX7ccCT0QyBy2Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "~0.16.0", + "@microsoft/tsdoc-config": "~0.18.0", + "@rushstack/node-core-library": "5.19.1" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz", + "integrity": "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.0.tgz", + "integrity": "sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.16.0", + "ajv": "~8.12.0", + "jju": "~1.4.0", + "resolve": "~1.22.2" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, "node_modules/@modyfi/vite-plugin-yaml": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@modyfi/vite-plugin-yaml/-/vite-plugin-yaml-1.1.1.tgz", @@ -2964,7 +3164,8 @@ "optional": true, "os": [ "android" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-android-arm64": { "version": "4.55.1", @@ -2978,7 +3179,8 @@ "optional": true, "os": [ "android" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.55.1", @@ -2992,7 +3194,8 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.55.1", @@ -3006,7 +3209,8 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-freebsd-arm64": { "version": "4.55.1", @@ -3020,7 +3224,8 @@ "optional": true, "os": [ "freebsd" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-freebsd-x64": { "version": "4.55.1", @@ -3034,7 +3239,8 @@ "optional": true, "os": [ "freebsd" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.55.1", @@ -3048,7 +3254,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.55.1", @@ -3062,7 +3269,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.55.1", @@ -3076,7 +3284,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.55.1", @@ -3090,7 +3299,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-loong64-gnu": { "version": "4.55.1", @@ -3104,7 +3314,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-loong64-musl": { "version": "4.55.1", @@ -3118,7 +3329,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { "version": "4.55.1", @@ -3132,7 +3344,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-ppc64-musl": { "version": "4.55.1", @@ -3146,7 +3359,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.55.1", @@ -3160,7 +3374,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-riscv64-musl": { "version": "4.55.1", @@ -3174,7 +3389,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.55.1", @@ -3188,7 +3404,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.55.1", @@ -3202,7 +3419,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.55.1", @@ -3216,7 +3434,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-openbsd-x64": { "version": "4.55.1", @@ -3230,7 +3449,8 @@ "optional": true, "os": [ "openbsd" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-openharmony-arm64": { "version": "4.55.1", @@ -3244,7 +3464,8 @@ "optional": true, "os": [ "openharmony" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.55.1", @@ -3255,52 +3476,284 @@ ], "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rushstack/node-core-library": { + "version": "5.19.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.19.1.tgz", + "integrity": "sha512-ESpb2Tajlatgbmzzukg6zyAhH+sICqJR2CNXNhXcEbz6UGCQfrKCtkxOpJTftWc8RGouroHG0Nud1SJAszvpmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "~8.13.0", + "ajv-draft-04": "~1.0.0", + "ajv-formats": "~3.0.1", + "fs-extra": "~11.3.0", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/node-core-library/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@rushstack/problem-matcher": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@rushstack/problem-matcher/-/problem-matcher-0.1.1.tgz", + "integrity": "sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/rig-package": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.6.0.tgz", + "integrity": "sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/@rushstack/terminal": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.19.5.tgz", + "integrity": "sha512-6k5tpdB88G0K7QrH/3yfKO84HK9ggftfUZ51p7fePyCE7+RLLHkWZbID9OFWbXuna+eeCFE7AkKnRMHMxNbz7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rushstack/node-core-library": "5.19.1", + "@rushstack/problem-matcher": "0.1.1", + "supports-color": "~8.1.1" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/terminal/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", - "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", - "cpu": [ - "ia32" - ], + "node_modules/@rushstack/terminal/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", - "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", - "cpu": [ - "x64" - ], + "node_modules/@rushstack/ts-command-line": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.1.5.tgz", + "integrity": "sha512-YmrFTFUdHXblYSa+Xc9OO9FsL/XFcckZy0ycQ6q7VSBsVs5P0uD9vcges5Q9vctGlVdu27w+Ct6IuJ458V0cTQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@rushstack/terminal": "0.19.5", + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "string-argv": "~0.3.1" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", - "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", - "cpu": [ - "x64" - ], + "node_modules/@rushstack/ts-command-line/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "sprintf-js": "~1.0.2" + } }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", @@ -3513,6 +3966,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/body-parser": { "version": "1.19.6", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", @@ -5685,6 +6145,13 @@ "node": ">=14" } }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "dev": true, + "license": "MIT" + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -5741,6 +6208,13 @@ "dev": true, "license": "MIT" }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true, + "license": "MIT" + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -6313,6 +6787,16 @@ "dev": true, "license": "MIT" }, + "node_modules/diff": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz", + "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -6587,6 +7071,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "prr": "~1.0.1" }, @@ -7168,6 +7653,13 @@ "dev": true, "license": "MIT" }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -8132,6 +8624,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -8169,6 +8662,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "bin": { "image-size": "bin/image-size.js" }, @@ -8193,6 +8687,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/import-local": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", @@ -8285,7 +8789,6 @@ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "hasown": "^2.0.2" }, @@ -8764,6 +9267,13 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true, + "license": "MIT" + }, "node_modules/js-beautify": { "version": "1.15.4", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz", @@ -8975,6 +9485,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -8990,6 +9501,7 @@ "dev": true, "license": "ISC", "optional": true, + "peer": true, "bin": { "semver": "bin/semver" } @@ -9074,6 +9586,24 @@ "node": ">=8.9.0" } }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -9389,6 +9919,38 @@ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "license": "MIT" }, + "node_modules/mlly": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -9459,6 +10021,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "iconv-lite": "^0.6.3", "sax": "^1.2.4" @@ -9946,8 +10509,7 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", @@ -10052,6 +10614,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">=6" } @@ -10174,6 +10737,18 @@ "node": ">=8" } }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -10827,7 +11402,8 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true, "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/punycode": { "version": "2.3.1", @@ -10855,6 +11431,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -11101,7 +11694,6 @@ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", @@ -11795,6 +12387,13 @@ "node": ">=0.10.0" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -11836,6 +12435,16 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -12091,7 +12700,6 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" }, @@ -12785,6 +13393,13 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/ufo": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.2.tgz", + "integrity": "sha512-heMioaxBcG9+Znsda5Q8sQbWnLJSl98AFDXTO80wELWEzX3hordXsTdxrIfMQoO9IY1MEnoGoPjpoKpMj+Yx0Q==", + "dev": true, + "license": "MIT" + }, "node_modules/uikit": { "version": "3.25.4", "resolved": "https://registry.npmjs.org/uikit/-/uikit-3.25.4.tgz", @@ -13079,6 +13694,127 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vite-plugin-dts": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-4.5.4.tgz", + "integrity": "sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/api-extractor": "^7.50.1", + "@rollup/pluginutils": "^5.1.4", + "@volar/typescript": "^2.4.11", + "@vue/language-core": "2.2.0", + "compare-versions": "^6.1.1", + "debug": "^4.4.0", + "kolorist": "^1.8.0", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17" + }, + "peerDependencies": { + "typescript": "*", + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vite-plugin-dts/node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/vite-plugin-dts/node_modules/@vue/language-core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", + "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "~2.4.11", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^0.4.9", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vite-plugin-dts/node_modules/alien-signals": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz", + "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite-plugin-dts/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/vite-plugin-dts/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/vite-plugin-dts/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/vite-plugin-inspect": { "version": "0.8.9", "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", diff --git a/package.json b/package.json index 66f9b01ba..cfb1dcd01 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,19 @@ "packages/skeleton" ], "scripts": { + "build": "npm run build --workspace=packages/sprinkle-core --workspace=packages/sprinkle-account --workspace=packages/sprinkle-admin --workspace=packages/theme-pink-cupcake", + "build:core": "npm run build --workspace=packages/sprinkle-core", + "build:account": "npm run build --workspace=packages/sprinkle-account", + "build:admin": "npm run build --workspace=packages/sprinkle-admin", + "build:theme": "npm run build --workspace=packages/theme-pink-cupcake", "test": "vitest", "coverage": "vitest run --coverage", "typecheck": "vue-tsc --noEmit", "format": "prettier --write packages/skeleton/app/assets/ packages/sprinkle-*/app/assets packages/theme-pink-cupcake/src", "format-dry-run": "prettier --check packages/skeleton/app/assets/ packages/sprinkle-*/app/assets packages/theme-pink-cupcake/src", "lint": "eslint packages/skeleton/app/assets/ packages/sprinkle-*/app/assets packages/theme-pink-cupcake/src --fix" + }, + "devDependencies": { + "vite-plugin-dts": "^4.5.4" } } diff --git a/packages/skeleton/vite.config.ts b/packages/skeleton/vite.config.ts index 74b0fe12a..d84e91e29 100644 --- a/packages/skeleton/vite.config.ts +++ b/packages/skeleton/vite.config.ts @@ -46,15 +46,7 @@ export default defineConfig({ // Force optimization of UiKit (not module packages) in dev mode // to avoid the error: // "importing binding name 'default' cannot be resolved by star export entries" - // Also, treat all sprinkles as source code (not prebuilt) and tell Vite - // not to prebundle them. optimizeDeps: { - include: ['uikit', 'uikit/dist/js/uikit-icons'], - exclude: [ - '@userfrosting/sprinkle-core', - '@userfrosting/sprinkle-account', - '@userfrosting/sprinkle-admin', - '@userfrosting/theme-pink-cupcake' - ] + include: ['uikit', 'uikit/dist/js/uikit-icons'] } }) diff --git a/packages/sprinkle-account/package.json b/packages/sprinkle-account/package.json index a3232ce8c..55db1d388 100644 --- a/packages/sprinkle-account/package.json +++ b/packages/sprinkle-account/package.json @@ -24,16 +24,17 @@ "url": "https://github.com/userfrosting/UserFrosting/issues" }, "exports": { - ".": "./app/assets/index.ts", - "./composables": "./app/assets/composables/index.ts", - "./guards": "./app/assets/guards/index.ts", - "./interfaces": "./app/assets/interfaces/index.ts", - "./routes": "./app/assets/routes/index.ts", - "./stores": "./app/assets/stores/index.ts", - "./views": "./app/assets/views/index.ts" + ".": "./dist/index.js", + "./composables": "./dist/composables/index.js", + "./guards": "./dist/guards/index.js", + "./interfaces": "./dist/interfaces/index.js", + "./routes": "./dist/routes/index.js", + "./stores": "./dist/stores/index.js", + "./views": "./dist/views/index.js" }, + "types": "./dist/index.d.ts", "files": [ - "app/assets/", + "dist/", "app/schema/" ], "engines": { @@ -46,5 +47,8 @@ "pinia-plugin-persistedstate": "^3.2.0", "vue": "^3.4.21", "vue-router": "^4.2.4" + }, + "scripts": { + "build": "vite build" } } diff --git a/packages/sprinkle-account/tsconfig.build.json b/packages/sprinkle-account/tsconfig.build.json new file mode 100644 index 000000000..009366e9f --- /dev/null +++ b/packages/sprinkle-account/tsconfig.build.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": false, + "outDir": "dist", + "rootDir": "app/assets" + }, + "include": [ + "app/assets/**/*.ts", + "app/assets/**/*.d.ts", + "app/assets/**/*.vue" + ], + "exclude": [ + "app/assets/tests/**/*" + ] +} diff --git a/packages/sprinkle-account/vite.config.ts b/packages/sprinkle-account/vite.config.ts index f573c4180..808a9857c 100644 --- a/packages/sprinkle-account/vite.config.ts +++ b/packages/sprinkle-account/vite.config.ts @@ -1,13 +1,57 @@ /// import { configDefaults } from 'vitest/config' import { defineConfig } from 'vite' +import { resolve } from 'path' import vue from '@vitejs/plugin-vue' import ViteYaml from '@modyfi/vite-plugin-yaml' +import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ // https://stackoverflow.com/a/74397545/445757 export default defineConfig({ - plugins: [vue(), ViteYaml()], + plugins: [ + vue(), + ViteYaml(), + dts({ + include: ['app/assets/**/*.ts', 'app/assets/**/*.vue'], + exclude: ['app/assets/tests/**/*'], + outDir: 'dist', + copyDtsFiles: true, + rollupTypes: false + }) + ], + build: { + lib: { + entry: { + index: resolve(__dirname, 'app/assets/index.ts'), + composables: resolve(__dirname, 'app/assets/composables/index.ts'), + guards: resolve(__dirname, 'app/assets/guards/index.ts'), + interfaces: resolve(__dirname, 'app/assets/interfaces/index.ts'), + routes: resolve(__dirname, 'app/assets/routes/index.ts'), + stores: resolve(__dirname, 'app/assets/stores/index.ts'), + views: resolve(__dirname, 'app/assets/views/index.ts') + }, + formats: ['es'] + }, + rollupOptions: { + external: [ + 'vue', + 'vue-router', + 'axios', + 'pinia', + 'pinia-plugin-persistedstate', + '@userfrosting/sprinkle-core', + '@userfrosting/sprinkle-core/composables', + '@userfrosting/sprinkle-core/interfaces', + '@userfrosting/sprinkle-core/stores' + ], + output: { + preserveModules: true, + preserveModulesRoot: 'app/assets', + entryFileNames: '[name].js' + } + } + }, test: { coverage: { reportsDirectory: './_meta/_coverage', diff --git a/packages/sprinkle-admin/package.json b/packages/sprinkle-admin/package.json index c9dd5fd97..48d6522ef 100644 --- a/packages/sprinkle-admin/package.json +++ b/packages/sprinkle-admin/package.json @@ -25,15 +25,16 @@ "url": "https://github.com/userfrosting/UserFrosting/issues" }, "exports": { - ".": "./app/assets/index.ts", - "./components": "./app/assets/components/index.ts", - "./composables": "./app/assets/composables/index.ts", - "./interfaces": "./app/assets/interfaces/index.ts", - "./routes": "./app/assets/routes/index.ts", - "./views": "./app/assets/views/index.ts" + ".": "./dist/index.js", + "./components": "./dist/components/index.js", + "./composables": "./dist/composables/index.js", + "./interfaces": "./dist/interfaces/index.js", + "./routes": "./dist/routes/index.js", + "./views": "./dist/views/index.js" }, + "types": "./dist/index.d.ts", "files": [ - "app/assets", + "dist/", "app/schema/" ], "engines": { @@ -48,5 +49,8 @@ "pinia-plugin-persistedstate": "^3.2.0", "vue": "^3.4.21", "vue-router": "^4.2.4" + }, + "scripts": { + "build": "vite build" } } diff --git a/packages/sprinkle-admin/tsconfig.build.json b/packages/sprinkle-admin/tsconfig.build.json new file mode 100644 index 000000000..009366e9f --- /dev/null +++ b/packages/sprinkle-admin/tsconfig.build.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": false, + "outDir": "dist", + "rootDir": "app/assets" + }, + "include": [ + "app/assets/**/*.ts", + "app/assets/**/*.d.ts", + "app/assets/**/*.vue" + ], + "exclude": [ + "app/assets/tests/**/*" + ] +} diff --git a/packages/sprinkle-admin/vite.config.ts b/packages/sprinkle-admin/vite.config.ts index 97d563656..89caef84c 100644 --- a/packages/sprinkle-admin/vite.config.ts +++ b/packages/sprinkle-admin/vite.config.ts @@ -1,13 +1,62 @@ /// import { configDefaults } from 'vitest/config' import { defineConfig } from 'vite' +import { resolve } from 'path' import vue from '@vitejs/plugin-vue' import ViteYaml from '@modyfi/vite-plugin-yaml' +import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ // https://stackoverflow.com/a/74397545/445757 export default defineConfig({ - plugins: [vue(), ViteYaml()], + plugins: [ + vue(), + ViteYaml(), + dts({ + include: ['app/assets/**/*.ts', 'app/assets/**/*.vue'], + exclude: ['app/assets/tests/**/*'], + outDir: 'dist', + copyDtsFiles: true, + rollupTypes: false + }) + ], + build: { + lib: { + entry: { + index: resolve(__dirname, 'app/assets/index.ts'), + components: resolve(__dirname, 'app/assets/components/index.ts'), + composables: resolve(__dirname, 'app/assets/composables/index.ts'), + interfaces: resolve(__dirname, 'app/assets/interfaces/index.ts'), + routes: resolve(__dirname, 'app/assets/routes/index.ts'), + views: resolve(__dirname, 'app/assets/views/index.ts') + }, + formats: ['es'] + }, + rollupOptions: { + external: [ + 'vue', + 'vue-router', + 'axios', + 'pinia', + 'pinia-plugin-persistedstate', + 'limax', + '@userfrosting/sprinkle-core', + '@userfrosting/sprinkle-core/composables', + '@userfrosting/sprinkle-core/interfaces', + '@userfrosting/sprinkle-core/stores', + '@userfrosting/sprinkle-account', + '@userfrosting/sprinkle-account/composables', + '@userfrosting/sprinkle-account/guards', + '@userfrosting/sprinkle-account/interfaces', + '@userfrosting/sprinkle-account/stores' + ], + output: { + preserveModules: true, + preserveModulesRoot: 'app/assets', + entryFileNames: '[name].js' + } + } + }, test: { coverage: { reportsDirectory: './_meta/_coverage', diff --git a/packages/sprinkle-core/package.json b/packages/sprinkle-core/package.json index 473d6be3a..6b43c4b22 100644 --- a/packages/sprinkle-core/package.json +++ b/packages/sprinkle-core/package.json @@ -24,14 +24,15 @@ "url": "https://github.com/userfrosting/UserFrosting/issues" }, "exports": { - ".": "./app/assets/index.ts", - "./interfaces": "./app/assets/interfaces/index.ts", - "./stores": "./app/assets/stores/index.ts", - "./composables": "./app/assets/composables/index.ts", - "./routes": "./app/assets/routes/index.ts" + ".": "./dist/index.js", + "./interfaces": "./dist/interfaces/index.js", + "./stores": "./dist/stores/index.js", + "./composables": "./dist/composables/index.js", + "./routes": "./dist/routes/index.js" }, + "types": "./dist/index.d.ts", "files": [ - "app/assets/" + "dist/" ], "engines": { "node": ">= 18" @@ -47,5 +48,8 @@ "pinia": "^2.1.6", "pinia-plugin-persistedstate": "^3.2.0", "vue": "^3.4.21" + }, + "scripts": { + "build": "vite build" } } diff --git a/packages/sprinkle-core/tsconfig.build.json b/packages/sprinkle-core/tsconfig.build.json new file mode 100644 index 000000000..009366e9f --- /dev/null +++ b/packages/sprinkle-core/tsconfig.build.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": false, + "outDir": "dist", + "rootDir": "app/assets" + }, + "include": [ + "app/assets/**/*.ts", + "app/assets/**/*.d.ts", + "app/assets/**/*.vue" + ], + "exclude": [ + "app/assets/tests/**/*" + ] +} diff --git a/packages/sprinkle-core/vite.config.ts b/packages/sprinkle-core/vite.config.ts index eea2fc61c..172e00ab8 100644 --- a/packages/sprinkle-core/vite.config.ts +++ b/packages/sprinkle-core/vite.config.ts @@ -1,11 +1,52 @@ /// import { defineConfig } from 'vite' +import { resolve } from 'path' import vue from '@vitejs/plugin-vue' +import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ // https://stackoverflow.com/a/74397545/445757 export default defineConfig({ - plugins: [vue()], + plugins: [ + vue(), + dts({ + include: ['app/assets/**/*.ts', 'app/assets/**/*.vue'], + exclude: ['app/assets/tests/**/*'], + outDir: 'dist', + copyDtsFiles: true, + rollupTypes: false + }) + ], + build: { + lib: { + entry: { + index: resolve(__dirname, 'app/assets/index.ts'), + interfaces: resolve(__dirname, 'app/assets/interfaces/index.ts'), + stores: resolve(__dirname, 'app/assets/stores/index.ts'), + composables: resolve(__dirname, 'app/assets/composables/index.ts'), + routes: resolve(__dirname, 'app/assets/routes/index.ts') + }, + formats: ['es'] + }, + rollupOptions: { + external: [ + 'vue', + 'axios', + 'pinia', + 'pinia-plugin-persistedstate', + '@regle/core', + '@regle/rules', + 'dot-prop', + 'luxon', + /^@userfrosting\/sprinkle-core/ + ], + output: { + preserveModules: true, + preserveModulesRoot: 'app/assets', + entryFileNames: '[name].js' + } + } + }, test: { coverage: { reportsDirectory: './_meta/_coverage', diff --git a/packages/theme-pink-cupcake/package.json b/packages/theme-pink-cupcake/package.json index a1ed4bf20..af9b6a0a5 100644 --- a/packages/theme-pink-cupcake/package.json +++ b/packages/theme-pink-cupcake/package.json @@ -24,16 +24,17 @@ "url": "https://github.com/userfrosting/UserFrosting/issues" }, "exports": { - ".": "./src/index.ts", - "./components/pages/account": "./src/components/Pages/Account/index.ts", - "./components/pages/admin": "./src/components/Pages/Admin/index.ts", - "./components": "./src/components/index.ts", - "./plugins": "./src/plugins/index.ts", - "./views": "./src/views/index.ts", - "./less/*": "./src/less/*" + ".": "./dist/index.js", + "./components/pages/account": "./dist/components/pages/account.js", + "./components/pages/admin": "./dist/components/pages/admin.js", + "./components": "./dist/components.js", + "./plugins": "./dist/plugins.js", + "./views": "./dist/views.js", + "./less/*": "./dist/less/*" }, + "types": "./dist/index.d.ts", "files": [ - "src/" + "dist/" ], "engines": { "node": ">= 18" @@ -58,5 +59,8 @@ "pinia-plugin-persistedstate": "^3.2.0", "vue": "^3.4.21", "vue-router": "^4.2.4" + }, + "scripts": { + "build": "vite build" } } diff --git a/packages/theme-pink-cupcake/tsconfig.build.json b/packages/theme-pink-cupcake/tsconfig.build.json new file mode 100644 index 000000000..3b2e76185 --- /dev/null +++ b/packages/theme-pink-cupcake/tsconfig.build.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": false, + "outDir": "dist", + "rootDir": "src" + }, + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.vue" + ], + "exclude": [ + "src/tests/**/*" + ] +} diff --git a/packages/theme-pink-cupcake/vite.config.ts b/packages/theme-pink-cupcake/vite.config.ts index 477884de3..e39d1c008 100644 --- a/packages/theme-pink-cupcake/vite.config.ts +++ b/packages/theme-pink-cupcake/vite.config.ts @@ -1,12 +1,24 @@ /// import { defineConfig } from 'vite' +import { resolve } from 'path' import vue from '@vitejs/plugin-vue' import ViteYaml from '@modyfi/vite-plugin-yaml' +import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ // https://stackoverflow.com/a/74397545/445757 export default defineConfig({ - plugins: [vue(), ViteYaml()], + plugins: [ + vue(), + ViteYaml(), + dts({ + include: ['src/**/*.ts', 'src/**/*.vue'], + exclude: ['src/tests/**/*'], + outDir: 'dist', + copyDtsFiles: true, + rollupTypes: false + }) + ], // Add UIKit alias : https://stackoverflow.com/a/75264118/445757 resolve: { alias: { @@ -15,6 +27,63 @@ export default defineConfig({ '../../images/icons': 'uikit/src/images/icons' } }, + build: { + lib: { + entry: { + index: resolve(__dirname, 'src/index.ts'), + 'components/pages/account': resolve(__dirname, 'src/components/Pages/Account/index.ts'), + 'components/pages/admin': resolve(__dirname, 'src/components/Pages/Admin/index.ts'), + components: resolve(__dirname, 'src/components/index.ts'), + plugins: resolve(__dirname, 'src/plugins/index.ts'), + views: resolve(__dirname, 'src/views/index.ts') + }, + formats: ['es'] + }, + rollupOptions: { + external: [ + 'vue', + 'vue-router', + 'axios', + 'pinia', + 'pinia-plugin-persistedstate', + 'uikit', + 'uikit/dist/js/uikit-icons', + '@fontsource/montserrat', + '@fontsource/mulish', + '@fortawesome/fontawesome-free', + '@fortawesome/fontawesome-svg-core', + '@fortawesome/free-brands-svg-icons', + '@fortawesome/free-regular-svg-icons', + '@fortawesome/free-solid-svg-icons', + '@fortawesome/vue-fontawesome', + '@userfrosting/sprinkle-core', + '@userfrosting/sprinkle-core/composables', + '@userfrosting/sprinkle-core/interfaces', + '@userfrosting/sprinkle-core/stores', + '@userfrosting/sprinkle-account', + '@userfrosting/sprinkle-account/composables', + '@userfrosting/sprinkle-account/guards', + '@userfrosting/sprinkle-account/interfaces', + '@userfrosting/sprinkle-account/stores', + '@userfrosting/sprinkle-admin', + '@userfrosting/sprinkle-admin/components', + '@userfrosting/sprinkle-admin/composables', + '@userfrosting/sprinkle-admin/interfaces' + ], + output: { + preserveModules: true, + preserveModulesRoot: 'src', + entryFileNames: '[name].js', + assetFileNames: (assetInfo) => { + // Keep LESS files in their original location + if (assetInfo.name?.endsWith('.less')) { + return 'less/[name][extname]' + } + return 'assets/[name][extname]' + } + } + } + }, test: { coverage: { reportsDirectory: './_meta/_coverage', From 42337fee34d08df195bea5976f86b4247542eb50 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 9 Jan 2026 15:08:57 +0000 Subject: [PATCH 03/24] Add conditional exports to support both monorepo dev and published builds - Add "development" condition to exports that points to source TS files - Keep "import" condition for dist/*.js for published use - Update skeleton vite config to resolve development condition - Include both src and dist in package files for dual usage - Restore optimizeDeps.exclude for monorepo development HMR Co-authored-by: lcharette <2566513+lcharette@users.noreply.github.com> --- packages/skeleton/vite.config.ts | 13 ++++++- packages/sprinkle-account/package.json | 43 ++++++++++++++++++---- packages/sprinkle-account/vite.config.ts | 3 +- packages/sprinkle-admin/package.json | 37 ++++++++++++++++--- packages/sprinkle-admin/vite.config.ts | 3 +- packages/sprinkle-core/package.json | 31 +++++++++++++--- packages/sprinkle-core/vite.config.ts | 3 +- packages/theme-pink-cupcake/package.json | 39 ++++++++++++++++---- packages/theme-pink-cupcake/vite.config.ts | 3 +- 9 files changed, 141 insertions(+), 34 deletions(-) diff --git a/packages/skeleton/vite.config.ts b/packages/skeleton/vite.config.ts index d84e91e29..8a3bdb82c 100644 --- a/packages/skeleton/vite.config.ts +++ b/packages/skeleton/vite.config.ts @@ -15,6 +15,9 @@ export default defineConfig({ appendTo: 'app/assets/main.ts' }) ], + resolve: { + conditions: ['development', 'import'] + }, server: { host: true, // Allows external access (needed for Docker) strictPort: true, @@ -46,7 +49,15 @@ export default defineConfig({ // Force optimization of UiKit (not module packages) in dev mode // to avoid the error: // "importing binding name 'default' cannot be resolved by star export entries" + // Sprinkle packages are pre-built but during monorepo development we + // still treat them as source code to enable hot module reload optimizeDeps: { - include: ['uikit', 'uikit/dist/js/uikit-icons'] + include: ['uikit', 'uikit/dist/js/uikit-icons'], + exclude: [ + '@userfrosting/sprinkle-core', + '@userfrosting/sprinkle-account', + '@userfrosting/sprinkle-admin', + '@userfrosting/theme-pink-cupcake' + ] } }) diff --git a/packages/sprinkle-account/package.json b/packages/sprinkle-account/package.json index 55db1d388..061702bf0 100644 --- a/packages/sprinkle-account/package.json +++ b/packages/sprinkle-account/package.json @@ -24,16 +24,45 @@ "url": "https://github.com/userfrosting/UserFrosting/issues" }, "exports": { - ".": "./dist/index.js", - "./composables": "./dist/composables/index.js", - "./guards": "./dist/guards/index.js", - "./interfaces": "./dist/interfaces/index.js", - "./routes": "./dist/routes/index.js", - "./stores": "./dist/stores/index.js", - "./views": "./dist/views/index.js" + ".": { + "development": "./app/assets/index.ts", + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./composables": { + "development": "./app/assets/composables/index.ts", + "import": "./dist/composables/index.js", + "types": "./dist/composables/index.d.ts" + }, + "./guards": { + "development": "./app/assets/guards/index.ts", + "import": "./dist/guards/index.js", + "types": "./dist/guards/index.d.ts" + }, + "./interfaces": { + "development": "./app/assets/interfaces/index.ts", + "import": "./dist/interfaces/index.js", + "types": "./dist/interfaces/index.d.ts" + }, + "./routes": { + "development": "./app/assets/routes/index.ts", + "import": "./dist/routes/index.js", + "types": "./dist/routes/index.d.ts" + }, + "./stores": { + "development": "./app/assets/stores/index.ts", + "import": "./dist/stores/index.js", + "types": "./dist/stores/index.d.ts" + }, + "./views": { + "development": "./app/assets/views/index.ts", + "import": "./dist/views/index.js", + "types": "./dist/views/index.d.ts" + } }, "types": "./dist/index.d.ts", "files": [ + "app/assets/", "dist/", "app/schema/" ], diff --git a/packages/sprinkle-account/vite.config.ts b/packages/sprinkle-account/vite.config.ts index 808a9857c..0e30a9bd1 100644 --- a/packages/sprinkle-account/vite.config.ts +++ b/packages/sprinkle-account/vite.config.ts @@ -46,8 +46,7 @@ export default defineConfig({ '@userfrosting/sprinkle-core/stores' ], output: { - preserveModules: true, - preserveModulesRoot: 'app/assets', + preserveModules: false, entryFileNames: '[name].js' } } diff --git a/packages/sprinkle-admin/package.json b/packages/sprinkle-admin/package.json index 48d6522ef..d2ca76d0a 100644 --- a/packages/sprinkle-admin/package.json +++ b/packages/sprinkle-admin/package.json @@ -25,15 +25,40 @@ "url": "https://github.com/userfrosting/UserFrosting/issues" }, "exports": { - ".": "./dist/index.js", - "./components": "./dist/components/index.js", - "./composables": "./dist/composables/index.js", - "./interfaces": "./dist/interfaces/index.js", - "./routes": "./dist/routes/index.js", - "./views": "./dist/views/index.js" + ".": { + "development": "./app/assets/index.ts", + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./components": { + "development": "./app/assets/components/index.ts", + "import": "./dist/components/index.js", + "types": "./dist/components/index.d.ts" + }, + "./composables": { + "development": "./app/assets/composables/index.ts", + "import": "./dist/composables/index.js", + "types": "./dist/composables/index.d.ts" + }, + "./interfaces": { + "development": "./app/assets/interfaces/index.ts", + "import": "./dist/interfaces/index.js", + "types": "./dist/interfaces/index.d.ts" + }, + "./routes": { + "development": "./app/assets/routes/index.ts", + "import": "./dist/routes/index.js", + "types": "./dist/routes/index.d.ts" + }, + "./views": { + "development": "./app/assets/views/index.ts", + "import": "./dist/views/index.js", + "types": "./dist/views/index.d.ts" + } }, "types": "./dist/index.d.ts", "files": [ + "app/assets/", "dist/", "app/schema/" ], diff --git a/packages/sprinkle-admin/vite.config.ts b/packages/sprinkle-admin/vite.config.ts index 89caef84c..27a0c8eca 100644 --- a/packages/sprinkle-admin/vite.config.ts +++ b/packages/sprinkle-admin/vite.config.ts @@ -51,8 +51,7 @@ export default defineConfig({ '@userfrosting/sprinkle-account/stores' ], output: { - preserveModules: true, - preserveModulesRoot: 'app/assets', + preserveModules: false, entryFileNames: '[name].js' } } diff --git a/packages/sprinkle-core/package.json b/packages/sprinkle-core/package.json index 6b43c4b22..78b6a10bf 100644 --- a/packages/sprinkle-core/package.json +++ b/packages/sprinkle-core/package.json @@ -24,14 +24,35 @@ "url": "https://github.com/userfrosting/UserFrosting/issues" }, "exports": { - ".": "./dist/index.js", - "./interfaces": "./dist/interfaces/index.js", - "./stores": "./dist/stores/index.js", - "./composables": "./dist/composables/index.js", - "./routes": "./dist/routes/index.js" + ".": { + "development": "./app/assets/index.ts", + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./interfaces": { + "development": "./app/assets/interfaces/index.ts", + "import": "./dist/interfaces/index.js", + "types": "./dist/interfaces/index.d.ts" + }, + "./stores": { + "development": "./app/assets/stores/index.ts", + "import": "./dist/stores/index.js", + "types": "./dist/stores/index.d.ts" + }, + "./composables": { + "development": "./app/assets/composables/index.ts", + "import": "./dist/composables/index.js", + "types": "./dist/composables/index.d.ts" + }, + "./routes": { + "development": "./app/assets/routes/index.ts", + "import": "./dist/routes/index.js", + "types": "./dist/routes/index.d.ts" + } }, "types": "./dist/index.d.ts", "files": [ + "app/assets/", "dist/" ], "engines": { diff --git a/packages/sprinkle-core/vite.config.ts b/packages/sprinkle-core/vite.config.ts index 172e00ab8..39a66c05a 100644 --- a/packages/sprinkle-core/vite.config.ts +++ b/packages/sprinkle-core/vite.config.ts @@ -41,8 +41,7 @@ export default defineConfig({ /^@userfrosting\/sprinkle-core/ ], output: { - preserveModules: true, - preserveModulesRoot: 'app/assets', + preserveModules: false, entryFileNames: '[name].js' } } diff --git a/packages/theme-pink-cupcake/package.json b/packages/theme-pink-cupcake/package.json index af9b6a0a5..404a1f6b3 100644 --- a/packages/theme-pink-cupcake/package.json +++ b/packages/theme-pink-cupcake/package.json @@ -24,16 +24,41 @@ "url": "https://github.com/userfrosting/UserFrosting/issues" }, "exports": { - ".": "./dist/index.js", - "./components/pages/account": "./dist/components/pages/account.js", - "./components/pages/admin": "./dist/components/pages/admin.js", - "./components": "./dist/components.js", - "./plugins": "./dist/plugins.js", - "./views": "./dist/views.js", - "./less/*": "./dist/less/*" + ".": { + "development": "./src/index.ts", + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./components/pages/account": { + "development": "./src/components/Pages/Account/index.ts", + "import": "./dist/components/pages/account.js", + "types": "./dist/components/Pages/Account/index.d.ts" + }, + "./components/pages/admin": { + "development": "./src/components/Pages/Admin/index.ts", + "import": "./dist/components/pages/admin.js", + "types": "./dist/components/Pages/Admin/index.d.ts" + }, + "./components": { + "development": "./src/components/index.ts", + "import": "./dist/components.js", + "types": "./dist/components/index.d.ts" + }, + "./plugins": { + "development": "./src/plugins/index.ts", + "import": "./dist/plugins.js", + "types": "./dist/plugins/index.d.ts" + }, + "./views": { + "development": "./src/views/index.ts", + "import": "./dist/views.js", + "types": "./dist/views/index.d.ts" + }, + "./less/*": "./src/less/*" }, "types": "./dist/index.d.ts", "files": [ + "src/", "dist/" ], "engines": { diff --git a/packages/theme-pink-cupcake/vite.config.ts b/packages/theme-pink-cupcake/vite.config.ts index e39d1c008..74e973cc3 100644 --- a/packages/theme-pink-cupcake/vite.config.ts +++ b/packages/theme-pink-cupcake/vite.config.ts @@ -71,8 +71,7 @@ export default defineConfig({ '@userfrosting/sprinkle-admin/interfaces' ], output: { - preserveModules: true, - preserveModulesRoot: 'src', + preserveModules: false, entryFileNames: '[name].js', assetFileNames: (assetInfo) => { // Keep LESS files in their original location From ad696a1ed21c7642b1bb14b5912d552550cd843e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 9 Jan 2026 17:06:18 +0000 Subject: [PATCH 04/24] Move development condition to monorepo detection logic Instead of always using 'development' condition in skeleton's vite config, detect if we're in a monorepo context and only apply the condition then. This allows skeleton to be used standalone with published npm packages. Co-authored-by: lcharette <2566513+lcharette@users.noreply.github.com> --- packages/skeleton/vite.config.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/skeleton/vite.config.ts b/packages/skeleton/vite.config.ts index 8a3bdb82c..47f161ebf 100644 --- a/packages/skeleton/vite.config.ts +++ b/packages/skeleton/vite.config.ts @@ -2,10 +2,16 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import vueDevTools from 'vite-plugin-vue-devtools' import ViteYaml from '@modyfi/vite-plugin-yaml' +import { existsSync } from 'fs' +import { resolve } from 'path' // Get vite port from env, default to 3000 const vitePort = parseInt(process.env.VITE_PORT || '5173', 10) +// Detect if we're in a monorepo by checking for workspace root +const isMonorepo = existsSync(resolve(__dirname, '../../package.json')) && + existsSync(resolve(__dirname, '../../packages')) + // https://vitejs.dev/config/ export default defineConfig({ plugins: [ @@ -15,9 +21,11 @@ export default defineConfig({ appendTo: 'app/assets/main.ts' }) ], - resolve: { + // In monorepo, use 'development' condition to resolve to source TS files for HMR + // In standalone usage, use 'import' to resolve to published dist files + resolve: isMonorepo ? { conditions: ['development', 'import'] - }, + } : undefined, server: { host: true, // Allows external access (needed for Docker) strictPort: true, From 92e2dd985d8101019ea17ab3644ecc2ef972936a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 9 Jan 2026 17:48:29 +0000 Subject: [PATCH 05/24] Create monorepo vite config and remove optimizeDeps from skeleton - Created root-level vite.config.ts for monorepo development - Moved resolve.conditions and optimizeDeps to monorepo config - Removed monorepo-specific settings from skeleton's vite.config.ts - Added 'npm run dev' script to use monorepo vite config - Skeleton now has clean config suitable for standalone use Co-authored-by: lcharette <2566513+lcharette@users.noreply.github.com> --- package.json | 1 + packages/skeleton/vite.config.ts | 23 +----------- vite.config.ts | 64 ++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 21 deletions(-) create mode 100644 vite.config.ts diff --git a/package.json b/package.json index cfb1dcd01..3a6a4e764 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "packages/skeleton" ], "scripts": { + "dev": "vite", "build": "npm run build --workspace=packages/sprinkle-core --workspace=packages/sprinkle-account --workspace=packages/sprinkle-admin --workspace=packages/theme-pink-cupcake", "build:core": "npm run build --workspace=packages/sprinkle-core", "build:account": "npm run build --workspace=packages/sprinkle-account", diff --git a/packages/skeleton/vite.config.ts b/packages/skeleton/vite.config.ts index 47f161ebf..8001e5a63 100644 --- a/packages/skeleton/vite.config.ts +++ b/packages/skeleton/vite.config.ts @@ -2,16 +2,10 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import vueDevTools from 'vite-plugin-vue-devtools' import ViteYaml from '@modyfi/vite-plugin-yaml' -import { existsSync } from 'fs' -import { resolve } from 'path' -// Get vite port from env, default to 3000 +// Get vite port from env, default to 5173 const vitePort = parseInt(process.env.VITE_PORT || '5173', 10) -// Detect if we're in a monorepo by checking for workspace root -const isMonorepo = existsSync(resolve(__dirname, '../../package.json')) && - existsSync(resolve(__dirname, '../../packages')) - // https://vitejs.dev/config/ export default defineConfig({ plugins: [ @@ -21,11 +15,6 @@ export default defineConfig({ appendTo: 'app/assets/main.ts' }) ], - // In monorepo, use 'development' condition to resolve to source TS files for HMR - // In standalone usage, use 'import' to resolve to published dist files - resolve: isMonorepo ? { - conditions: ['development', 'import'] - } : undefined, server: { host: true, // Allows external access (needed for Docker) strictPort: true, @@ -57,15 +46,7 @@ export default defineConfig({ // Force optimization of UiKit (not module packages) in dev mode // to avoid the error: // "importing binding name 'default' cannot be resolved by star export entries" - // Sprinkle packages are pre-built but during monorepo development we - // still treat them as source code to enable hot module reload optimizeDeps: { - include: ['uikit', 'uikit/dist/js/uikit-icons'], - exclude: [ - '@userfrosting/sprinkle-core', - '@userfrosting/sprinkle-account', - '@userfrosting/sprinkle-admin', - '@userfrosting/theme-pink-cupcake' - ] + include: ['uikit', 'uikit/dist/js/uikit-icons'] } }) diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 000000000..9057c4502 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,64 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueDevTools from 'vite-plugin-vue-devtools' +import ViteYaml from '@modyfi/vite-plugin-yaml' + +// Get vite port from env, default to 5173 +const vitePort = parseInt(process.env.VITE_PORT || '5173', 10) + +// https://vitejs.dev/config/ +// Monorepo-specific Vite configuration for development +export default defineConfig({ + plugins: [ + vue(), + ViteYaml(), + vueDevTools({ + appendTo: 'packages/skeleton/app/assets/main.ts' + }) + ], + // Use 'development' condition to resolve to source TS files for HMR in monorepo + resolve: { + conditions: ['development', 'import'] + }, + server: { + host: true, // Allows external access (needed for Docker) + strictPort: true, + port: vitePort, + origin: `http://localhost:${vitePort}`, + }, + root: 'packages/skeleton/app/assets/', + base: '/assets/', + build: { + outDir: 'public/assets', + assetsDir: '', + emptyOutDir: true, + manifest: true, + rollupOptions: { + input: { + main: 'packages/skeleton/app/assets/main.ts' + } + } + }, + // Fix uikit path issue + // @see : https://github.com/uikit/uikit/issues/5024 + css: { + preprocessorOptions: { + less: { + relativeUrls: 'all' + } + } + }, + // Force optimization of UiKit (not module packages) in dev mode + // to avoid the error: + // "importing binding name 'default' cannot be resolved by star export entries" + // Treat all sprinkles as source code (not prebuilt) for HMR + optimizeDeps: { + include: ['uikit', 'uikit/dist/js/uikit-icons'], + exclude: [ + '@userfrosting/sprinkle-core', + '@userfrosting/sprinkle-account', + '@userfrosting/sprinkle-admin', + '@userfrosting/theme-pink-cupcake' + ] + } +}) From f9a1aa3d9b5c111c4bbd24503fc6fe82469499bc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 9 Jan 2026 18:06:37 +0000 Subject: [PATCH 06/24] Fix TypeScript build errors for global properties - Updated tsconfig.build.json to include env.d.ts files - Removed rootDir constraint to allow env.d.ts inclusion - Build now properly includes type declarations for $t, $tdate, $checkAccess - All packages build without TypeScript errors Co-authored-by: lcharette <2566513+lcharette@users.noreply.github.com> --- packages/sprinkle-account/tsconfig.build.json | 4 ++-- packages/sprinkle-admin/tsconfig.build.json | 4 ++-- packages/sprinkle-core/tsconfig.build.json | 4 ++-- packages/theme-pink-cupcake/tsconfig.build.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/sprinkle-account/tsconfig.build.json b/packages/sprinkle-account/tsconfig.build.json index 009366e9f..0766e06b1 100644 --- a/packages/sprinkle-account/tsconfig.build.json +++ b/packages/sprinkle-account/tsconfig.build.json @@ -4,10 +4,10 @@ "declaration": true, "declarationMap": true, "emitDeclarationOnly": false, - "outDir": "dist", - "rootDir": "app/assets" + "outDir": "dist" }, "include": [ + "env.d.ts", "app/assets/**/*.ts", "app/assets/**/*.d.ts", "app/assets/**/*.vue" diff --git a/packages/sprinkle-admin/tsconfig.build.json b/packages/sprinkle-admin/tsconfig.build.json index 009366e9f..0766e06b1 100644 --- a/packages/sprinkle-admin/tsconfig.build.json +++ b/packages/sprinkle-admin/tsconfig.build.json @@ -4,10 +4,10 @@ "declaration": true, "declarationMap": true, "emitDeclarationOnly": false, - "outDir": "dist", - "rootDir": "app/assets" + "outDir": "dist" }, "include": [ + "env.d.ts", "app/assets/**/*.ts", "app/assets/**/*.d.ts", "app/assets/**/*.vue" diff --git a/packages/sprinkle-core/tsconfig.build.json b/packages/sprinkle-core/tsconfig.build.json index 009366e9f..0766e06b1 100644 --- a/packages/sprinkle-core/tsconfig.build.json +++ b/packages/sprinkle-core/tsconfig.build.json @@ -4,10 +4,10 @@ "declaration": true, "declarationMap": true, "emitDeclarationOnly": false, - "outDir": "dist", - "rootDir": "app/assets" + "outDir": "dist" }, "include": [ + "env.d.ts", "app/assets/**/*.ts", "app/assets/**/*.d.ts", "app/assets/**/*.vue" diff --git a/packages/theme-pink-cupcake/tsconfig.build.json b/packages/theme-pink-cupcake/tsconfig.build.json index 3b2e76185..83116ae5c 100644 --- a/packages/theme-pink-cupcake/tsconfig.build.json +++ b/packages/theme-pink-cupcake/tsconfig.build.json @@ -4,10 +4,10 @@ "declaration": true, "declarationMap": true, "emitDeclarationOnly": false, - "outDir": "dist", - "rootDir": "src" + "outDir": "dist" }, "include": [ + "env.d.ts", "src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue" From 3d878223b811a678d6e060b579fed393e86c674c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 9 Jan 2026 22:25:15 +0000 Subject: [PATCH 07/24] Add customConditions to root tsconfig for development exports - Added "customConditions": ["development"] to root tsconfig.json - Allows TypeScript to resolve conditional exports during typecheck - Fixes all 75+ TypeScript errors that appeared after adding conditional exports - npm run typecheck now passes with zero errors - All package builds work without TypeScript errors Co-authored-by: lcharette <2566513+lcharette@users.noreply.github.com> --- tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 4c9836356..e1e007070 100755 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,7 +22,8 @@ "baseUrl": ".", "rootDir": "packages", "allowJs": true, - "types": ["@modyfi/vite-plugin-yaml/modules"] + "types": ["@modyfi/vite-plugin-yaml/modules"], + "customConditions": ["development"] }, "references": [ { From e7d728751b0a36bd05d79cd28bfe44a783c189e2 Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Fri, 9 Jan 2026 17:38:34 -0500 Subject: [PATCH 08/24] chore: update Vite configuration to include env.d.ts and add custom compiler options for development --- package-lock.json | 1548 +++++++++----------- packages/sprinkle-account/vite.config.ts | 7 +- packages/sprinkle-admin/vite.config.ts | 7 +- packages/sprinkle-core/vite.config.ts | 7 +- packages/theme-pink-cupcake/vite.config.ts | 7 +- 5 files changed, 685 insertions(+), 891 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3b5d7c4cd..63fc5cb76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -96,6 +96,16 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", @@ -143,6 +153,33 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", @@ -165,6 +202,16 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", @@ -184,6 +231,17 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", @@ -1651,6 +1709,17 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -2260,6 +2329,30 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/config-helpers": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", @@ -2310,6 +2403,41 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", @@ -2323,6 +2451,26 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { "version": "9.39.2", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", @@ -2681,16 +2829,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/types/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2929,51 +3067,6 @@ "@rushstack/node-core-library": "5.19.1" } }, - "node_modules/@microsoft/api-extractor/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@microsoft/api-extractor/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@microsoft/api-extractor/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@microsoft/api-extractor/node_modules/typescript": { "version": "5.8.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", @@ -2988,13 +3081,6 @@ "node": ">=14.17" } }, - "node_modules/@microsoft/api-extractor/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, "node_modules/@microsoft/tsdoc": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz", @@ -3015,30 +3101,6 @@ "resolve": "~1.22.2" } }, - "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, "node_modules/@modyfi/vite-plugin-yaml": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@modyfi/vite-plugin-yaml/-/vite-plugin-yaml-1.1.1.tgz", @@ -3054,6 +3116,42 @@ "vite": ">=3.2.7" } }, + "node_modules/@modyfi/vite-plugin-yaml/node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@modyfi/vite-plugin-yaml/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@nuxt/friendly-errors-webpack-plugin": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.6.0.tgz", @@ -3130,15 +3228,15 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" @@ -3569,97 +3667,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@rushstack/node-core-library/node_modules/ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^8.5.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/@rushstack/node-core-library/node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rushstack/node-core-library/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, "node_modules/@rushstack/problem-matcher": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@rushstack/problem-matcher/-/problem-matcher-0.1.1.tgz", @@ -3706,32 +3713,6 @@ } } }, - "node_modules/@rushstack/terminal/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@rushstack/terminal/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/@rushstack/ts-command-line": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.1.5.tgz", @@ -3745,16 +3726,6 @@ "string-argv": "~0.3.1" } }, - "node_modules/@rushstack/ts-command-line/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", @@ -3946,19 +3917,6 @@ } } }, - "node_modules/@symfony/webpack-encore/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@tsconfig/node20": { "version": "20.1.8", "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.8.tgz", @@ -4478,16 +4436,6 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -4756,30 +4704,30 @@ } }, "node_modules/@volar/language-core": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", - "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.27.tgz", + "integrity": "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==", "dev": true, "license": "MIT", "dependencies": { - "@volar/source-map": "2.4.15" + "@volar/source-map": "2.4.27" } }, "node_modules/@volar/source-map": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", - "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.27.tgz", + "integrity": "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==", "dev": true, "license": "MIT" }, "node_modules/@volar/typescript": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", - "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.27.tgz", + "integrity": "sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==", "dev": true, "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.15", + "@volar/language-core": "2.4.27", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } @@ -4850,18 +4798,6 @@ "source-map-js": "^1.2.1" } }, - "node_modules/@vue/compiler-core/node_modules/entities": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", - "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/@vue/compiler-dom": { "version": "3.5.26", "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz", @@ -4981,17 +4917,17 @@ } }, "node_modules/@vue/language-core": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", - "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", + "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==", "dev": true, "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.15", + "@volar/language-core": "~2.4.11", "@vue/compiler-dom": "^3.5.0", "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.5.0", - "alien-signals": "^1.0.3", + "alien-signals": "^0.4.9", "minimatch": "^9.0.3", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1" @@ -5005,16 +4941,6 @@ } } }, - "node_modules/@vue/language-core/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@vue/language-core/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -5427,15 +5353,15 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -5443,17 +5369,14 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, "peerDependencies": { - "ajv": "^8.0.0" + "ajv": "^8.5.0" }, "peerDependenciesMeta": { "ajv": { @@ -5461,44 +5384,41 @@ } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "ajv": "^8.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, "peerDependencies": { - "ajv": "^6.9.1" + "ajv": "^8.8.2" } }, "node_modules/alien-signals": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", - "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz", + "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==", "dev": true, "license": "MIT" }, @@ -5555,14 +5475,30 @@ "node": ">= 8" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "Python-2.0" + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "node_modules/array-flatten": { + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", @@ -5658,6 +5594,17 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", @@ -5695,9 +5642,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.13", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.13.tgz", - "integrity": "sha512-WhtvB2NG2wjr04+h77sg3klAIwrgOqnjS49GGudnUPGFFgg7G17y7Qecqp+2Dr5kUDxNRBca0SK7cG8JwzkWDQ==", + "version": "2.9.14", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", + "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5817,14 +5764,13 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -6023,6 +5969,29 @@ "node": ">=4" } }, + "node_modules/chalk/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/check-error": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", @@ -6419,19 +6388,6 @@ } } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/css-minimizer-webpack-plugin": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.4.tgz", @@ -6835,6 +6791,16 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -6946,16 +6912,6 @@ "node": ">=14" } }, - "node_modules/editorconfig/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/editorconfig/node_modules/minimatch": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", @@ -6972,19 +6928,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/editorconfig/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -7041,11 +6984,13 @@ } }, "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", + "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -7365,6 +7310,23 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -7381,6 +7343,17 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -7431,14 +7404,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=8" + "node": "*" } }, "node_modules/eslint/node_modules/supports-color": { @@ -7681,23 +7664,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -7721,6 +7687,24 @@ "node": ">=0.8.0" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/figures": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", @@ -7771,6 +7755,40 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/file-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/file-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/file-loader/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -7953,6 +7971,33 @@ "webpack": "^5.11.0" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -7969,6 +8014,17 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8006,14 +8062,39 @@ "dev": true, "license": "MIT" }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { @@ -8035,19 +8116,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8098,9 +8166,9 @@ } }, "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "dev": true, "license": "MIT", "dependencies": { @@ -8109,7 +8177,7 @@ "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=14.14" } }, "node_modules/fs-monkey": { @@ -8265,16 +8333,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/glob/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -8355,13 +8413,13 @@ } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-symbols": { @@ -8509,6 +8567,16 @@ "entities": "^2.0.0" } }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -9029,16 +9097,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9178,29 +9236,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9231,32 +9266,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/jiti": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", @@ -9326,6 +9335,13 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -9354,9 +9370,9 @@ "license": "MIT" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, @@ -9534,14 +9550,13 @@ } }, "node_modules/limax": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/limax/-/limax-4.2.1.tgz", - "integrity": "sha512-7YeQ8dV9XIjYIjBSFUSOfoxQFAtG2ckD0FGKYCuRaPJKc3IKXZwqsSLD5PnlPklp4y5ncPWhiL142ijAtHGNgw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/limax/-/limax-4.2.2.tgz", + "integrity": "sha512-HhCTNSqrNHj2hZzFn2gNbdOukxSbsw7nSZ9cmn1TpvjvHvE1TuT523fgMpLTwzRdoNMujdyTeSNcs6TwiFa5aQ==", "license": "Apache-2.0", "peer": true, "dependencies": { "hepburn": "^1.2.2", - "lodash.deburr": "^4.1.0", "pinyin-pro": "^3.27.0", "speakingurl": "^14.0.1" }, @@ -9635,13 +9650,6 @@ "license": "MIT", "peer": true }, - "node_modules/lodash.deburr": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", - "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==", - "license": "MIT", - "peer": true - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -9671,13 +9679,16 @@ "license": "MIT" }, "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/luxon": { @@ -9726,19 +9737,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -9828,6 +9826,19 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -9891,16 +9902,19 @@ "license": "ISC" }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": "*" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minipass": { @@ -10083,19 +10097,6 @@ "which": "^2.0.2" } }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -10179,16 +10180,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/npm-run-all2/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/npm-run-all2/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -10582,13 +10573,13 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -11900,43 +11891,24 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3" + "ajv": "^8.0.0" }, "peerDependencies": { - "ajv": "^8.8.2" + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -11959,15 +11931,21 @@ } }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" - } - }, + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "0.19.2", "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", @@ -12682,16 +12660,19 @@ } }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -12899,16 +12880,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -12924,22 +12895,6 @@ "node": ">= 10.13.0" } }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -12962,16 +12917,6 @@ "node": ">=18" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/test-exclude/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -13043,37 +12988,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tinypool": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", @@ -13260,29 +13174,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ts-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-loader/node_modules/source-map": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", @@ -13721,100 +13612,6 @@ } } }, - "node_modules/vite-plugin-dts/node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/vite-plugin-dts/node_modules/@vue/language-core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", - "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "~2.4.11", - "@vue/compiler-dom": "^3.5.0", - "@vue/compiler-vue2": "^2.7.16", - "@vue/shared": "^3.5.0", - "alien-signals": "^0.4.9", - "minimatch": "^9.0.3", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vite-plugin-dts/node_modules/alien-signals": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz", - "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite-plugin-dts/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/vite-plugin-dts/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/vite-plugin-dts/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/vite-plugin-inspect": { "version": "0.8.9", "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", @@ -13847,57 +13644,6 @@ } } }, - "node_modules/vite-plugin-inspect/node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/vite-plugin-inspect/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/vite-plugin-inspect/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/vite-plugin-vue-devtools": { "version": "7.7.9", "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.9.tgz", @@ -13941,37 +13687,6 @@ "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" } }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/vitest": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", @@ -14045,19 +13760,6 @@ } } }, - "node_modules/vitest/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/vscode-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", @@ -14234,16 +13936,6 @@ "dev": true, "license": "MIT" }, - "node_modules/vue-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/vue-loader/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14295,6 +13987,83 @@ "typescript": ">=5.0.0" } }, + "node_modules/vue-tsc/node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/vue-tsc/node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-tsc/node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/vue-tsc/node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-tsc/node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-tsc/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/watchpack": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.0.tgz", @@ -14596,6 +14365,19 @@ "node": ">= 6" } }, + "node_modules/webpack-dev-server/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/webpack-dev-server/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -15028,9 +14810,9 @@ } }, "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, diff --git a/packages/sprinkle-account/vite.config.ts b/packages/sprinkle-account/vite.config.ts index 0e30a9bd1..68529df23 100644 --- a/packages/sprinkle-account/vite.config.ts +++ b/packages/sprinkle-account/vite.config.ts @@ -13,11 +13,14 @@ export default defineConfig({ vue(), ViteYaml(), dts({ - include: ['app/assets/**/*.ts', 'app/assets/**/*.vue'], + include: ['env.d.ts', 'app/assets/**/*.ts', 'app/assets/**/*.vue'], exclude: ['app/assets/tests/**/*'], outDir: 'dist', copyDtsFiles: true, - rollupTypes: false + rollupTypes: false, + compilerOptions: { + customConditions: ['development'] + } }) ], build: { diff --git a/packages/sprinkle-admin/vite.config.ts b/packages/sprinkle-admin/vite.config.ts index 27a0c8eca..2ab14de51 100644 --- a/packages/sprinkle-admin/vite.config.ts +++ b/packages/sprinkle-admin/vite.config.ts @@ -13,11 +13,14 @@ export default defineConfig({ vue(), ViteYaml(), dts({ - include: ['app/assets/**/*.ts', 'app/assets/**/*.vue'], + include: ['env.d.ts', 'app/assets/**/*.ts', 'app/assets/**/*.vue'], exclude: ['app/assets/tests/**/*'], outDir: 'dist', copyDtsFiles: true, - rollupTypes: false + rollupTypes: false, + compilerOptions: { + customConditions: ['development'] + } }) ], build: { diff --git a/packages/sprinkle-core/vite.config.ts b/packages/sprinkle-core/vite.config.ts index 39a66c05a..292722746 100644 --- a/packages/sprinkle-core/vite.config.ts +++ b/packages/sprinkle-core/vite.config.ts @@ -10,11 +10,14 @@ export default defineConfig({ plugins: [ vue(), dts({ - include: ['app/assets/**/*.ts', 'app/assets/**/*.vue'], + include: ['env.d.ts', 'app/assets/**/*.ts', 'app/assets/**/*.vue'], exclude: ['app/assets/tests/**/*'], outDir: 'dist', copyDtsFiles: true, - rollupTypes: false + rollupTypes: false, + compilerOptions: { + customConditions: ['development'] + } }) ], build: { diff --git a/packages/theme-pink-cupcake/vite.config.ts b/packages/theme-pink-cupcake/vite.config.ts index 74e973cc3..f74b4a0b0 100644 --- a/packages/theme-pink-cupcake/vite.config.ts +++ b/packages/theme-pink-cupcake/vite.config.ts @@ -12,11 +12,14 @@ export default defineConfig({ vue(), ViteYaml(), dts({ - include: ['src/**/*.ts', 'src/**/*.vue'], + include: ['env.d.ts', 'src/**/*.ts', 'src/**/*.vue'], exclude: ['src/tests/**/*'], outDir: 'dist', copyDtsFiles: true, - rollupTypes: false + rollupTypes: false, + compilerOptions: { + customConditions: ['development'] + } }) ], // Add UIKit alias : https://stackoverflow.com/a/75264118/445757 From 6773b8ecd976b266d41826c7b03a98b25eee65b1 Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Fri, 9 Jan 2026 18:08:09 -0500 Subject: [PATCH 09/24] Fix build workflow --- .github/workflows/Frontend.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/Frontend.yml b/.github/workflows/Frontend.yml index e10641553..95bf84f32 100644 --- a/.github/workflows/Frontend.yml +++ b/.github/workflows/Frontend.yml @@ -18,10 +18,10 @@ jobs: strategy: fail-fast: false matrix: - node_versions: [18, 20] + node_versions: [18, 22, 24] runs-on: ubuntu-latest - name: Skeleton Build - Node ${{ matrix.node_versions }} + name: Build - Node ${{ matrix.node_versions }} steps: - uses: actions/checkout@v4 @@ -34,13 +34,13 @@ jobs: run: npm ci - name: Test - run: npm run --workspace=userfrosting vite:build + run: npm run build Coverage: strategy: fail-fast: false matrix: - node_versions: [18, 20] + node_versions: [18, 22, 24] runs-on: ubuntu-latest name: Test & Coverage - Node ${{ matrix.node_versions }} @@ -82,7 +82,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 24 - name: Install Dependencies run: npm ci From 4d8864c1c81a0d88913728821d0285e7504051b7 Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Fri, 9 Jan 2026 18:10:45 -0500 Subject: [PATCH 10/24] Update names --- .github/workflows/Frontend.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Frontend.yml b/.github/workflows/Frontend.yml index 95bf84f32..aa4bb60cd 100644 --- a/.github/workflows/Frontend.yml +++ b/.github/workflows/Frontend.yml @@ -33,7 +33,7 @@ jobs: - name: Install Dependencies run: npm ci - - name: Test + - name: Build run: npm run build Coverage: @@ -55,7 +55,7 @@ jobs: - name: Install Dependencies run: npm ci - - name: Test + - name: Test & Coverage run: npm run coverage - name: Upload coverage to Codecov From c519528c80e552ea958daafe9a7378dafec749ba Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 15:24:38 -0500 Subject: [PATCH 11/24] refactor: move $checkAccess and translation properties to index.ts for sprinkle-account and sprinkle-core --- packages/sprinkle-account/app/assets/index.d.ts | 7 ------- packages/sprinkle-account/app/assets/index.ts | 6 ++++++ packages/sprinkle-core/app/assets/index.d.ts | 8 -------- packages/sprinkle-core/app/assets/index.ts | 7 +++++++ 4 files changed, 13 insertions(+), 15 deletions(-) delete mode 100644 packages/sprinkle-account/app/assets/index.d.ts delete mode 100644 packages/sprinkle-core/app/assets/index.d.ts diff --git a/packages/sprinkle-account/app/assets/index.d.ts b/packages/sprinkle-account/app/assets/index.d.ts deleted file mode 100644 index b7b6d4d3c..000000000 --- a/packages/sprinkle-account/app/assets/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export {} - -declare module 'vue' { - interface ComponentCustomProperties { - $checkAccess: (slug: string) => boolean - } -} diff --git a/packages/sprinkle-account/app/assets/index.ts b/packages/sprinkle-account/app/assets/index.ts index 15a89bc94..0dbf1ffa3 100644 --- a/packages/sprinkle-account/app/assets/index.ts +++ b/packages/sprinkle-account/app/assets/index.ts @@ -37,3 +37,9 @@ export default { app.config.globalProperties.$checkAccess = auth.checkAccess } } + +declare module 'vue' { + interface ComponentCustomProperties { + $checkAccess: (slug: string) => boolean + } +} diff --git a/packages/sprinkle-core/app/assets/index.d.ts b/packages/sprinkle-core/app/assets/index.d.ts deleted file mode 100644 index 65c3b928d..000000000 --- a/packages/sprinkle-core/app/assets/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export {} - -declare module 'vue' { - interface ComponentCustomProperties { - $t: (key: string, placeholders?: string | number | object) => string - $tdate: (date: string, format?: string | object) => string - } -} diff --git a/packages/sprinkle-core/app/assets/index.ts b/packages/sprinkle-core/app/assets/index.ts index dd90082e9..d0c0e3360 100644 --- a/packages/sprinkle-core/app/assets/index.ts +++ b/packages/sprinkle-core/app/assets/index.ts @@ -38,3 +38,10 @@ export default { useCsrf() } } + +declare module 'vue' { + interface ComponentCustomProperties { + $t: (key: string, placeholders?: string | number | object) => string + $tdate: (date: string, format?: string | object) => string + } +} From 655ac4fe0fc028531508cacd40922e2b4126135f Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 15:32:50 -0500 Subject: [PATCH 12/24] Fix path in packages --- package-lock.json | 12 ++++++------ packages/sprinkle-account/package.json | 12 ++++++------ packages/sprinkle-admin/package.json | 10 +++++----- packages/sprinkle-core/package.json | 8 ++++---- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 63fc5cb76..927dda7e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4036,9 +4036,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.7", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", - "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", "dev": true, "license": "MIT", "dependencies": { @@ -4114,9 +4114,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.19.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", - "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", + "version": "20.19.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.28.tgz", + "integrity": "sha512-VyKBr25BuFDzBFCK5sUM6ZXiWfqgCTwTAOK8qzGV/m9FCirXYDlmczJ+d5dXBAQALGCdRRdbteKYfJ84NGEusw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/packages/sprinkle-account/package.json b/packages/sprinkle-account/package.json index 061702bf0..5cb76d7a9 100644 --- a/packages/sprinkle-account/package.json +++ b/packages/sprinkle-account/package.json @@ -31,32 +31,32 @@ }, "./composables": { "development": "./app/assets/composables/index.ts", - "import": "./dist/composables/index.js", + "import": "./dist/composables.js", "types": "./dist/composables/index.d.ts" }, "./guards": { "development": "./app/assets/guards/index.ts", - "import": "./dist/guards/index.js", + "import": "./dist/guards.js", "types": "./dist/guards/index.d.ts" }, "./interfaces": { "development": "./app/assets/interfaces/index.ts", - "import": "./dist/interfaces/index.js", + "import": "./dist/interfaces.js", "types": "./dist/interfaces/index.d.ts" }, "./routes": { "development": "./app/assets/routes/index.ts", - "import": "./dist/routes/index.js", + "import": "./dist/routes.js", "types": "./dist/routes/index.d.ts" }, "./stores": { "development": "./app/assets/stores/index.ts", - "import": "./dist/stores/index.js", + "import": "./dist/stores.js", "types": "./dist/stores/index.d.ts" }, "./views": { "development": "./app/assets/views/index.ts", - "import": "./dist/views/index.js", + "import": "./dist/views.js", "types": "./dist/views/index.d.ts" } }, diff --git a/packages/sprinkle-admin/package.json b/packages/sprinkle-admin/package.json index d2ca76d0a..d21bab051 100644 --- a/packages/sprinkle-admin/package.json +++ b/packages/sprinkle-admin/package.json @@ -32,27 +32,27 @@ }, "./components": { "development": "./app/assets/components/index.ts", - "import": "./dist/components/index.js", + "import": "./dist/components.js", "types": "./dist/components/index.d.ts" }, "./composables": { "development": "./app/assets/composables/index.ts", - "import": "./dist/composables/index.js", + "import": "./dist/composables.js", "types": "./dist/composables/index.d.ts" }, "./interfaces": { "development": "./app/assets/interfaces/index.ts", - "import": "./dist/interfaces/index.js", + "import": "./dist/interfaces.js", "types": "./dist/interfaces/index.d.ts" }, "./routes": { "development": "./app/assets/routes/index.ts", - "import": "./dist/routes/index.js", + "import": "./dist/routes.js", "types": "./dist/routes/index.d.ts" }, "./views": { "development": "./app/assets/views/index.ts", - "import": "./dist/views/index.js", + "import": "./dist/views.js", "types": "./dist/views/index.d.ts" } }, diff --git a/packages/sprinkle-core/package.json b/packages/sprinkle-core/package.json index 78b6a10bf..7eaaec713 100644 --- a/packages/sprinkle-core/package.json +++ b/packages/sprinkle-core/package.json @@ -31,22 +31,22 @@ }, "./interfaces": { "development": "./app/assets/interfaces/index.ts", - "import": "./dist/interfaces/index.js", + "import": "./dist/interfaces.js", "types": "./dist/interfaces/index.d.ts" }, "./stores": { "development": "./app/assets/stores/index.ts", - "import": "./dist/stores/index.js", + "import": "./dist/stores.js", "types": "./dist/stores/index.d.ts" }, "./composables": { "development": "./app/assets/composables/index.ts", - "import": "./dist/composables/index.js", + "import": "./dist/composables.js", "types": "./dist/composables/index.d.ts" }, "./routes": { "development": "./app/assets/routes/index.ts", - "import": "./dist/routes/index.js", + "import": "./dist/routes.js", "types": "./dist/routes/index.d.ts" } }, From 3b56143ce93733783f86d5e21818ca3491452c9c Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 15:39:23 -0500 Subject: [PATCH 13/24] Fix circular dependency --- packages/sprinkle-core/app/assets/stores/usePageMeta.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sprinkle-core/app/assets/stores/usePageMeta.ts b/packages/sprinkle-core/app/assets/stores/usePageMeta.ts index 597c8ac43..8fb0c8e79 100644 --- a/packages/sprinkle-core/app/assets/stores/usePageMeta.ts +++ b/packages/sprinkle-core/app/assets/stores/usePageMeta.ts @@ -1,6 +1,6 @@ import { computed, ref, watch } from 'vue' import { useRoute } from 'vue-router' -import { useTranslator } from '@userfrosting/sprinkle-core/stores' +import { useTranslator } from './useTranslator' import { useConfigStore } from '../stores' import { defineStore } from 'pinia' From 1dbe4a69448fd86615ef544f738536eda36768ff Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 16:05:54 -0500 Subject: [PATCH 14/24] Remove source from package build --- packages/sprinkle-account/package.json | 1 - packages/sprinkle-admin/package.json | 1 - packages/sprinkle-core/package.json | 1 - packages/theme-pink-cupcake/package.json | 2 +- 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/sprinkle-account/package.json b/packages/sprinkle-account/package.json index 5cb76d7a9..400f2ef13 100644 --- a/packages/sprinkle-account/package.json +++ b/packages/sprinkle-account/package.json @@ -62,7 +62,6 @@ }, "types": "./dist/index.d.ts", "files": [ - "app/assets/", "dist/", "app/schema/" ], diff --git a/packages/sprinkle-admin/package.json b/packages/sprinkle-admin/package.json index d21bab051..e9c7621d9 100644 --- a/packages/sprinkle-admin/package.json +++ b/packages/sprinkle-admin/package.json @@ -58,7 +58,6 @@ }, "types": "./dist/index.d.ts", "files": [ - "app/assets/", "dist/", "app/schema/" ], diff --git a/packages/sprinkle-core/package.json b/packages/sprinkle-core/package.json index 7eaaec713..1c18a4c03 100644 --- a/packages/sprinkle-core/package.json +++ b/packages/sprinkle-core/package.json @@ -52,7 +52,6 @@ }, "types": "./dist/index.d.ts", "files": [ - "app/assets/", "dist/" ], "engines": { diff --git a/packages/theme-pink-cupcake/package.json b/packages/theme-pink-cupcake/package.json index 404a1f6b3..012835d48 100644 --- a/packages/theme-pink-cupcake/package.json +++ b/packages/theme-pink-cupcake/package.json @@ -58,7 +58,7 @@ }, "types": "./dist/index.d.ts", "files": [ - "src/", + "src/less/", "dist/" ], "engines": { From eb4f0b31af011895fd4205888a59888bf448bbf8 Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 16:10:42 -0500 Subject: [PATCH 15/24] Rename monorepo dev condition --- packages/sprinkle-account/package.json | 14 +++++++------- packages/sprinkle-account/vite.config.ts | 2 +- packages/sprinkle-admin/package.json | 12 ++++++------ packages/sprinkle-admin/vite.config.ts | 2 +- packages/sprinkle-core/package.json | 10 +++++----- packages/sprinkle-core/vite.config.ts | 2 +- packages/theme-pink-cupcake/package.json | 12 ++++++------ packages/theme-pink-cupcake/vite.config.ts | 2 +- tsconfig.json | 2 +- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/sprinkle-account/package.json b/packages/sprinkle-account/package.json index 400f2ef13..d8fb1e3a0 100644 --- a/packages/sprinkle-account/package.json +++ b/packages/sprinkle-account/package.json @@ -25,37 +25,37 @@ }, "exports": { ".": { - "development": "./app/assets/index.ts", + "userfrosting:monorepo": "./app/assets/index.ts", "import": "./dist/index.js", "types": "./dist/index.d.ts" }, "./composables": { - "development": "./app/assets/composables/index.ts", + "userfrosting:monorepo": "./app/assets/composables/index.ts", "import": "./dist/composables.js", "types": "./dist/composables/index.d.ts" }, "./guards": { - "development": "./app/assets/guards/index.ts", + "userfrosting:monorepo": "./app/assets/guards/index.ts", "import": "./dist/guards.js", "types": "./dist/guards/index.d.ts" }, "./interfaces": { - "development": "./app/assets/interfaces/index.ts", + "userfrosting:monorepo": "./app/assets/interfaces/index.ts", "import": "./dist/interfaces.js", "types": "./dist/interfaces/index.d.ts" }, "./routes": { - "development": "./app/assets/routes/index.ts", + "userfrosting:monorepo": "./app/assets/routes/index.ts", "import": "./dist/routes.js", "types": "./dist/routes/index.d.ts" }, "./stores": { - "development": "./app/assets/stores/index.ts", + "userfrosting:monorepo": "./app/assets/stores/index.ts", "import": "./dist/stores.js", "types": "./dist/stores/index.d.ts" }, "./views": { - "development": "./app/assets/views/index.ts", + "userfrosting:monorepo": "./app/assets/views/index.ts", "import": "./dist/views.js", "types": "./dist/views/index.d.ts" } diff --git a/packages/sprinkle-account/vite.config.ts b/packages/sprinkle-account/vite.config.ts index 68529df23..500e1c770 100644 --- a/packages/sprinkle-account/vite.config.ts +++ b/packages/sprinkle-account/vite.config.ts @@ -19,7 +19,7 @@ export default defineConfig({ copyDtsFiles: true, rollupTypes: false, compilerOptions: { - customConditions: ['development'] + customConditions: ['userfrosting:monorepo'] } }) ], diff --git a/packages/sprinkle-admin/package.json b/packages/sprinkle-admin/package.json index e9c7621d9..031a79422 100644 --- a/packages/sprinkle-admin/package.json +++ b/packages/sprinkle-admin/package.json @@ -26,32 +26,32 @@ }, "exports": { ".": { - "development": "./app/assets/index.ts", + "userfrosting:monorepo": "./app/assets/index.ts", "import": "./dist/index.js", "types": "./dist/index.d.ts" }, "./components": { - "development": "./app/assets/components/index.ts", + "userfrosting:monorepo": "./app/assets/components/index.ts", "import": "./dist/components.js", "types": "./dist/components/index.d.ts" }, "./composables": { - "development": "./app/assets/composables/index.ts", + "userfrosting:monorepo": "./app/assets/composables/index.ts", "import": "./dist/composables.js", "types": "./dist/composables/index.d.ts" }, "./interfaces": { - "development": "./app/assets/interfaces/index.ts", + "userfrosting:monorepo": "./app/assets/interfaces/index.ts", "import": "./dist/interfaces.js", "types": "./dist/interfaces/index.d.ts" }, "./routes": { - "development": "./app/assets/routes/index.ts", + "userfrosting:monorepo": "./app/assets/routes/index.ts", "import": "./dist/routes.js", "types": "./dist/routes/index.d.ts" }, "./views": { - "development": "./app/assets/views/index.ts", + "userfrosting:monorepo": "./app/assets/views/index.ts", "import": "./dist/views.js", "types": "./dist/views/index.d.ts" } diff --git a/packages/sprinkle-admin/vite.config.ts b/packages/sprinkle-admin/vite.config.ts index 2ab14de51..555ed2ed7 100644 --- a/packages/sprinkle-admin/vite.config.ts +++ b/packages/sprinkle-admin/vite.config.ts @@ -19,7 +19,7 @@ export default defineConfig({ copyDtsFiles: true, rollupTypes: false, compilerOptions: { - customConditions: ['development'] + customConditions: ['userfrosting:monorepo'] } }) ], diff --git a/packages/sprinkle-core/package.json b/packages/sprinkle-core/package.json index 1c18a4c03..be39f9274 100644 --- a/packages/sprinkle-core/package.json +++ b/packages/sprinkle-core/package.json @@ -25,27 +25,27 @@ }, "exports": { ".": { - "development": "./app/assets/index.ts", + "userfrosting:monorepo": "./app/assets/index.ts", "import": "./dist/index.js", "types": "./dist/index.d.ts" }, "./interfaces": { - "development": "./app/assets/interfaces/index.ts", + "userfrosting:monorepo": "./app/assets/interfaces/index.ts", "import": "./dist/interfaces.js", "types": "./dist/interfaces/index.d.ts" }, "./stores": { - "development": "./app/assets/stores/index.ts", + "userfrosting:monorepo": "./app/assets/stores/index.ts", "import": "./dist/stores.js", "types": "./dist/stores/index.d.ts" }, "./composables": { - "development": "./app/assets/composables/index.ts", + "userfrosting:monorepo": "./app/assets/composables/index.ts", "import": "./dist/composables.js", "types": "./dist/composables/index.d.ts" }, "./routes": { - "development": "./app/assets/routes/index.ts", + "userfrosting:monorepo": "./app/assets/routes/index.ts", "import": "./dist/routes.js", "types": "./dist/routes/index.d.ts" } diff --git a/packages/sprinkle-core/vite.config.ts b/packages/sprinkle-core/vite.config.ts index 292722746..c954da860 100644 --- a/packages/sprinkle-core/vite.config.ts +++ b/packages/sprinkle-core/vite.config.ts @@ -16,7 +16,7 @@ export default defineConfig({ copyDtsFiles: true, rollupTypes: false, compilerOptions: { - customConditions: ['development'] + customConditions: ['userfrosting:monorepo'] } }) ], diff --git a/packages/theme-pink-cupcake/package.json b/packages/theme-pink-cupcake/package.json index 012835d48..f940d4901 100644 --- a/packages/theme-pink-cupcake/package.json +++ b/packages/theme-pink-cupcake/package.json @@ -25,32 +25,32 @@ }, "exports": { ".": { - "development": "./src/index.ts", + "userfrosting:monorepo": "./src/index.ts", "import": "./dist/index.js", "types": "./dist/index.d.ts" }, "./components/pages/account": { - "development": "./src/components/Pages/Account/index.ts", + "userfrosting:monorepo": "./src/components/Pages/Account/index.ts", "import": "./dist/components/pages/account.js", "types": "./dist/components/Pages/Account/index.d.ts" }, "./components/pages/admin": { - "development": "./src/components/Pages/Admin/index.ts", + "userfrosting:monorepo": "./src/components/Pages/Admin/index.ts", "import": "./dist/components/pages/admin.js", "types": "./dist/components/Pages/Admin/index.d.ts" }, "./components": { - "development": "./src/components/index.ts", + "userfrosting:monorepo": "./src/components/index.ts", "import": "./dist/components.js", "types": "./dist/components/index.d.ts" }, "./plugins": { - "development": "./src/plugins/index.ts", + "userfrosting:monorepo": "./src/plugins/index.ts", "import": "./dist/plugins.js", "types": "./dist/plugins/index.d.ts" }, "./views": { - "development": "./src/views/index.ts", + "userfrosting:monorepo": "./src/views/index.ts", "import": "./dist/views.js", "types": "./dist/views/index.d.ts" }, diff --git a/packages/theme-pink-cupcake/vite.config.ts b/packages/theme-pink-cupcake/vite.config.ts index f74b4a0b0..42546941d 100644 --- a/packages/theme-pink-cupcake/vite.config.ts +++ b/packages/theme-pink-cupcake/vite.config.ts @@ -18,7 +18,7 @@ export default defineConfig({ copyDtsFiles: true, rollupTypes: false, compilerOptions: { - customConditions: ['development'] + customConditions: ['userfrosting:monorepo'] } }) ], diff --git a/tsconfig.json b/tsconfig.json index e1e007070..2aca6b398 100755 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,7 +23,7 @@ "rootDir": "packages", "allowJs": true, "types": ["@modyfi/vite-plugin-yaml/modules"], - "customConditions": ["development"] + "customConditions": ["userfrosting:monorepo"] }, "references": [ { From 539262c437cc20e82760c4f762249f2f7b663f98 Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 16:19:14 -0500 Subject: [PATCH 16/24] Correctly externalize vue-router --- package-lock.json | 3 ++- packages/sprinkle-core/package.json | 3 ++- packages/sprinkle-core/vite.config.ts | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 927dda7e1..34bec771b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14963,7 +14963,8 @@ "axios": "^1.12.0", "pinia": "^2.1.6", "pinia-plugin-persistedstate": "^3.2.0", - "vue": "^3.4.21" + "vue": "^3.4.21", + "vue-router": "^4.2.4" } }, "packages/theme-pink-cupcake": { diff --git a/packages/sprinkle-core/package.json b/packages/sprinkle-core/package.json index be39f9274..9223399a9 100644 --- a/packages/sprinkle-core/package.json +++ b/packages/sprinkle-core/package.json @@ -67,7 +67,8 @@ "axios": "^1.12.0", "pinia": "^2.1.6", "pinia-plugin-persistedstate": "^3.2.0", - "vue": "^3.4.21" + "vue": "^3.4.21", + "vue-router": "^4.2.4" }, "scripts": { "build": "vite build" diff --git a/packages/sprinkle-core/vite.config.ts b/packages/sprinkle-core/vite.config.ts index c954da860..42f1f98bf 100644 --- a/packages/sprinkle-core/vite.config.ts +++ b/packages/sprinkle-core/vite.config.ts @@ -34,6 +34,7 @@ export default defineConfig({ rollupOptions: { external: [ 'vue', + 'vue-router', 'axios', 'pinia', 'pinia-plugin-persistedstate', From 1e5a0da34f956b531420791c535176685b743d43 Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 16:20:44 -0500 Subject: [PATCH 17/24] Fix tests --- .../assets/tests/composables/useLoginApi.test.ts | 6 +++++- .../tests/composables/useRegisterApi.test.ts | 16 ++++++++++++---- .../composables/useRuleSchemaAdapter.test.ts | 9 +++++++-- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/packages/sprinkle-account/app/assets/tests/composables/useLoginApi.test.ts b/packages/sprinkle-account/app/assets/tests/composables/useLoginApi.test.ts index e51d87433..5e13d9ed1 100644 --- a/packages/sprinkle-account/app/assets/tests/composables/useLoginApi.test.ts +++ b/packages/sprinkle-account/app/assets/tests/composables/useLoginApi.test.ts @@ -1,4 +1,5 @@ -import { describe, expect, test, vi } from 'vitest' +import { describe, expect, test, vi, beforeEach } from 'vitest' +import { setActivePinia, createPinia } from 'pinia' import axios from 'axios' import { Severity } from '@userfrosting/sprinkle-core/interfaces' import { useLoginApi } from '../../composables' @@ -46,6 +47,9 @@ vi.mock('@userfrosting/sprinkle-core/stores', () => ({ })) describe('useLoginApi', () => { + beforeEach(() => { + setActivePinia(createPinia()) + }) test('should initialize formData with default values', () => { const { formData } = useLoginApi() expect(formData.value).toEqual({ diff --git a/packages/sprinkle-account/app/assets/tests/composables/useRegisterApi.test.ts b/packages/sprinkle-account/app/assets/tests/composables/useRegisterApi.test.ts index d183e4b30..9dd5d58dc 100644 --- a/packages/sprinkle-account/app/assets/tests/composables/useRegisterApi.test.ts +++ b/packages/sprinkle-account/app/assets/tests/composables/useRegisterApi.test.ts @@ -1,12 +1,12 @@ -import { afterEach, describe, expect, test, vi } from 'vitest' -// import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { setActivePinia, createPinia } from 'pinia' // import axios from 'axios' // import { Severity } from '@userfrosting/sprinkle-core/interfaces' // import type { RegisterRequest } from '../../interfaces' import { useRegisterApi } from '../../composables' -const { defaultRegistrationForm } = useRegisterApi() -// const { defaultRegistrationForm, availableLocales, captchaUrl } = useRegisterApi() +let defaultRegistrationForm: any +// let defaultRegistrationForm: any, availableLocales: any, captchaUrl: any /*const form: RegisterRequest = { first_name: 'John', @@ -43,6 +43,14 @@ vi.mock('@userfrosting/sprinkle-core/stores', () => ({ })) describe('register', () => { + beforeEach(() => { + setActivePinia(createPinia()) + const result = useRegisterApi() + defaultRegistrationForm = result.defaultRegistrationForm + // availableLocales = result.availableLocales + // captchaUrl = result.captchaUrl + }) + afterEach(() => { vi.clearAllMocks() vi.resetAllMocks() diff --git a/packages/sprinkle-core/app/assets/tests/composables/useRuleSchemaAdapter.test.ts b/packages/sprinkle-core/app/assets/tests/composables/useRuleSchemaAdapter.test.ts index d5e75a5f3..8f4ed0cd6 100644 --- a/packages/sprinkle-core/app/assets/tests/composables/useRuleSchemaAdapter.test.ts +++ b/packages/sprinkle-core/app/assets/tests/composables/useRuleSchemaAdapter.test.ts @@ -1,16 +1,21 @@ -import { describe, test, expect, vi, afterEach } from 'vitest' +import { describe, test, expect, vi, afterEach, beforeEach } from 'vitest' +import { setActivePinia, createPinia } from 'pinia' import { useRuleSchemaAdapter } from '../../composables/useRuleSchemaAdapter' import { useRegle } from '@regle/core' // Mock the translator store const translateMock = vi.fn((key: string) => key || '') -vi.mock('@userfrosting/sprinkle-core/stores', () => ({ +vi.mock('../../stores', () => ({ useTranslator: () => ({ translate: translateMock }) })) describe('useRuleSchemaAdapter', () => { + beforeEach(() => { + setActivePinia(createPinia()) + }) + afterEach(() => { vi.clearAllMocks() }) From 5d1bad0d2877cb54390455a31ecab9b9ad06080f Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 16:24:33 -0500 Subject: [PATCH 18/24] Add build Skeleton to Build --- .github/workflows/Frontend.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/Frontend.yml b/.github/workflows/Frontend.yml index aa4bb60cd..cf722c338 100644 --- a/.github/workflows/Frontend.yml +++ b/.github/workflows/Frontend.yml @@ -33,9 +33,12 @@ jobs: - name: Install Dependencies run: npm ci - - name: Build + - name: Build Packages run: npm run build + - name: Build Skeleton + run: npm run --workspace=userfrosting vite:build + Coverage: strategy: fail-fast: false From 5b4b600b6ba9130458ab6efbf238d0d6a9a6398c Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 16:36:21 -0500 Subject: [PATCH 19/24] Add resolve conditions to vitest configuration --- vitest.config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vitest.config.ts b/vitest.config.ts index bb22eab29..c46dd34d3 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -2,6 +2,9 @@ import { defineConfig } from 'vite' export default defineConfig({ + resolve: { + conditions: ['userfrosting:monorepo', 'import', 'module', 'browser', 'default'] + }, test: { coverage: { enabled: true, From 8f24d9a42e5b630c83611f9cf84add9571369886 Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 17:34:28 -0500 Subject: [PATCH 20/24] Update task so monorepo is served by vite with the correct condition --- .vscode/tasks.json | 156 ++++++++++----------------------------------- vite.config.ts | 4 +- 2 files changed, 35 insertions(+), 125 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 4f746378d..613603363 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -9,8 +9,8 @@ { "label": "==> Serve", "dependsOn": [ - "Workspace - Bakery Serve", - "Skeleton - Vite Dev" + "Bakery Serve", + "Vite Dev" ], "problemMatcher": [] }, @@ -19,67 +19,83 @@ * Workspace NPM Tasks */ { - "label": "Workspace - npm install", + "label": "npm install", "type": "shell", "command": "npm install" }, { - "label": "Workspace - npm update", + "label": "npm update", "type": "shell", "command": "npm update" }, { - "label": "Workspace - Format", + "label": "Format", "type": "shell", "command": "npm run format" }, { - "label": "Workspace - Type Check", + "label": "Type Check", "type": "shell", "command": "npm run typecheck" }, { - "label": "Workspace - Eslint", + "label": "Eslint", "type": "shell", "command": "npm run lint" }, { - "label": "Workspace - Tests", + "label": "Tests", "type": "shell", "command": "npm run test" }, { - "label": "Workspace - Coverage", + "label": "Coverage", "type": "shell", "command": "npm run coverage" }, + { + "label": "Vite Dev", + "type": "shell", + "command": "npm run dev", + "isBackground": true + }, + { + "label": "Build", + "type": "shell", + "command": "npm run build" + }, + { + "label": "Build - Skeleton", + "type": "shell", + "command": "npm run --workspace=userfrosting vite:build" + }, /** * Workspace PHP Tasks */ { - "label": "Workspace - Bakery Serve", + "label": "Bakery Serve", "type": "shell", "command": "php bakery serve", "isBackground": true }, { - "label": "Workspace - Composer Update", + "label": "Composer Update", "type": "shell", "command": "composer update" }, { - "label": "Workspace - Merge composer.json", + "label": "Merge composer.json", "type": "shell", "command": "vendor/bin/monorepo-builder merge" }, { - "label": "Workspace - Composer Validate", + "label": "Composer Validate", "type": "shell", "command": "vendor/bin/monorepo-builder validate" }, { - "label": "Workspace - PHPUnit", + "label": "PHPUnit", "type": "shell", "options": { "env": { @@ -93,17 +109,17 @@ } }, { - "label": "Workspace - PHP CS Fixer", + "label": "PHP CS Fixer", "type": "shell", "command": "vendor/bin/php-cs-fixer fix" }, { - "label": "Workspace - PHPStan", + "label": "PHPStan", "type": "shell", "command": "vendor/bin/phpstan analyse" }, { - "label": "Workspace - Update PHP Headers", + "label": "Update PHP Headers", "type": "shell", "command": [ "vendor/bin/php-cs-fixer fix --config packages/framework/.php-cs-fixer.php &&", @@ -113,112 +129,6 @@ "vendor/bin/php-cs-fixer fix --config packages/skeleton/.php-cs-fixer.headers.php" ], }, - - /** - * UserFrosting (skeleton) Tasks - */ - { - "label": "Skeleton - Vite Dev", - "type": "shell", - "command": "npm run --workspace=userfrosting vite:dev", - "isBackground": true - }, - { - "label": "Skeleton - Vite Build", - "type": "shell", - "command": "npm run --workspace=userfrosting vite:build" - }, - { - "label": "Skeleton - PHPUnit", - "type": "shell", - "options": { - "env": { - "XDEBUG_CONFIG": "idekey=VSCODE" - } - }, - "command": "printf '\\33c\\e[3J' && vendor/bin/phpunit --testsuite 'Skeleton'" - }, - { - "label": "Skeleton - PHPStan", - "type": "shell", - "command": "vendor/bin/phpstan analyse packages/skeleton" - }, - - /** - * Sprinkle Core Tasks - */ - { - "label": "Core - PHPUnit", - "type": "shell", - "options": { - "env": { - "XDEBUG_CONFIG": "idekey=VSCODE" - } - }, - "command": "printf '\\33c\\e[3J' && vendor/bin/phpunit --testsuite 'Core Sprinkle'" - }, - { - "label": "Core - PHPStan", - "type": "shell", - "command": "vendor/bin/phpstan analyse packages/sprinkle-core" - }, - - /** - * Sprinkle Account Tasks - */ - { - "label": "Account - PHPUnit", - "type": "shell", - "options": { - "env": { - "XDEBUG_CONFIG": "idekey=VSCODE" - } - }, - "command": "printf '\\33c\\e[3J' && vendor/bin/phpunit --testsuite 'Account Sprinkle'" - }, - { - "label": "Account - PHPStan", - "type": "shell", - "command": "vendor/bin/phpstan analyse packages/sprinkle-account" - }, - - /** - * Sprinkle Admin Tasks - */ - { - "label": "Admin - PHPUnit", - "type": "shell", - "options": { - "env": { - "XDEBUG_CONFIG": "idekey=VSCODE" - } - }, - "command": "printf '\\33c\\e[3J' && vendor/bin/phpunit --testsuite 'Admin Sprinkle'" - }, - { - "label": "Admin - PHPStan", - "type": "shell", - "command": "vendor/bin/phpstan analyse packages/sprinkle-admin" - }, - - /** - * Framework Tasks - */ - { - "label": "Framework - PHPUnit", - "type": "shell", - "options": { - "env": { - "XDEBUG_CONFIG": "idekey=VSCODE" - } - }, - "command": "printf '\\33c\\e[3J' && vendor/bin/phpunit --testsuite 'Framework'" - }, - { - "label": "Framework - PHPStan", - "type": "shell", - "command": "vendor/bin/phpstan analyse packages/framework" - }, /** * Docker Tasks diff --git a/vite.config.ts b/vite.config.ts index 9057c4502..783b2f5b1 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -16,9 +16,9 @@ export default defineConfig({ appendTo: 'packages/skeleton/app/assets/main.ts' }) ], - // Use 'development' condition to resolve to source TS files for HMR in monorepo + // Use 'userfrosting:monorepo' condition to resolve to source TS files for HMR in monorepo resolve: { - conditions: ['development', 'import'] + conditions: ['userfrosting:monorepo', 'import'] }, server: { host: true, // Allows external access (needed for Docker) From bfa558d337ed3baf59cef6125bddd5e24c9158a4 Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 18:01:22 -0500 Subject: [PATCH 21/24] Add Copilot instructions for UserFrosting 6 monorepo architecture and workflows --- .github/copilot-instructions.md | 233 ++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 .github/copilot-instructions.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 000000000..f80cd4540 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,233 @@ +# UserFrosting 6 Monorepo - AI Coding Agent Instructions + +## Architecture Overview + +**UserFrosting** is a PHP/JavaScript user management framework built on Slim, Twig, Eloquent ORM, Vue 3, and Vite. Version 6 is a **monorepo** containing multiple interdependent packages. + +### Sprinkle Architecture + +The core architectural pattern is **Sprinkles** - composable modules that extend functionality through dependency injection: + +- **Sprinkle Recipe**: Implements `SprinkleRecipe` interface with methods: + - `getName()`: Human-readable name + - `getPath()`: Absolute path to sprinkle directory + - `getSprinkles()`: Array of dependent sprinkle class names (loaded recursively, dependencies first) + - `getRoutes()`: Route definition classes + - `getServices()`: PHP-DI service provider classes + +- **Optional Recipe Interfaces**: + - `BakeryRecipe`: Custom CLI commands via `getBakeryCommands()` + - `MiddlewareRecipe`: PSR-15 middleware via `getMiddlewares()` + - `EventListenerRecipe`: Event listeners via `getEventListeners()` + - `TwigExtensionRecipe`: Twig extensions via `getTwigExtensions()` + - `MigrationRecipe`: Database migrations via `getMigrations()` + +**Example**: [MyApp.php](packages/skeleton/app/src/MyApp.php) depends on Core → Account → Admin sprinkles. Dependencies are resolved automatically by `SprinkleManager`. + +### Package Structure + +``` +packages/ + framework/ # Core abstractions (Sprinkle system, UniformResourceLocator, PHP-DI bridges) + sprinkle-core/ # Essential services (config, DB, Twig, sessions, i18n, alerts, throttling) + sprinkle-account/ # Authentication, users, roles, permissions + sprinkle-admin/ # Admin UI (users, roles, permissions management) + theme-pink-cupcake/# UIKit-based theme (optional) + skeleton/ # Full application template (dev entry point in monorepo) +``` + +`skeleton` is the main app that ties everything together. While it is the main entry point for the monorepo, it should be used on it's own by the end user, with other sprinkles added as dependencies through Composer and NPM. Skeleton is meant as a starting point for new projects, and each file can be customized as needed. + +## Dual Build System (PHP + TypeScript) + +### PHP Side + +- **Composer monorepo**: Managed by [symplify/monorepo-builder](https://github.com/symplify/monorepo-builder) +- **Critical**: Edit individual `packages/*/composer.json`, NOT root `composer.json` +- After edits: `vendor/bin/monorepo-builder merge` to sync root composer.json +- Composer type: `userfrosting-sprinkle` for packages + +### TypeScript/Frontend Side + +- **NPM workspaces**: All sprinkles are npm packages with frontend assets +- **Monorepo dev mode**: Uses `userfrosting:monorepo` export condition in package.json + - Points to source `.ts` files for HMR (Hot Module Reload) + - Vite resolves imports to source code, not dist builds + - Root [vite.config.ts](vite.config.ts) sets `conditions: ['userfrosting:monorepo', 'import']` + +- **Production build**: Each sprinkle builds to `dist/` with conditional exports + ```json + "exports": { + ".": { + "userfrosting:monorepo": "./app/assets/index.ts", // Dev: source + "import": "./dist/index.js", // Prod: built + "types": "./dist/index.d.ts" + } + } + ``` + +- **Key frontend pattern**: Sprinkles expose composables, stores, routes, views via subpath exports + - Example: `import { useAuthStore } from '@userfrosting/sprinkle-account/stores'` + - See [sprinkle-core/package.json](packages/sprinkle-core/package.json) exports + +## Critical Workflows + +### Development Servers + +**Option 1 - VS Code Task** (recommended): +```bash +# Run "==> Serve" task from Command Palette (Cmd/Ctrl+Shift+P) +# Starts both PHP + Vite in parallel +``` + +**Option 2 - Manual**: +```bash +# Terminal 1: PHP dev server +php bakery serve + +# Terminal 2: Vite dev server with HMR +npm run dev +``` + +App: http://localhost:8080 | Vite: http://localhost:5173 + +### Building Packages + +**Build all sprinkle TypeScript packages**: +```bash +npm run build +# Compiles each workspace to dist/ with type definitions +``` + +**Build specific sprinkle**: +```bash +npm run build:core # @userfrosting/sprinkle-core +npm run build:account # @userfrosting/sprinkle-account +npm run build:admin # @userfrosting/sprinkle-admin +npm run build:theme # @userfrosting/theme-pink-cupcake +``` + +**IMPORTANT**: The monorepo dev mode (`userfrosting:monorepo` condition) means Vite HMR works WITHOUT building. Only build when: +- Testing production builds +- Publishing to NPM +- Verifying type definitions + +### Testing + +**PHP tests** (PHPUnit): +```bash +# Run specific suite +vendor/bin/phpunit --testsuite="Core Sprinkle" +vendor/bin/phpunit --testsuite="Framework" + +# Or use VS Code task "PHPUnit" +``` + +**Frontend tests** (Vitest): +```bash +npm run test # Watch mode +npm run coverage # With coverage report +``` + +- Root [vitest.config.ts](vitest.config.ts) runs tests from all workspace packages +- Uses `happy-dom` environment +- Coverage: `_meta/_coverage/` + +### Database Setup + +```bash +php bakery bake # Run migrations + seeders +php bakery migrate # Migrations only +``` + +## Project Conventions + +### File Organization + +- **PHP**: `packages/*/app/src/` - Source code +- **PHP Tests**: `packages/*/app/tests/` - PHPUnit tests +- **Frontend**: `packages/*/app/assets/` - TypeScript/Vue source +- **Frontend Tests**: `packages/*/app/assets/tests/` - Vitest specs +- **Templates**: `packages/*/app/templates/` - Twig files (located via UniformResourceLocator) +- **Config**: `packages/*/app/config/` - YAML/PHP config files +- **Routes**: `packages/*/app/src/Routes/` - Slim route definitions + +### Naming Patterns + +- **Sprinkle class**: `{SprinkleName}` (e.g., `Core`, `Account`, `Admin`) +- **Service providers**: `*Service.php` (e.g., `DatabaseService`, `TwigService`) +- **Routes**: `*Routes.php` implementing `RouteDefinitionInterface` +- **Bakery commands**: `*Command.php` extending Symfony Console Command +- **Tests**: `*Test.php` for PHP, `*.spec.ts` for TypeScript + +### Dependency Injection + +Uses **PHP-DI** with autowiring enabled: +- Constructor injection preferred +- Attributes supported (`#[Inject]`) +- Service definitions in classes implementing `ServicesProviderInterface` +- Example: [TwigService.php](packages/sprinkle-core/app/src/ServicesProvider/TwigService.php) + +### Frontend State Management + +- **Pinia stores** for global state (persisted with `pinia-plugin-persistedstate`) +- Key stores: `useAuthStore`, `useConfigStore`, `useTranslator`, `useAlertsStore` +- Import pattern: `from '@userfrosting/sprinkle-*/stores'` + +### Vue Router Integration + +Routes defined per-sprinkle, merged in skeleton: +```typescript +// packages/skeleton/app/assets/router/index.ts +import AccountRoutes from '@userfrosting/sprinkle-account/routes' +import AdminRoutes from '@userfrosting/sprinkle-admin/routes' + +const router = createRouter({ + routes: [ + ...ErrorRoutes, + ...AccountRoutes, + ...AdminRoutes + ] +}) +``` + +## Release Process + +**Creating a new version** (handled by monorepo-builder): +```bash +vendor/bin/monorepo-builder release 6.0.1 # Specific version +vendor/bin/monorepo-builder release patch # Auto-increment patch +vendor/bin/monorepo-builder release minor # Auto-increment minor +``` + +This updates: +- All `packages/*/composer.json` versions +- All `packages/*/package.json` versions (via custom [NpmVersionWorker](utils/NpmVersionWorker.php)) +- Creates git tag +- Root composer.json + +**Publish to NPM**: +```bash +npm publish --access public --workspaces +``` + +## Common Pitfalls + +1. **Editing root composer.json directly**: Always edit package-level files, then merge +2. **Missing builds**: In prod, sprinkles need `dist/` built; in dev, monorepo mode bypasses this and MUST use source TS files +3. **Sprinkle order matters**: Dependencies are loaded first, then main sprinkle +4. **Vite HMR not working**: Check `userfrosting:monorepo` condition is set in root vite.config.ts +5. **PHP-DI not resolving**: Verify service provider is registered in sprinkle's `getServices()` + +## Key Files to Reference + +- [SprinkleManager.php](packages/framework/src/Sprinkle/SprinkleManager.php) - Sprinkle loading logic +- [Cupcake.php](packages/framework/src/Cupcake.php) - Base application class +- [MyApp.php](packages/skeleton/app/src/MyApp.php) - Example sprinkle implementation +- [vite.config.ts](vite.config.ts) - Monorepo Vite configuration +- [monorepo-builder.php](monorepo-builder.php) - Composer monorepo config + +## Resources + +- [Official Docs](https://learn.userfrosting.com) +- [Chat](https://chat.userfrosting.com) From 3f2ca6f45081e67f66ee9aa4c2a2633f5d333e7e Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 18:08:31 -0500 Subject: [PATCH 22/24] Add resolve conditions for monorepo support in Vite configurations and introduce Vitest configuration for theme-pink-cupcake --- packages/sprinkle-account/vite.config.ts | 3 +++ packages/sprinkle-admin/vite.config.ts | 3 +++ packages/sprinkle-core/vite.config.ts | 3 +++ packages/theme-pink-cupcake/vite.config.ts | 1 + packages/theme-pink-cupcake/vitest.config.ts | 24 ++++++++++++++++++++ 5 files changed, 34 insertions(+) create mode 100644 packages/theme-pink-cupcake/vitest.config.ts diff --git a/packages/sprinkle-account/vite.config.ts b/packages/sprinkle-account/vite.config.ts index 500e1c770..54a037010 100644 --- a/packages/sprinkle-account/vite.config.ts +++ b/packages/sprinkle-account/vite.config.ts @@ -9,6 +9,9 @@ import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ // https://stackoverflow.com/a/74397545/445757 export default defineConfig({ + resolve: { + conditions: ['userfrosting:monorepo', 'import'] + }, plugins: [ vue(), ViteYaml(), diff --git a/packages/sprinkle-admin/vite.config.ts b/packages/sprinkle-admin/vite.config.ts index 555ed2ed7..b7ce4a554 100644 --- a/packages/sprinkle-admin/vite.config.ts +++ b/packages/sprinkle-admin/vite.config.ts @@ -9,6 +9,9 @@ import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ // https://stackoverflow.com/a/74397545/445757 export default defineConfig({ + resolve: { + conditions: ['userfrosting:monorepo', 'import'] + }, plugins: [ vue(), ViteYaml(), diff --git a/packages/sprinkle-core/vite.config.ts b/packages/sprinkle-core/vite.config.ts index 42f1f98bf..4c4b5b5c1 100644 --- a/packages/sprinkle-core/vite.config.ts +++ b/packages/sprinkle-core/vite.config.ts @@ -7,6 +7,9 @@ import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ // https://stackoverflow.com/a/74397545/445757 export default defineConfig({ + resolve: { + conditions: ['userfrosting:monorepo', 'import'] + }, plugins: [ vue(), dts({ diff --git a/packages/theme-pink-cupcake/vite.config.ts b/packages/theme-pink-cupcake/vite.config.ts index 42546941d..6755890de 100644 --- a/packages/theme-pink-cupcake/vite.config.ts +++ b/packages/theme-pink-cupcake/vite.config.ts @@ -24,6 +24,7 @@ export default defineConfig({ ], // Add UIKit alias : https://stackoverflow.com/a/75264118/445757 resolve: { + conditions: ['userfrosting:monorepo', 'import'], alias: { '../../images/backgrounds': 'uikit/src/images/backgrounds', '../../images/components': 'uikit/src/images/components', diff --git a/packages/theme-pink-cupcake/vitest.config.ts b/packages/theme-pink-cupcake/vitest.config.ts new file mode 100644 index 000000000..1b085ba24 --- /dev/null +++ b/packages/theme-pink-cupcake/vitest.config.ts @@ -0,0 +1,24 @@ +/// +import { defineConfig } from 'vite' + +export default defineConfig({ + resolve: { + conditions: ['userfrosting:monorepo', 'import'] + }, + test: { + coverage: { + enabled: true, + reportsDirectory: './_meta/_coverage', + include: ['packages/**/app/assets/**/*.*', 'packages/**/src/**/*.*'] + }, + reporters: ['default', 'junit'], + outputFile: './_meta/junit_frontend.xml', + projects: [ + './packages/theme-pink-cupcake/vite.config.ts', + './packages/sprinkle-core/vite.config.ts', + './packages/sprinkle-account/vite.config.ts', + './packages/sprinkle-admin/vite.config.ts', + './packages/skeleton/vite.config.ts' + ] + } +}) From da34a43c5ea3dd2f72ab7da150252faf0fd8a010 Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 18:17:39 -0500 Subject: [PATCH 23/24] Remove Vitest configuration for theme-pink-cupcake package --- packages/theme-pink-cupcake/vitest.config.ts | 24 -------------------- 1 file changed, 24 deletions(-) delete mode 100644 packages/theme-pink-cupcake/vitest.config.ts diff --git a/packages/theme-pink-cupcake/vitest.config.ts b/packages/theme-pink-cupcake/vitest.config.ts deleted file mode 100644 index 1b085ba24..000000000 --- a/packages/theme-pink-cupcake/vitest.config.ts +++ /dev/null @@ -1,24 +0,0 @@ -/// -import { defineConfig } from 'vite' - -export default defineConfig({ - resolve: { - conditions: ['userfrosting:monorepo', 'import'] - }, - test: { - coverage: { - enabled: true, - reportsDirectory: './_meta/_coverage', - include: ['packages/**/app/assets/**/*.*', 'packages/**/src/**/*.*'] - }, - reporters: ['default', 'junit'], - outputFile: './_meta/junit_frontend.xml', - projects: [ - './packages/theme-pink-cupcake/vite.config.ts', - './packages/sprinkle-core/vite.config.ts', - './packages/sprinkle-account/vite.config.ts', - './packages/sprinkle-admin/vite.config.ts', - './packages/skeleton/vite.config.ts' - ] - } -}) From db948864945a0ca71287c3e54f2b95f0b2cf1b4b Mon Sep 17 00:00:00 2001 From: Louis Charette Date: Sat, 10 Jan 2026 18:21:31 -0500 Subject: [PATCH 24/24] Remove unnecessary conditions from Vite resolve configuration in vitest.config.ts --- vitest.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vitest.config.ts b/vitest.config.ts index c46dd34d3..1b085ba24 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -3,7 +3,7 @@ import { defineConfig } from 'vite' export default defineConfig({ resolve: { - conditions: ['userfrosting:monorepo', 'import', 'module', 'browser', 'default'] + conditions: ['userfrosting:monorepo', 'import'] }, test: { coverage: {