create-bubbles 0.1.26 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +4 -4
- package/package.json +10 -2
- package/template-pnpm-vp-monorepo/.changeset/README.md +8 -0
- package/template-pnpm-vp-monorepo/.changeset/config.json +11 -0
- package/template-pnpm-vp-monorepo/.gitattributes +5 -0
- package/template-pnpm-vp-monorepo/.github/workflows/ci.yml +33 -0
- package/template-pnpm-vp-monorepo/.github/workflows/docs.yml +55 -0
- package/template-pnpm-vp-monorepo/.github/workflows/release.yml +54 -0
- package/template-pnpm-vp-monorepo/.vite-hooks/commit-msg +1 -0
- package/template-pnpm-vp-monorepo/.vite-hooks/pre-commit +1 -0
- package/template-pnpm-vp-monorepo/.vite-hooks/run.mjs +17 -0
- package/template-pnpm-vp-monorepo/.vscode/settings.json +23 -0
- package/{LICENSE → template-pnpm-vp-monorepo/LICENSE} +2 -2
- package/template-pnpm-vp-monorepo/README.md +93 -0
- package/template-pnpm-vp-monorepo/_gitignore +43 -0
- package/template-pnpm-vp-monorepo/apps/docs/.vitepress/config.mts +69 -0
- package/template-pnpm-vp-monorepo/apps/docs/guide/getting-started.md +70 -0
- package/template-pnpm-vp-monorepo/apps/docs/guide/release.md +73 -0
- package/template-pnpm-vp-monorepo/apps/docs/guide/workspace.md +84 -0
- package/template-pnpm-vp-monorepo/apps/docs/index.md +22 -0
- package/template-pnpm-vp-monorepo/apps/docs/package.json +23 -0
- package/template-pnpm-vp-monorepo/apps/docs/tsconfig.json +7 -0
- package/template-pnpm-vp-monorepo/apps/docs/vite.config.ts +12 -0
- package/template-pnpm-vp-monorepo/apps/playground/index.html +14 -0
- package/template-pnpm-vp-monorepo/apps/playground/package.json +24 -0
- package/template-pnpm-vp-monorepo/apps/playground/src/App.vue +214 -0
- package/template-pnpm-vp-monorepo/apps/playground/src/env.d.ts +6 -0
- package/template-pnpm-vp-monorepo/apps/playground/src/main.ts +6 -0
- package/template-pnpm-vp-monorepo/apps/playground/src/style.css +728 -0
- package/template-pnpm-vp-monorepo/apps/playground/tsconfig.json +10 -0
- package/template-pnpm-vp-monorepo/apps/playground/vite.config.ts +29 -0
- package/template-pnpm-vp-monorepo/commitlint.config.mjs +3 -0
- package/template-pnpm-vp-monorepo/eslint.config.mjs +22 -0
- package/template-pnpm-vp-monorepo/mise.toml +3 -0
- package/template-pnpm-vp-monorepo/package.json +40 -0
- package/template-pnpm-vp-monorepo/packages/utils/LICENSE +21 -0
- package/template-pnpm-vp-monorepo/packages/utils/README.md +26 -0
- package/template-pnpm-vp-monorepo/packages/utils/_gitignore +4 -0
- package/template-pnpm-vp-monorepo/packages/utils/package.json +42 -0
- package/template-pnpm-vp-monorepo/packages/utils/scripts/verify-package.mjs +127 -0
- package/template-pnpm-vp-monorepo/packages/utils/src/index.ts +12 -0
- package/template-pnpm-vp-monorepo/packages/utils/tests/consumer/commonjs.cts +20 -0
- package/template-pnpm-vp-monorepo/packages/utils/tests/consumer/esm.mts +20 -0
- package/template-pnpm-vp-monorepo/packages/utils/tests/consumer/tsconfig.json +10 -0
- package/template-pnpm-vp-monorepo/packages/utils/tests/index.test.ts +30 -0
- package/template-pnpm-vp-monorepo/packages/utils/tsconfig.json +4 -0
- package/template-pnpm-vp-monorepo/packages/utils/vite.config.ts +20 -0
- package/template-pnpm-vp-monorepo/pnpm-workspace.yaml +27 -0
- package/template-pnpm-vp-monorepo/tsconfig/base.json +22 -0
- package/template-pnpm-vp-monorepo/tsconfig/node.json +8 -0
- package/template-pnpm-vp-monorepo/tsconfig/vue.json +7 -0
- package/template-pnpm-vp-monorepo/tsconfig.json +4 -0
- package/template-pnpm-vp-monorepo/vite.config.ts +38 -0
- package/template-vp-monorepo-react-nestjs/.agents/rules//345/205/261/344/272/253/344/273/243/347/240/201.md +2 -2
- package/template-vp-monorepo-react-nestjs/.agents/rules//351/234/200/346/261/202/344/270/216/350/256/276/350/256/241/346/226/207/346/241/243.md +50 -0
- package/template-vp-monorepo-react-nestjs/.codegraph/.gitignore +5 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/PRD.md +121 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/ui/cleanup-empty-preview.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/ui/company-created.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/ui/login-desktop.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/ui/member-role-assigned.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/ui/permission-revoked.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/ui/platform-menu-recovery.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/ui/project-created.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/ui/project-member-home.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/ui/replacement-administrator.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225/ui/workspace-empty.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//345/206/263/347/255/226/350/256/260/345/275/225.md +29 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//345/211/215/347/253/257/344/272/244/346/216/245.md +74 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//345/220/216/347/253/257/346/265/213/350/257/225/346/212/245/345/221/212.md +115 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//346/212/200/346/234/257/345/245/221/347/272/246.md +580 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//346/265/213/350/257/225/346/212/245/345/221/212.md +137 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//346/265/213/350/257/225/350/257/201/346/215/256/browser.json +84 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//346/265/213/350/257/225/350/257/201/346/215/256/http.json +108 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//346/265/213/350/257/225/350/257/201/346/215/256/legacy-http.json +18 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//346/265/213/350/257/225/350/257/201/346/215/256/legacy.json +24 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//350/201/224/350/260/203/350/256/260/345/275/225.md +76 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//350/277/220/350/241/214/350/257/264/346/230/216.md +117 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//346/235/203/351/231/220/344/270/216/350/217/234/345/215/225//351/234/200/346/261/202/346/226/207/346/241/243.md +275 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//347/273/204/347/273/207/346/236/266/346/236/204//345/206/263/347/255/226/350/256/260/345/275/225.md +35 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//347/273/204/347/273/207/346/236/266/346/236/204//346/212/200/346/234/257/345/245/221/347/272/246.md +744 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//347/273/204/347/273/207/346/236/266/346/236/204//346/265/213/350/257/225/346/212/245/345/221/212.md +174 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//347/273/204/347/273/207/346/236/266/346/236/204//350/201/224/350/260/203/350/256/260/345/275/225.md +137 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//347/273/204/347/273/207/346/236/266/346/236/204//350/256/276/350/256/241/346/226/271/346/241/210.md +215 -0
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//347/273/204/347/273/207/346/236/266/346/236/204//351/234/200/346/261/202/346/226/207/346/241/243.md +421 -0
- package/template-vp-monorepo-react-nestjs/.spaces/{server/05./344/270/212/344/274/240/346/224/271/351/200/240/346/226/271/346/241/210/README.md → 02./344/270/212/344/274/240/344/270/216/346/226/207/344/273/266//344/270/212/344/274/240/346/224/271/351/200/240//350/256/276/350/256/241/346/226/271/346/241/210.md} +13 -20
- package/template-vp-monorepo-react-nestjs/.spaces/{server/06./345/205/254/345/205/261/351/230/237/345/210/227/346/216/245/345/205/245/346/226/271/346/241/210//344/270/212/344/274/240/346/270/205/347/220/206.md → 02./344/270/212/344/274/240/344/270/216/346/226/207/344/273/266//344/270/212/344/274/240/346/270/205/347/220/206//350/256/276/350/256/241/346/226/271/346/241/210.md} +13 -8
- package/template-vp-monorepo-react-nestjs/.spaces/{server/04.upload.md → 02./344/270/212/344/274/240/344/270/216/346/226/207/344/273/266//345/210/206/347/211/207/344/270/212/344/274/240//345/256/236/346/226/275/346/225/231/347/250/213.md} +21 -18
- package/template-vp-monorepo-react-nestjs/.spaces/{server/06./345/205/254/345/205/261/351/230/237/345/210/227/346/216/245/345/205/245/346/226/271/346/241/210/README.md → 03./344/273/273/345/212/241/351/230/237/345/210/227//345/205/254/345/205/261/351/230/237/345/210/227//350/256/276/350/256/241/346/226/271/346/241/210.md} +13 -6
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/accounts-mobile-320.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/accounts-mobile-360.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/accounts-mobile-390.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/companies-desktop-data.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/companies-desktop-empty.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/companies-mobile-320.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/companies-mobile-360.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/companies-mobile-390.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/company-create-dialog.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/company-projects-1440.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/company-projects-390.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/login-1440.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/login-390.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/project-home-1440.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/project-home-390.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/register-1440.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/register-390.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/workspaces-1440.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/workspaces-390.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273/ui/workspaces-empty.png +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273//345/267/245/345/205/267/fixtures.mjs +132 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273//345/267/245/345/205/267/visual-check.mjs +274 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273//346/265/213/350/257/225/350/257/201/346/215/256/visual-report.json +104 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//344/270/207/347/211/251/346/242/246/345/271/273//351/252/214/350/257/201/350/257/264/346/230/216.md +25 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//344/272/244/344/273/230/350/256/260/345/275/225.md +21 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//345/217/221/345/270/203/350/257/204/344/274/260.md +93 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//345/267/245/345/205/267//350/277/220/350/241/214/346/227/266/345/217/221/345/270/203/346/243/200/346/237/245.mjs +340 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/346/212/245/345/221/212.md +41 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214/comment-clean/catalog/en_US.json +4 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214/comment-clean/i18n.config.mjs +9 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214/comment-clean/report.json +16 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214/comment-clean/source/app.ts +2 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214/empty-scan/catalog/en_US.json +4 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214/empty-scan/i18n.config.mjs +9 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214/empty-scan/report.json +19 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214/output.json +84 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214//345/275/223/345/211/215/345/244/215/351/252/214.json +86 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214//346/243/200/346/237/245/347/273/223/346/236/234.json +30 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256/cli-/346/211/253/346/217/217/350/276/271/347/225/214//346/263/250/351/207/212/345/233/236/345/275/222.json +40 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256//345/214/205/345/217/221/345/270/203/bubblesjs-i18n-core-0.0.0.tgz +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256//345/214/205/345/217/221/345/270/203/bubblesjs-i18n-react-0.0.0.tgz +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256//345/214/205/345/217/221/345/270/203/bubblesjs-i18n-vue-0.0.1.tgz +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256//345/214/205/345/217/221/345/270/203//344/272/247/347/211/251/345/244/215/351/252/214.json +419 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256//345/214/205/345/217/221/345/270/203//346/243/200/346/237/245/347/273/223/346/236/234.json +339 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//346/265/213/350/257/225/350/257/201/346/215/256//350/277/220/350/241/214/346/227/266/345/217/221/345/270/203/346/243/200/346/237/245.json +131 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//350/256/276/350/256/241/346/226/271/346/241/210.md +37 -0
- package/template-vp-monorepo-react-nestjs/.spaces/04./347/225/214/351/235/242/344/270/216/344/270/273/351/242/230//345/233/275/351/231/205/345/214/226//351/234/200/346/261/202/346/226/207/346/241/243.md +42 -0
- package/template-vp-monorepo-react-nestjs/.spaces/05./350/277/220/350/241/214/347/273/264/346/212/244//345/271/263/345/217/260/346/223/215/344/275/234/346/211/213/345/206/214.md +397 -0
- package/template-vp-monorepo-react-nestjs/.spaces/05./350/277/220/350/241/214/347/273/264/346/212/244//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273//345/244/207/344/273/275/backup.dump +0 -0
- package/template-vp-monorepo-react-nestjs/.spaces/05./350/277/220/350/241/214/347/273/264/346/212/244//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273//345/244/207/344/273/275/export-dump.ps1 +34 -0
- package/template-vp-monorepo-react-nestjs/.spaces/05./350/277/220/350/241/214/347/273/264/346/212/244//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273//345/244/207/344/273/275/restore-dump.ps1 +73 -0
- package/template-vp-monorepo-react-nestjs/.spaces/05./350/277/220/350/241/214/347/273/264/346/212/244//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273//346/223/215/344/275/234/346/214/207/345/215/227.md +227 -0
- package/template-vp-monorepo-react-nestjs/.spaces/05./350/277/220/350/241/214/347/273/264/346/212/244//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273//351/234/200/346/261/202/346/226/207/346/241/243.md +31 -0
- package/template-vp-monorepo-react-nestjs/.spaces/06./350/256/244/350/257/201/344/270/216/344/274/232/350/257/235//344/274/232/350/257/235/347/256/241/347/220/206//346/212/200/346/234/257/345/245/221/347/272/246.md +96 -0
- package/template-vp-monorepo-react-nestjs/.spaces/06./350/256/244/350/257/201/344/270/216/344/274/232/350/257/235//344/274/232/350/257/235/347/256/241/347/220/206//351/234/200/346/261/202/346/226/207/346/241/243.md +88 -0
- package/template-vp-monorepo-react-nestjs/.spaces/06./350/256/244/350/257/201/344/270/216/344/274/232/350/257/235//344/277/256/346/224/271/345/257/206/347/240/201/PRD.md +56 -0
- package/template-vp-monorepo-react-nestjs/.spaces/06./350/256/244/350/257/201/344/270/216/344/274/232/350/257/235//344/277/256/346/224/271/345/257/206/347/240/201//346/212/200/346/234/257/345/245/221/347/272/246.md +93 -0
- package/template-vp-monorepo-react-nestjs/.spaces/06./350/256/244/350/257/201/344/270/216/344/274/232/350/257/235//344/277/256/346/224/271/345/257/206/347/240/201//346/265/213/350/257/225/346/212/245/345/221/212.md +41 -0
- package/template-vp-monorepo-react-nestjs/.spaces/06./350/256/244/350/257/201/344/270/216/344/274/232/350/257/235//344/277/256/346/224/271/345/257/206/347/240/201//350/201/224/350/260/203/350/256/260/345/275/225.md +27 -0
- package/template-vp-monorepo-react-nestjs/.spaces/06./350/256/244/350/257/201/344/270/216/344/274/232/350/257/235//344/277/256/346/224/271/345/257/206/347/240/201//350/256/276/350/256/241/346/226/271/346/241/210.md +54 -0
- package/template-vp-monorepo-react-nestjs/.spaces/06./350/256/244/350/257/201/344/270/216/344/274/232/350/257/235//344/277/256/346/224/271/345/257/206/347/240/201//351/234/200/346/261/202/346/226/207/346/241/243.md +64 -0
- package/template-vp-monorepo-react-nestjs/.spaces/07.API/344/270/216/351/224/231/350/257/257//346/212/200/346/234/257/345/245/221/347/272/246.md +95 -0
- package/template-vp-monorepo-react-nestjs/.spaces/README.md +86 -0
- package/template-vp-monorepo-react-nestjs/.spaces//346/226/207/346/241/243/350/247/204/350/214/203.md +97 -0
- package/template-vp-monorepo-react-nestjs/AGENTS.md +12 -0
- package/template-vp-monorepo-react-nestjs/README.md +3 -27
- package/template-vp-monorepo-react-nestjs/apps/server/drizzle/0002_enterprise_access.sql +182 -0
- package/template-vp-monorepo-react-nestjs/apps/server/drizzle/0003_cute_killmonger.sql +357 -0
- package/template-vp-monorepo-react-nestjs/apps/server/drizzle/0004_company-member-invitations.sql +25 -0
- package/template-vp-monorepo-react-nestjs/apps/server/drizzle/0005_menu_svg_icons.sql +54 -0
- package/template-vp-monorepo-react-nestjs/apps/server/drizzle/meta/0002_snapshot.json +1801 -0
- package/template-vp-monorepo-react-nestjs/apps/server/drizzle/meta/0003_snapshot.json +3511 -0
- package/template-vp-monorepo-react-nestjs/apps/server/drizzle/meta/0004_snapshot.json +3713 -0
- package/template-vp-monorepo-react-nestjs/apps/server/drizzle/meta/_journal.json +29 -1
- package/template-vp-monorepo-react-nestjs/apps/server/drizzle/rollback/0003_organization_backfill.sql +32 -0
- package/template-vp-monorepo-react-nestjs/apps/server/package.json +6 -4
- package/template-vp-monorepo-react-nestjs/apps/server/src/access-init.ts +45 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/app.controller.ts +3 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/app.module.ts +28 -5
- package/template-vp-monorepo-react-nestjs/apps/server/src/app.service.ts +3 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/common/adapters/fastify.adapter.ts +11 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/common/constants/session.constants.ts +9 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/common/decorators/access-policy.decorator.ts +18 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/common/decorators/current-auth.decorator.ts +4 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/common/decorators/public.decorator.ts +3 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/common/exceptions/app.exception.ts +9 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/common/filters/global-exception.filter.ts +38 -5
- package/template-vp-monorepo-react-nestjs/apps/server/src/common/security/password-security-event.ts +98 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/config/app.config.ts +3 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/config/database.config.ts +3 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/config/llm.config.ts +3 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/config/queue.config.ts +14 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/config/redis.config.ts +3 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/config/session.config.ts +7 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/config/storage.config.ts +9 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/database/access.schema.ts +394 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/database/db.module.ts +3 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/database/organization.schema.ts +453 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/database/schema.ts +6 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/main.ts +4 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/access-http.ts +29 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/access.errors.ts +130 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/access.guard.ts +63 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/access.module.ts +27 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/access.service.ts +441 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/access.store.ts +68 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/access.validation.ts +44 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/maintenance/permissions-cleanup.controller.ts +27 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/maintenance/permissions-cleanup.service.ts +260 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/maintenance/permissions-cleanup.validation.ts +7 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/roles/roles.controller.ts +80 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/roles/roles.service.ts +249 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/roles/roles.validation.ts +24 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/seed/access-seed.service.ts +183 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/workspaces/workspaces.controller.ts +28 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/workspaces/workspaces.service.ts +94 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/access/workspaces/workspaces.validation.ts +5 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/audit/audit.controller.ts +26 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/audit/audit.module.ts +11 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/audit/audit.service.ts +74 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/audit/audit.validation.ts +11 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/auth.controller.ts +25 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/auth.errors.ts +10 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/auth.module.ts +1 -1
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/auth.repository.ts +60 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/auth.service.ts +69 -11
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/dto/register.dto.ts +1 -1
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/guards/session-auth.guard.ts +8 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/password/change-password.dto.ts +17 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/password.service.ts +6 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/session/session-store.service.ts +46 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/session/session-token.service.ts +12 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/auth/session/session.script.ts +7 -1
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/companies/companies.controller.ts +105 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/companies/companies.module.ts +12 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/companies/companies.service.ts +523 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/accounts/accounts.controller.ts +72 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/accounts/accounts.service.ts +154 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/accounts/accounts.validation.ts +8 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/accounts/password-reset/password-reset.service.ts +81 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/accounts/password-reset/reset-password.validation.ts +13 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/administrators/administrators.service.ts +116 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/administrators/administrators.validation.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/invitations/company-member-invitations.controller.ts +69 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/invitations/member-invitation-acceptance.controller.ts +23 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/invitations/member-invitations.service.ts +344 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/invitations/member-invitations.validation.ts +23 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/members.controller.ts +88 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/members.module.ts +31 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/members.service.ts +573 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/members/members.validation.ts +19 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/menus/menus.controller.ts +56 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/menus/menus.module.ts +11 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/menus/menus.service.ts +230 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/menus/menus.validation.ts +30 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/candidates/global-account/global-account-candidates.controller.ts +35 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/candidates/global-account/global-account-candidates.service.ts +109 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/candidates/member-candidates.controller.ts +60 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/candidates/member-candidates.service.ts +939 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/initialization/project-organization-initialization.service.ts +189 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/organization.module.ts +34 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/organization.store.ts +150 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/organization.validation.ts +23 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/positions/positions.controller.ts +160 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/positions/positions.service.ts +636 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/templates/organization-templates.controller.ts +77 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/templates/organization-templates.service.ts +501 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/templates/organization-templates.store.ts +163 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/units/organization-units.controller.ts +187 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/organization/units/organization-units.service.ts +947 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/projects/projects.controller.ts +94 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/projects/projects.module.ts +13 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/projects/projects.service.ts +369 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/task-queue/queue-worker.bootstrap.ts +3 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/task-queue/task-queue.contracts.ts +4 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/task-queue/task-queue.module.ts +5 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/task-queue/task-queue.processor.ts +13 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/task-queue/task-queue.service.ts +9 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/test/db/db.controller.ts +9 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/test/db/db.service.ts +9 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/test/redis/redis.controller.ts +9 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/test/redis/redis.service.ts +18 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/upload/dto/upload-params.dto.ts +1 -1
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/upload/storage/exact-size.transform.ts +14 -3
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/upload/storage/minio-storage.adapter.ts +37 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/upload/storage/storage.port.ts +21 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/upload/upload.constants.ts +9 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/upload/upload.controller.ts +25 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/upload/upload.reponsitory.ts +27 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/upload/upload.service.ts +78 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/modules/upload/utils/object-key.ts +4 -0
- package/template-vp-monorepo-react-nestjs/apps/server/src/utils/server-address.ts +6 -0
- package/template-vp-monorepo-react-nestjs/apps/server/test/access/access-policy.spec.ts +95 -0
- package/template-vp-monorepo-react-nestjs/apps/server/test/access/access.integration.spec.ts +2250 -0
- package/template-vp-monorepo-react-nestjs/apps/server/test/access/member-onboarding.validation.spec.ts +78 -0
- package/template-vp-monorepo-react-nestjs/apps/server/test/auth/password/password-operations.spec.ts +433 -0
- package/template-vp-monorepo-react-nestjs/apps/server/test/auth/password/password.integration.spec.ts +300 -0
- package/template-vp-monorepo-react-nestjs/apps/server/test/error-catalog.spec.ts +6 -1
- package/template-vp-monorepo-react-nestjs/apps/server/test/menus.validation.spec.ts +28 -0
- package/template-vp-monorepo-react-nestjs/apps/server/test/organization/organization-domain.spec.ts +260 -0
- package/template-vp-monorepo-react-nestjs/apps/server/tsconfig.scripts.json +5 -0
- package/template-vp-monorepo-react-nestjs/apps/web/.agents/rules//347/273/204/344/273/266/345/244/215/347/224/250.md +7 -0
- package/template-vp-monorepo-react-nestjs/apps/web/.agents/rules//350/241/250/345/215/225/345/233/236/345/241/253.md +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/AGENTS.md +17 -8
- package/template-vp-monorepo-react-nestjs/apps/web/README.MD +36 -8
- package/template-vp-monorepo-react-nestjs/apps/web/index.html +2 -2
- package/template-vp-monorepo-react-nestjs/apps/web/package.json +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/App.tsx +19 -8
- package/template-vp-monorepo-react-nestjs/apps/web/src/api/auth.ts +14 -1
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/accounts.svg +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/audit-log.svg +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/companies.svg +5 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/dashboard.svg +6 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/home.svg +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/members.svg +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/menu-item.svg +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/menus.svg +6 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/organization-template.svg +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/organization.svg +6 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/positions.svg +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/profile.svg +5 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/projects.svg +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/assets/svg/roles.svg +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Brand/Brand.module.css +125 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Brand/Brand.tsx +56 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/DraftProTable/DraftProTable.tsx +11 -5
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Icon/SvgAsset/IconSelector.tsx +38 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Icon/SvgAsset/SvgAssetIcon.tsx +14 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Icon/SvgAsset/SvgAssetRegistry.ts +32 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Icon/SvgAsset/index.ts +10 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Icon/svg-icon/SvgIcon.tsx +0 -2
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Loading/PageLoading.tsx +5 -1
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/LocaleSwitch/LocaleSwitch.tsx +52 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/PasswordActions/ChangePasswordDialog.tsx +90 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/PasswordActions/PasswordFields.module.css +12 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/PasswordActions/PasswordFields.tsx +54 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/PasswordActions/ResetAccountPasswordDialog.tsx +100 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/PasswordActions/change-password-session.ts +13 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/RouteTransition/RouteTransition.css +60 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/RouteTransition/RouteTransition.tsx +44 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/BasicTableSelector/BasicTableSelector.tsx +218 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/BasicTableSelector/BasicTableSelectorSelection.ts +91 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/BasicTableSelector/BasicTableSelectorTypes.ts +60 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/BasicTableSelector/README.md +110 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/BasicTableSelector/index.ts +7 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/GlobalAccountSelect/GlobalAccountSelect.tsx +211 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/GlobalAccountSelect/GlobalAccountSelectTypes.ts +75 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/GlobalAccountSelect/README.md +35 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/GlobalAccountSelect/index.ts +9 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/OrganizationMemberSelector/OrganizationMemberBrowser.tsx +146 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/OrganizationMemberSelector/OrganizationMemberCandidateColumns.tsx +137 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/OrganizationMemberSelector/OrganizationMemberFilterPanel.tsx +209 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/OrganizationMemberSelector/OrganizationMemberSelector.tsx +196 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/OrganizationMemberSelector/OrganizationMemberSelectorTypes.ts +103 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/OrganizationMemberSelector/README.md +8 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/OrganizationMemberSelector/index.ts +13 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/README.md +13 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/components/Selector/index.ts +30 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/config/theme.ts +41 -9
- package/template-vp-monorepo-react-nestjs/apps/web/src/hooks/useLatestDialogRequest.ts +71 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/i18n/config.ts +40 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/i18n/index.ts +10 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/i18n/instance.ts +36 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/i18n/ui-locale.ts +30 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/layouts/{BasicLayout.tsx → BasicLayout/index.tsx} +42 -35
- package/template-vp-monorepo-react-nestjs/apps/web/src/layouts/WorkspaceLayout/components/WorkspaceNavigationBoundary.tsx +50 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/layouts/WorkspaceLayout/index.tsx +196 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/layouts/WorkspaceLayout/workspace-landing.css +119 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/layouts/WorkspaceLayout/workspace-surfaces.css +110 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/layouts/WorkspaceLayout/workspace.css +223 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/locales/en_US.json +639 -1
- package/template-vp-monorepo-react-nestjs/apps/web/src/locales/zh_CN.json +621 -1
- package/template-vp-monorepo-react-nestjs/apps/web/src/main.tsx +8 -2
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/api.ts +226 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/audit.tsx +169 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/AdministratorDialog.tsx +128 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/CleanupDialog.tsx +140 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/CompanyHierarchyDialog.tsx +244 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/EntityFormDialog.tsx +285 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/EntitySelectors/index.ts +6 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/EntitySelectors/selector-requests.ts +59 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberAffiliations/MemberOrganizationsDialog.tsx +188 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberAffiliations/MemberPositionsDialog.tsx +116 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberAffiliations/affiliation-loaders.ts +18 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberAffiliations/index.ts +5 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberOnboarding/AddProjectMemberDialog.tsx +75 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberOnboarding/CompanyMemberInvitation/CompanyMemberInvitationDialog.tsx +246 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberOnboarding/CompanyMemberInvitation/InvitationRecordsTable.tsx +152 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberOnboarding/CompanyMemberInvitation/invitation-link.ts +9 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberOnboarding/MemberOnboardingActions.tsx +79 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberOnboarding/RegisterCompanyMember/RegisterCompanyMemberDialog.module.css +12 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberOnboarding/RegisterCompanyMember/RegisterCompanyMemberDialog.tsx +122 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberRolesDialog.tsx +80 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberTable/MemberTableColumns.tsx +234 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberTable/index.ts +2 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MemberTable/member-candidate-cache.ts +12 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/MenuFormDialog.tsx +251 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/RoleFormDialog.tsx +73 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/components/RolePermissionsDialog.tsx +185 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/entities.tsx +268 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/home.tsx +67 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/members.tsx +310 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/menus/api.ts +74 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/menus/index.tsx +325 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/profile.tsx +160 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/roles.tsx +173 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/access/use-access.ts +35 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/error/404.tsx +20 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/error/error.tsx +42 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/examples/i18n/index.tsx +20 -38
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/examples/pro-table/components/ProjectFormDialog.tsx +46 -41
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/examples/pro-table/config/columns.tsx +20 -15
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/examples/pro-table/config/index.ts +32 -22
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/examples/pro-table/draft/components/DraftProjectFormDialog.tsx +41 -34
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/examples/pro-table/draft/config/columns.tsx +27 -20
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/examples/pro-table/draft/config/projects.ts +21 -13
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/examples/pro-table/draft/index.tsx +47 -27
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/examples/pro-table/index.tsx +51 -36
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/home/index.tsx +9 -6
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/login/api.ts +3 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/login/index.tsx +62 -82
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/login/login-form.css +199 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/login/login.css +146 -124
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/member-invitations/accept.css +47 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/member-invitations/accept.tsx +143 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/member-invitations/api.ts +20 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/api.ts +91 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/components/MoveOrganizationUnitDialog.tsx +82 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/components/OrganizationBrowser/OrganizationMemberColumns.tsx +87 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/components/OrganizationBrowser/OrganizationMemberHeader.tsx +102 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/components/OrganizationBrowser/OrganizationTreeModel.tsx +59 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/components/OrganizationBrowser/OrganizationTreePanel.tsx +88 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/components/OrganizationBrowser/index.ts +11 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/components/OrganizationBrowser/organization-loaders.ts +47 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/components/OrganizationBrowser/organization-member-filter-loaders.ts +187 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/components/OrganizationMembersDialog.tsx +207 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/components/OrganizationUnitDialog.tsx +110 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization/index.tsx +258 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization-templates/api.ts +53 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization-templates/components/OrganizationTemplateDialog/TemplateDefinitionTabs.tsx +189 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization-templates/components/OrganizationTemplateDialog/index.tsx +135 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization-templates/components/OrganizationTemplateDialog/types.ts +25 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/organization-templates/index.tsx +201 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/positions/api.ts +81 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/positions/components/PositionFormDialog.tsx +86 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/positions/components/PositionMembersDialog.tsx +102 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/positions/index.tsx +198 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/positions/loaders.ts +35 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/register/api.ts +14 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/register/index.tsx +157 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/workspaces/api.ts +32 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/workspaces/index.tsx +146 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/pages/workspaces/state.ts +24 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/AGENTS.MD +6 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/index.tsx +2 -46
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/lazy-load/index.tsx +26 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/middleware/README.md +23 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/middleware/auth.ts +6 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/middleware/index.ts +4 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/middleware/workspace/access.ts +23 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/middleware/workspace/data.ts +55 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/middleware/workspace/entry.ts +52 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/modules/access/page.tsx +20 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/modules/auth.tsx +17 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/modules/company.tsx +30 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/modules/entry.tsx +20 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/modules/examples.tsx +23 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/modules/fallback.tsx +13 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/modules/index.tsx +32 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/modules/platform.tsx +27 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/modules/project.tsx +28 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/page-registry.tsx +94 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/styles/dream.css +34 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/styles/index.css +6 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/types/auto-imports.d.ts +26 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/utils/organization-assignment.ts +66 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/utils/request/core/index.ts +48 -13
- package/template-vp-monorepo-react-nestjs/apps/web/src/utils/request/core/utils.ts +5 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/utils/request/index.ts +7 -2
- package/template-vp-monorepo-react-nestjs/apps/web/src/utils/request/workspace.ts +82 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/utils/safe-next.ts +36 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/utils/storage/cookie.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web/src/utils/storage/session.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/i18n-locale.spec.ts +22 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/icon-selector.spec.tsx +23 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/latest-dialog-request.spec.ts +89 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/member-invitation-navigation.spec.ts +34 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/organization-assignment.spec.ts +137 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/password/password-actions.spec.ts +40 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/password/password-reset-action.spec.ts +66 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/password/workspaces-password-entry.spec.tsx +71 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/request.spec.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/router/access.spec.ts +136 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/router/config.ts +140 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/router/entry.spec.ts +179 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/router/workspace-data.spec.ts +112 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/selector/global-account-select.spec.ts +311 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/selector/organization-member-selector.spec.ts +454 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/selector/selector-selection.spec.ts +132 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/storage.spec.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/tsconfig.json +2 -2
- package/template-vp-monorepo-react-nestjs/apps/web/test/workspace-navigation-boundary.spec.tsx +169 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/workspace-navigation.spec.ts +105 -0
- package/template-vp-monorepo-react-nestjs/apps/web/test/workspace-requests.spec.ts +174 -0
- package/template-vp-monorepo-react-nestjs/apps/web/vite.config.ts +84 -35
- package/template-vp-monorepo-react-nestjs/apps/web-vue/package.json +2 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/api/index.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/hooks/chart/useEcharts.ts +13 -1
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/layout/default/header/index.vue +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/layout/default/index.vue +6 -2
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/router/guard/index.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/router/guard/permissionGuard.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/router/index.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/store/index.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/store/modules/user.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/types/auto-import.d.ts +2 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/utils/request/core/index.ts +30 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/utils/request/core/utils.ts +5 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/utils/request/index.ts +2 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/src/views/example/echart/config.ts +1 -0
- package/template-vp-monorepo-react-nestjs/apps/web-vue/tsconfig.tsbuildinfo +1 -1
- package/template-vp-monorepo-react-nestjs/package.json +1 -8
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/README.md +2 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/src/command.ts +22 -2
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/src/config.ts +1 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/src/files.ts +1 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/src/load-config.ts +8 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/src/report.ts +2 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/src/scanner.test.ts +88 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/src/scanner.ts +42 -8
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/src/sync.ts +12 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/test/command.test.ts +37 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/cli/test/temporary-directory.ts +5 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/core/src/format.ts +1 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/core/src/i18n.ts +14 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/core/src/storage.ts +8 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/core/src/store.ts +9 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/react/src/index.tsx +5 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/react/src/use-store.ts +18 -5
- package/template-vp-monorepo-react-nestjs/packages/i18n/vue/src/index.ts +6 -0
- package/template-vp-monorepo-react-nestjs/packages/i18n/vue/src/use-store.ts +3 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/package.json +5 -1
- package/template-vp-monorepo-react-nestjs/packages/shared/src/index.ts +2 -13
- package/template-vp-monorepo-react-nestjs/packages/shared/src/types/access-maintenance.ts +68 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/types/access-menus.ts +94 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/types/access-resources.ts +168 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/types/access.ts +71 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/types/auth.ts +23 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/types/index.ts +9 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/types/organization/models.ts +361 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/utils/access-catalog.ts +304 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/utils/access-scope.ts +97 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/utils/account.ts +1 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/utils/index.ts +65 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/utils/organization/contracts.ts +237 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/utils/record.ts +10 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/src/utils/session-terminal.ts +1 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/test/access.spec.ts +194 -0
- package/template-vp-monorepo-react-nestjs/packages/shared/test/organization.spec.ts +168 -0
- package/template-vp-monorepo-react-nestjs/pnpm-workspace.yaml +103 -69
- package/template-vp-monorepo-react-nestjs/scripts/enterprise-qa/browser.mjs +696 -0
- package/template-vp-monorepo-react-nestjs/scripts/enterprise-qa/http-support.mjs +105 -0
- package/template-vp-monorepo-react-nestjs/scripts/enterprise-qa/http.mjs +1091 -0
- package/template-vp-monorepo-react-nestjs/scripts/enterprise-qa/legacy-http.mjs +140 -0
- package/template-vp-monorepo-react-nestjs/scripts/enterprise-qa/legacy.mjs +196 -0
- package/template-vp-monorepo-react-nestjs/scripts/enterprise-qa/runtime.mjs +110 -0
- package/template-vp-monorepo-react-nestjs/scripts/with-enterprise-test-env.mjs +80 -0
- package/template-vp-monorepo-react-nestjs/src/types/auto-imports.d.ts +60 -0
- package/template-vp-monorepo-react-nestjs/tsconfig.lib.json +1 -1
- package/template-vp-react/package.json +12 -12
- package/template-vp-react/src/types/auto-imports.d.ts +2 -0
- package/template-vp-vue-eslint-vapor/.vscode/settings.json +53 -0
- package/template-vp-vue-eslint-vapor/package.json +21 -20
- package/template-vp-vue-eslint-vapor/pnpm-workspace.yaml +0 -24
- package/template-vp-vue-eslint-vapor/src/main.ts +2 -3
- package/template-vp-vue-eslint-vapor/vite.config.ts +26 -31
- package/template-vp-monorepo-react-nestjs/.spaces/01./344/274/201/344/270/232/347/272/247/351/241/271/347/233/256/347/272/247//351/234/200/346/261/202/346/226/207/346/241/243.md +0 -177
- package/template-vp-monorepo-react-nestjs/apps/web/src/layouts/BasicLayout.module.css +0 -17
- package/template-vp-monorepo-react-nestjs/apps/web/src/router/modules/.gitkeep +0 -0
- package/template-vp-react/.agents/rules/SVG/344/275/277/347/224/250.md +0 -8
- package/template-vp-react/.vscode/settings.json +0 -11
- package/template-vp-react/AGENTS.md +0 -11
- /package/{template-vp-vue-eslint-vapor → template-pnpm-vp-monorepo}/.vscode/extensions.json +0 -0
- /package/template-vp-monorepo-react-nestjs/apps/web/src/assets/{hero.png → image/hero.png} +0 -0
- /package/template-vp-monorepo-react-nestjs/apps/web/src/assets/{react.svg → svg/react.svg} +0 -0
- /package/template-vp-monorepo-react-nestjs/apps/web/src/assets/{vite.svg → svg/vite.svg} +0 -0
|
@@ -14,6 +14,7 @@ const router = useRouter()
|
|
|
14
14
|
|
|
15
15
|
const collapsed = ref(false)
|
|
16
16
|
|
|
17
|
+
/** 根据当前路由匹配链计算菜单选中项。 */
|
|
17
18
|
const selectedKeys = computed(() => {
|
|
18
19
|
const matched = route.matched.map(item => item.name)
|
|
19
20
|
return matched.filter(Boolean) as string[]
|
|
@@ -21,17 +22,19 @@ const selectedKeys = computed(() => {
|
|
|
21
22
|
|
|
22
23
|
const openKeys = ref<string[]>([])
|
|
23
24
|
|
|
24
|
-
watchEffect(() => {
|
|
25
|
+
watchEffect(/** 路由变化时同步父菜单展开状态。 */ () => {
|
|
25
26
|
const matched = route.matched.map(item => item.name).filter(Boolean) as string[]
|
|
26
27
|
const parentKey = matched[0]
|
|
27
28
|
|
|
28
29
|
openKeys.value = matched.length > 1 && parentKey !== undefined ? [parentKey] : []
|
|
29
30
|
})
|
|
30
31
|
|
|
32
|
+
/** 按菜单项的路由名称跳转。 */
|
|
31
33
|
function handleMenuClick({ key }: { key: string }) {
|
|
32
34
|
router.push({ name: key })
|
|
33
35
|
}
|
|
34
36
|
|
|
37
|
+
/** 将 `svg-` 前缀的菜单图标转换为图标组件,其余图标返回 `null`。 */
|
|
35
38
|
function renderIcon(icon?: string) {
|
|
36
39
|
if (!icon)
|
|
37
40
|
return null
|
|
@@ -45,10 +48,11 @@ function renderIcon(icon?: string) {
|
|
|
45
48
|
return null
|
|
46
49
|
}
|
|
47
50
|
|
|
51
|
+
/** 递归将可见路由转换为菜单项,保留标题、图标和子菜单层级。 */
|
|
48
52
|
function getMenuItems(routes: MenuRouteRecordRawType[]): NonNullable<MenuProps['items']> {
|
|
49
53
|
return routes
|
|
50
54
|
.filter(item => !item.meta?.hideInMenu)
|
|
51
|
-
.map((item) => {
|
|
55
|
+
.map(/** 生成当前路由的菜单项,并递归构造可见子菜单。 */ (item) => {
|
|
52
56
|
const hasChildren = item.children && item.children.length > 0
|
|
53
57
|
const key = String(item.name ?? item.path)
|
|
54
58
|
const label = item.meta?.title ?? key
|
|
@@ -145,16 +145,19 @@ const defaultRequestOption: BaseRequestOption<any, any, any, any> = {
|
|
|
145
145
|
requestAdapter: adapterFetch() as AlovaRequestAdapter<any, any, any>,
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
/** 优先读取请求配置中的元数据,兼容直接挂在方法实例上的元数据。 */
|
|
148
149
|
function getMethodMeta(method: unknown): RequestMeta {
|
|
149
150
|
const methodRecord = method as { meta?: RequestMeta, config?: { meta?: RequestMeta } } | undefined
|
|
150
151
|
return methodRecord?.config?.meta ?? methodRecord?.meta ?? {}
|
|
151
152
|
}
|
|
152
153
|
|
|
154
|
+
/** 获取单次请求的布尔开关;未显式设置布尔值时使用全局默认值。 */
|
|
153
155
|
function getMetaFlag(meta: RequestMeta, key: keyof RequestMeta, fallback: boolean): boolean {
|
|
154
156
|
const value = meta[key]
|
|
155
157
|
return typeof value === 'boolean' ? value : fallback
|
|
156
158
|
}
|
|
157
159
|
|
|
160
|
+
/** 按数值、列表或自定义函数匹配 HTTP 状态;未配置时接受所有 2xx。 */
|
|
158
161
|
function isMatchedStatus<RE>(
|
|
159
162
|
status: number,
|
|
160
163
|
matcher: StatusMatcher<RE> | undefined,
|
|
@@ -169,6 +172,7 @@ function isMatchedStatus<RE>(
|
|
|
169
172
|
return Array.isArray(matcher) ? matcher.includes(status) : matcher === status
|
|
170
173
|
}
|
|
171
174
|
|
|
175
|
+
/** 将业务码转成字符串比较;未配置匹配列表时视为匹配。 */
|
|
172
176
|
function isMatchedCode(code: unknown, matcher: CodeMatcher | undefined): boolean {
|
|
173
177
|
if (!matcher?.length)
|
|
174
178
|
return true
|
|
@@ -176,12 +180,14 @@ function isMatchedCode(code: unknown, matcher: CodeMatcher | undefined): boolean
|
|
|
176
180
|
return matcher.some(item => String(item) === String(code))
|
|
177
181
|
}
|
|
178
182
|
|
|
183
|
+
/** 兼容适配器的 `statusCode` 与 `status` 字段,统一返回数值状态码。 */
|
|
179
184
|
function getResponseStatus(response: unknown): number {
|
|
180
185
|
const responseRecord = response as { status?: unknown, statusCode?: unknown }
|
|
181
186
|
const status = responseRecord.statusCode ?? responseRecord.status
|
|
182
187
|
return typeof status === 'number' ? status : Number(status)
|
|
183
188
|
}
|
|
184
189
|
|
|
190
|
+
/** 按配置字段及常见消息字段读取提示文本,无有效值时使用默认提示。 */
|
|
185
191
|
function getResponseMessage(data: unknown, messageKey: string, defaultMessage: string): string {
|
|
186
192
|
if (!isPlainObject(data))
|
|
187
193
|
return defaultMessage
|
|
@@ -195,10 +201,15 @@ function getResponseMessage(data: unknown, messageKey: string, defaultMessage: s
|
|
|
195
201
|
return defaultMessage
|
|
196
202
|
}
|
|
197
203
|
|
|
204
|
+
/** 从对象响应中读取指定业务字段,非对象响应返回 `undefined`。 */
|
|
198
205
|
function getResponseField(data: unknown, key: string): unknown {
|
|
199
206
|
return isPlainObject(data) ? data[key] : undefined
|
|
200
207
|
}
|
|
201
208
|
|
|
209
|
+
/**
|
|
210
|
+
* 根据状态码和内容类型解析 Fetch 响应,支持克隆时先克隆以保留原响应体。
|
|
211
|
+
* 无内容响应返回 `undefined`;类型未知时尝试 JSON 再尝试文本。
|
|
212
|
+
*/
|
|
202
213
|
async function parseFetchResponse(response: {
|
|
203
214
|
status?: number
|
|
204
215
|
body?: unknown
|
|
@@ -234,6 +245,7 @@ async function parseFetchResponse(response: {
|
|
|
234
245
|
return undefined
|
|
235
246
|
}
|
|
236
247
|
|
|
248
|
+
/** 从 Headers 或记录对象读取响应头,兼容原键、全小写及全大写键。 */
|
|
237
249
|
function getHeaderValue(
|
|
238
250
|
headers: Headers | Record<string, unknown> | undefined,
|
|
239
251
|
key: string,
|
|
@@ -250,6 +262,7 @@ function getHeaderValue(
|
|
|
250
262
|
return typeof value === 'string' ? value : ''
|
|
251
263
|
}
|
|
252
264
|
|
|
265
|
+
/** 统一提取 Axios 的 data 或解析 Fetch 响应,无法识别的响应原样返回。 */
|
|
253
266
|
async function getResponseData(response: unknown): Promise<unknown> {
|
|
254
267
|
const responseRecord = response as {
|
|
255
268
|
body?: unknown
|
|
@@ -272,6 +285,7 @@ async function getResponseData(response: unknown): Promise<unknown> {
|
|
|
272
285
|
return response
|
|
273
286
|
}
|
|
274
287
|
|
|
288
|
+
/** 求值可异步的请求头配置,将有效值转为字符串并忽略空值。 */
|
|
275
289
|
async function resolveHeaderValue(value: HeaderValue): Promise<string | undefined> {
|
|
276
290
|
const resolved = typeof value === 'function' ? await value() : value
|
|
277
291
|
if (resolved === null || resolved === undefined)
|
|
@@ -279,6 +293,7 @@ async function resolveHeaderValue(value: HeaderValue): Promise<string | undefine
|
|
|
279
293
|
return String(resolved)
|
|
280
294
|
}
|
|
281
295
|
|
|
296
|
+
/** 将请求头写入 Headers、键值对数组或普通记录,适配不同请求适配器。 */
|
|
282
297
|
function setHeader(target: unknown, key: string, value: string): void {
|
|
283
298
|
if (typeof Headers !== 'undefined' && target instanceof Headers) {
|
|
284
299
|
target.set(key, value)
|
|
@@ -293,12 +308,18 @@ function setHeader(target: unknown, key: string, value: string): void {
|
|
|
293
308
|
;(target as Record<string, string>)[key] = value
|
|
294
309
|
}
|
|
295
310
|
|
|
311
|
+
/** 将自定义请求选项递归合并到默认配置,补全响应解析和提示开关。 */
|
|
296
312
|
function resolveConfig<RC extends object, RE, RH, SE extends StatesExport<any>>(
|
|
297
313
|
option: BaseRequestOption<RC, RE, RH, SE>,
|
|
298
314
|
): ResolvedRequestOption<RC, RE, RH, SE> {
|
|
299
315
|
return deepMergeObject(defaultRequestOption, option) as ResolvedRequestOption<RC, RE, RH, SE>
|
|
300
316
|
}
|
|
301
317
|
|
|
318
|
+
/**
|
|
319
|
+
* 创建带统一请求头、响应解包、业务码校验和消息提示的 Alova 实例。
|
|
320
|
+
* @param option 覆盖默认行为的请求、缓存和适配器配置。
|
|
321
|
+
* @returns 配置完成的请求实例,HTTP 或业务校验失败时拒绝对应请求。
|
|
322
|
+
*/
|
|
302
323
|
export function createInstance<
|
|
303
324
|
RC extends object = FetchRequestInit,
|
|
304
325
|
RE = Response,
|
|
@@ -316,6 +337,7 @@ export function createInstance<
|
|
|
316
337
|
requestAdapter: config.requestAdapter!,
|
|
317
338
|
l1Cache: config.l1Cache,
|
|
318
339
|
l2Cache: config.l2Cache ?? config.storageAdapter,
|
|
340
|
+
/** 每次发送前求值公共请求头,并写入本次请求的头部容器。 */
|
|
319
341
|
beforeRequest: async (method) => {
|
|
320
342
|
const methodConfig = method.config as { headers?: unknown }
|
|
321
343
|
const headers = methodConfig.headers ?? {}
|
|
@@ -328,6 +350,7 @@ export function createInstance<
|
|
|
328
350
|
}
|
|
329
351
|
},
|
|
330
352
|
responded: {
|
|
353
|
+
/** 按请求元数据控制响应转换,校验状态与业务码并处理提示和未授权回调。 */
|
|
331
354
|
onSuccess: async (response, method) => {
|
|
332
355
|
const meta = getMethodMeta(method)
|
|
333
356
|
const shouldTransform = getMetaFlag(meta, 'isTransformResponse', config.isTransformResponse)
|
|
@@ -384,6 +407,7 @@ export function createInstance<
|
|
|
384
407
|
|
|
385
408
|
return responseData
|
|
386
409
|
},
|
|
410
|
+
/** 按请求设置显示错误信息,并继续向调用方传播原始错误。 */
|
|
387
411
|
onError: (error, method) => {
|
|
388
412
|
const meta = getMethodMeta(method)
|
|
389
413
|
const showError = getMetaFlag(meta, 'isShowErrorMessage', config.isShowErrorMessage)
|
|
@@ -416,6 +440,11 @@ export type DualCallInstance<
|
|
|
416
440
|
> = RequestInstance<RC, RE, RH, SE>
|
|
417
441
|
& ((option?: RequestOption<RC, RE, RH, SE>) => RequestInstance<RC, RE, RH, SE>)
|
|
418
442
|
|
|
443
|
+
/**
|
|
444
|
+
* 创建同时支持直接调用 HTTP 方法和按配置派生实例的请求入口。
|
|
445
|
+
* @param baseConfig 默认实例与派生实例共用的基础配置。
|
|
446
|
+
* @returns 无参数调用时复用默认实例,传入配置时创建新实例的可调用对象。
|
|
447
|
+
*/
|
|
419
448
|
export function createDualCallInstance<
|
|
420
449
|
RC extends object = FetchRequestInit,
|
|
421
450
|
RE = Response,
|
|
@@ -423,6 +452,7 @@ export function createDualCallInstance<
|
|
|
423
452
|
SE extends StatesExport<any> = StatesExport<any>,
|
|
424
453
|
>(baseConfig: BaseRequestOption<RC, RE, RH, SE>): DualCallInstance<RC, RE, RH, SE> {
|
|
425
454
|
const defaultInstance = createInstance(baseConfig)
|
|
455
|
+
/** 无覆盖配置时返回默认实例,否则基于公共配置创建独立实例。 */
|
|
426
456
|
const dualInstance = ((option?: RequestOption<RC, RE, RH, SE>) => {
|
|
427
457
|
if (!option)
|
|
428
458
|
return defaultInstance
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
/** 递归合并请求配置中的对象字段;数组和普通值由目标值替换。 */
|
|
1
2
|
export function deepMergeObject<T = any>(source: T, target: Partial<T>): T {
|
|
3
|
+
/** 复制并合并当前层级,目标整体为 `undefined` 时保留来源值。 */
|
|
2
4
|
const merge = (src: any, tgt: any): any => {
|
|
3
5
|
if (!isPlainObject(src) || !isPlainObject(tgt))
|
|
4
6
|
return tgt === undefined ? src : tgt
|
|
@@ -15,16 +17,19 @@ export function deepMergeObject<T = any>(source: T, target: Partial<T>): T {
|
|
|
15
17
|
return merge(source, target)
|
|
16
18
|
}
|
|
17
19
|
|
|
20
|
+
/** 根据对象标签判断是否为可按键读取和合并的对象。 */
|
|
18
21
|
export function isPlainObject(data: unknown): data is Record<string, any> {
|
|
19
22
|
return Object.prototype.toString.call(data) === '[object Object]'
|
|
20
23
|
}
|
|
21
24
|
|
|
25
|
+
/** 在当前环境支持流 API 时判断响应体是否为可读流。 */
|
|
22
26
|
export function isReadableStream(data: unknown): boolean {
|
|
23
27
|
if (typeof ReadableStream === 'undefined')
|
|
24
28
|
return false
|
|
25
29
|
return data instanceof ReadableStream
|
|
26
30
|
}
|
|
27
31
|
|
|
32
|
+
/** 尝试解析对象或数组形式的 JSON 字符串,其他输入或解析失败时原样返回。 */
|
|
28
33
|
export function tryParseJsonString(data: unknown): unknown {
|
|
29
34
|
if (typeof data !== 'string')
|
|
30
35
|
return data
|
|
@@ -7,6 +7,7 @@ import { router } from '@/router'
|
|
|
7
7
|
import { envVariables } from '../env'
|
|
8
8
|
import { createDualCallInstance } from './core'
|
|
9
9
|
|
|
10
|
+
/** 组合 Vue 请求适配器、业务响应字段、消息提示和未授权跳转配置。 */
|
|
10
11
|
function getBaseConfig() {
|
|
11
12
|
return {
|
|
12
13
|
baseUrl: `/${envVariables.API_AFFIX}`,
|
|
@@ -30,6 +31,7 @@ function getBaseConfig() {
|
|
|
30
31
|
errorMessageFunc: (msg: string) => {
|
|
31
32
|
message.error(msg)
|
|
32
33
|
},
|
|
34
|
+
/** 未授权时跳转登录页,并提示当前会话失效。 */
|
|
33
35
|
unAuthorizedResponseFunc: () => {
|
|
34
36
|
void router.push('/login')
|
|
35
37
|
message.error('登录过期或未登录')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/main.ts","./src/api/index.ts","./src/hooks/chart/lib.ts","./src/hooks/chart/useecharts.ts","./src/i18n/instance.ts","./src/router/index.ts","./src/router/interface.ts","./src/router/guard/index.ts","./src/router/guard/permissionguard.ts","./src/router/modules/index.ts","./src/store/index.ts","./src/store/modules/user.ts","./src/types/antdv-next.d.ts","./src/types/auto-import.d.ts","./src/types/components.d.ts","./src/types/vite-env.d.ts","./src/utils/env.ts","./src/utils/request/index.ts","./src/utils/request/core/index.ts","./src/utils/request/core/utils.ts","./src/views/example/echart/config.ts","./src/app.vue","./src/components/icon/svg-icon.vue","./src/layout/default/index.vue","./src/layout/default/header/index.vue","./src/views/example/tree-chart.vue","./src/views/example/echart/index.vue","./src/views/home/index.vue","./src/views/login/index.vue"],"
|
|
1
|
+
{"root":["./src/main.ts","./src/api/index.ts","./src/hooks/chart/lib.ts","./src/hooks/chart/useecharts.ts","./src/i18n/instance.ts","./src/router/index.ts","./src/router/interface.ts","./src/router/guard/index.ts","./src/router/guard/permissionguard.ts","./src/router/modules/index.ts","./src/store/index.ts","./src/store/modules/user.ts","./src/types/antdv-next.d.ts","./src/types/auto-import.d.ts","./src/types/components.d.ts","./src/types/vite-env.d.ts","./src/utils/env.ts","./src/utils/request/index.ts","./src/utils/request/core/index.ts","./src/utils/request/core/utils.ts","./src/views/example/echart/config.ts","./src/app.vue","./src/components/icon/svg-icon.vue","./src/layout/default/index.vue","./src/layout/default/header/index.vue","./src/views/example/tree-chart.vue","./src/views/example/echart/index.vue","./src/views/home/index.vue","./src/views/login/index.vue"],"version":"6.0.3"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"ready": "vp check && vp run -r test && vp run -r build",
|
|
8
|
-
"dev": "pnpm run -r --stream dev",
|
|
8
|
+
"dev": "pnpm run -r --parallel --stream dev",
|
|
9
9
|
"prepare": "vp config",
|
|
10
10
|
"clean": "node scripts/clean.mjs",
|
|
11
11
|
"reinstall": "vp install --force",
|
|
@@ -20,12 +20,5 @@
|
|
|
20
20
|
"typescript": "catalog:",
|
|
21
21
|
"vite": "catalog:",
|
|
22
22
|
"vite-plus": "catalog:"
|
|
23
|
-
},
|
|
24
|
-
"devEngines": {
|
|
25
|
-
"packageManager": {
|
|
26
|
-
"name": "pnpm",
|
|
27
|
-
"version": "11.24.0",
|
|
28
|
-
"onFail": "download"
|
|
29
|
-
}
|
|
30
23
|
}
|
|
31
24
|
}
|
|
@@ -53,6 +53,8 @@ tr(`你好 ${name}`)
|
|
|
53
53
|
|
|
54
54
|
扫描器故意不依赖 AST,按文本识别静态调用,因此不区分具体编程语言。对应的取舍是:注释或普通字符串中出现完整的 `tr('key')` 文本时,也会被识别。
|
|
55
55
|
|
|
56
|
+
调用名与 `(`、`(` 与静态字符串、静态字符串与 `,` 或 `)` 之间允许空白、`//` 行注释和 `/* ... */` 块注释,例如 `tr(/* 说明 */ '保存' /* 说明 */)`。字符串内部的注释符号按词条正文保留;注释后是动态表达式时仍不提取。
|
|
57
|
+
|
|
56
58
|
## 命令
|
|
57
59
|
|
|
58
60
|
```bash
|
|
@@ -68,6 +68,7 @@ const helpText = `用法:
|
|
|
68
68
|
项目的 include 未匹配到任何源文件时,--clean 始终拒绝执行。
|
|
69
69
|
已有翻译保持不变;新增项默认使用 key 作为翻译值。`
|
|
70
70
|
|
|
71
|
+
/** 解析命令并执行词条扫描、语言包校验与可选同步,输出报告和摘要,返回命令退出码。 */
|
|
71
72
|
export async function runCli(
|
|
72
73
|
arguments_: readonly string[],
|
|
73
74
|
environment: CliEnvironment = {},
|
|
@@ -104,7 +105,7 @@ export async function runCli(
|
|
|
104
105
|
|
|
105
106
|
const projectEntries = selectProjects(loaded.config.projects, options.projects)
|
|
106
107
|
const executions = await Promise.all(
|
|
107
|
-
projectEntries.map(async ([name, project]): Promise<ProjectExecution> => {
|
|
108
|
+
projectEntries.map(/** 扫描词条并拦截无源文件的清理。 */ async ([name, project]): Promise<ProjectExecution> => {
|
|
108
109
|
const scan = await scanFiles({
|
|
109
110
|
rootDir: loaded.rootDir,
|
|
110
111
|
include: project.include,
|
|
@@ -203,6 +204,7 @@ export async function runCli(
|
|
|
203
204
|
return 0
|
|
204
205
|
}
|
|
205
206
|
|
|
207
|
+
/** 运行命令入口,统一输出异常与用法提示;执行异常时返回退出码 2。 */
|
|
206
208
|
export async function main(
|
|
207
209
|
arguments_: readonly string[] = process.argv.slice(2),
|
|
208
210
|
environment: CliEnvironment = {},
|
|
@@ -220,6 +222,7 @@ export async function main(
|
|
|
220
222
|
}
|
|
221
223
|
}
|
|
222
224
|
|
|
225
|
+
/** 解析同步或检查命令的选项,校验必填值、未知选项和互斥组合。 */
|
|
223
226
|
function parseArguments(arguments_: readonly string[]): ParsedArguments {
|
|
224
227
|
const command = arguments_[0]
|
|
225
228
|
if (command !== 'sync' && command !== 'check') {
|
|
@@ -285,6 +288,7 @@ function parseArguments(arguments_: readonly string[]): ParsedArguments {
|
|
|
285
288
|
}
|
|
286
289
|
}
|
|
287
290
|
|
|
291
|
+
/** 读取独立命令选项后的值,并返回已消费位置;缺失值时抛出用法错误。 */
|
|
288
292
|
function readOptionValue(
|
|
289
293
|
arguments_: readonly string[],
|
|
290
294
|
index: number,
|
|
@@ -298,6 +302,7 @@ function readOptionValue(
|
|
|
298
302
|
return [value, index + 1]
|
|
299
303
|
}
|
|
300
304
|
|
|
305
|
+
/** 读取等号形式的命令选项值,空值时抛出用法错误。 */
|
|
301
306
|
function readInlineOptionValue(argument: string, option: string): string {
|
|
302
307
|
const value = argument.slice(option.length + 1)
|
|
303
308
|
if (value.length === 0) {
|
|
@@ -307,6 +312,7 @@ function readInlineOptionValue(argument: string, option: string): string {
|
|
|
307
312
|
return value
|
|
308
313
|
}
|
|
309
314
|
|
|
315
|
+
/** 按名称选择待处理项目;未指定时返回全部项目,未知项目名抛出用法错误。 */
|
|
310
316
|
function selectProjects(
|
|
311
317
|
projects: Readonly<Record<string, I18nProjectConfig>>,
|
|
312
318
|
selectedNames: readonly string[],
|
|
@@ -315,7 +321,7 @@ function selectProjects(
|
|
|
315
321
|
return Object.entries(projects)
|
|
316
322
|
}
|
|
317
323
|
|
|
318
|
-
return selectedNames.map((name) => {
|
|
324
|
+
return selectedNames.map(/** 校验项目存在及配置有效后返回名称和配置。 */ (name) => {
|
|
319
325
|
if (!Object.prototype.hasOwnProperty.call(projects, name)) {
|
|
320
326
|
throw new CliUsageError(
|
|
321
327
|
`Unknown project "${name}". Available projects: ${Object.keys(projects).join(', ')}.`,
|
|
@@ -331,6 +337,7 @@ function selectProjects(
|
|
|
331
337
|
})
|
|
332
338
|
}
|
|
333
339
|
|
|
340
|
+
/** 将每种语言的语言包路径统一解析为相对配置根目录的绝对路径。 */
|
|
334
341
|
function resolveCatalogs(
|
|
335
342
|
rootDir: string,
|
|
336
343
|
catalogs: Readonly<Record<string, string>>,
|
|
@@ -340,10 +347,12 @@ function resolveCatalogs(
|
|
|
340
347
|
)
|
|
341
348
|
}
|
|
342
349
|
|
|
350
|
+
/** 保留绝对路径,或基于配置根目录解析相对路径。 */
|
|
343
351
|
function resolveFromRoot(rootDir: string, path: string): string {
|
|
344
352
|
return isAbsolute(path) ? resolve(path) : resolve(rootDir, path)
|
|
345
353
|
}
|
|
346
354
|
|
|
355
|
+
/** 检查语言包路径是否重复,并防止报告路径覆盖语言包或配置文件。 */
|
|
347
356
|
function validateOutputPaths(
|
|
348
357
|
projects: readonly ProjectCatalogs[],
|
|
349
358
|
reportPath: string | undefined,
|
|
@@ -374,6 +383,7 @@ function validateOutputPaths(
|
|
|
374
383
|
}
|
|
375
384
|
}
|
|
376
385
|
|
|
386
|
+
/** 允许创建报告或覆盖已有同步报告,拒绝覆盖其他已存在的文件。 */
|
|
377
387
|
async function assertSafeReportTarget(reportPath: string): Promise<void> {
|
|
378
388
|
let source: string
|
|
379
389
|
|
|
@@ -398,6 +408,7 @@ async function assertSafeReportTarget(reportPath: string): Promise<void> {
|
|
|
398
408
|
}
|
|
399
409
|
}
|
|
400
410
|
|
|
411
|
+
/** 确认报告目标不在已扫描源码中,避免报告写入覆盖业务源码。 */
|
|
401
412
|
function assertReportIsNotSourceFile(
|
|
402
413
|
executions: readonly ProjectExecution[],
|
|
403
414
|
reportPath: string,
|
|
@@ -417,17 +428,20 @@ function assertReportIsNotSourceFile(
|
|
|
417
428
|
}
|
|
418
429
|
}
|
|
419
430
|
|
|
431
|
+
/** 规范化比较用的绝对路径,在 Windows 上忽略路径大小写。 */
|
|
420
432
|
function normalizeComparablePath(path: string): string {
|
|
421
433
|
const normalized = resolve(path)
|
|
422
434
|
return process.platform === 'win32' ? normalized.toLowerCase() : normalized
|
|
423
435
|
}
|
|
424
436
|
|
|
437
|
+
/** 生成展示用的相对路径,统一使用正斜杠,根目录自身显示为句点。 */
|
|
425
438
|
function toPortablePath(rootDir: string, path: string): string {
|
|
426
439
|
const relativePath = relative(rootDir, path)
|
|
427
440
|
const displayPath = relativePath === '' ? '.' : relativePath
|
|
428
441
|
return displayPath.split(sep).join('/')
|
|
429
442
|
}
|
|
430
443
|
|
|
444
|
+
/** 汇总所有语言包的新增、未使用、删除和保持不变的词条数量。 */
|
|
431
445
|
function summarize(files: readonly SyncFileReport[]): SummaryTotals {
|
|
432
446
|
return files.reduce<SummaryTotals>(
|
|
433
447
|
(totals, file) => ({
|
|
@@ -440,6 +454,7 @@ function summarize(files: readonly SyncFileReport[]): SummaryTotals {
|
|
|
440
454
|
)
|
|
441
455
|
}
|
|
442
456
|
|
|
457
|
+
/** 按项目和语言输出扫描及同步结果,并展示总计与可选报告路径。 */
|
|
443
458
|
function printSummary(options: {
|
|
444
459
|
command: CliCommand
|
|
445
460
|
dryRun: boolean
|
|
@@ -477,14 +492,17 @@ function printSummary(options: {
|
|
|
477
492
|
}
|
|
478
493
|
}
|
|
479
494
|
|
|
495
|
+
/** 向标准输出写入一行命令结果。 */
|
|
480
496
|
function defaultStdout(message: string): void {
|
|
481
497
|
process.stdout.write(`${message}\n`)
|
|
482
498
|
}
|
|
483
499
|
|
|
500
|
+
/** 向标准错误输出写入一行诊断信息。 */
|
|
484
501
|
function defaultStderr(message: string): void {
|
|
485
502
|
process.stderr.write(`${message}\n`)
|
|
486
503
|
}
|
|
487
504
|
|
|
505
|
+
/** 将异常及其 cause 链递归拼接为可读的命令错误信息。 */
|
|
488
506
|
function errorMessage(error: unknown): string {
|
|
489
507
|
if (!(error instanceof Error)) {
|
|
490
508
|
return String(error)
|
|
@@ -494,6 +512,7 @@ function errorMessage(error: unknown): string {
|
|
|
494
512
|
return cause === undefined ? error.message : `${error.message}: ${errorMessage(cause)}`
|
|
495
513
|
}
|
|
496
514
|
|
|
515
|
+
/** 按命令类型与文件列表字段识别已有同步报告的基本结构。 */
|
|
497
516
|
function isSyncReportLike(value: unknown): boolean {
|
|
498
517
|
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
499
518
|
return false
|
|
@@ -503,6 +522,7 @@ function isSyncReportLike(value: unknown): boolean {
|
|
|
503
522
|
return (report.command === 'sync' || report.command === 'check') && Array.isArray(report.files)
|
|
504
523
|
}
|
|
505
524
|
|
|
525
|
+
/** 识别目标文件不存在或路径中间项不是目录的错误。 */
|
|
506
526
|
function isMissingPathError(error: unknown): boolean {
|
|
507
527
|
return (
|
|
508
528
|
error instanceof Error &&
|
|
@@ -32,6 +32,7 @@ const defaultExcludes = [
|
|
|
32
32
|
'**/node_modules/**',
|
|
33
33
|
]
|
|
34
34
|
|
|
35
|
+
/** 按项目的包含和排除规则扫描源码,跳过含空字节的文件并收集去重词条及出现位置。 */
|
|
35
36
|
export async function scanFiles(options: ScanFilesOptions): Promise<ScanFilesResult> {
|
|
36
37
|
const files = await fg([...options.include], {
|
|
37
38
|
absolute: true,
|
|
@@ -42,6 +42,7 @@ export class ConfigValidationError extends Error {
|
|
|
42
42
|
override readonly name = 'ConfigValidationError'
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
/** 从指定路径或逐级向上的默认位置加载并校验国际化配置,返回配置文件所在目录作为项目根。 */
|
|
45
46
|
export async function loadConfig(options: LoadConfigOptions = {}): Promise<LoadedI18nConfig> {
|
|
46
47
|
const cwd = resolve(options.cwd ?? process.cwd())
|
|
47
48
|
const configPath =
|
|
@@ -76,6 +77,7 @@ export async function loadConfig(options: LoadConfigOptions = {}): Promise<Loade
|
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
79
|
|
|
80
|
+
/** 校验项目、扫描规则和语言包路径的结构,非法配置抛出带字段位置的 ConfigValidationError。 */
|
|
79
81
|
export function validateConfig(value: unknown, configPath = '<config>'): I18nConfig {
|
|
80
82
|
const prefix = `Invalid i18n config at "${configPath}"`
|
|
81
83
|
|
|
@@ -140,6 +142,7 @@ export function validateConfig(value: unknown, configPath = '<config>'): I18nCon
|
|
|
140
142
|
return value as unknown as I18nConfig
|
|
141
143
|
}
|
|
142
144
|
|
|
145
|
+
/** 从当前目录逐级向上按候选名称查找配置文件,找不到时抛出 ConfigNotFoundError。 */
|
|
143
146
|
async function findConfigPath(cwd: string): Promise<string> {
|
|
144
147
|
let directory = cwd
|
|
145
148
|
|
|
@@ -163,6 +166,7 @@ async function findConfigPath(cwd: string): Promise<string> {
|
|
|
163
166
|
)
|
|
164
167
|
}
|
|
165
168
|
|
|
169
|
+
/** 相对工作目录解析显式配置路径,并确认该路径指向存在的文件。 */
|
|
166
170
|
async function resolveExplicitConfigPath(configPath: string, cwd: string): Promise<string> {
|
|
167
171
|
if (configPath.trim() === '') {
|
|
168
172
|
throw new ConfigNotFoundError('The explicit i18n config path must be a non-empty string')
|
|
@@ -178,6 +182,7 @@ async function resolveExplicitConfigPath(configPath: string, cwd: string): Promi
|
|
|
178
182
|
return resolvedPath
|
|
179
183
|
}
|
|
180
184
|
|
|
185
|
+
/** 断言配置字段是由非空字符串组成的数组,并按选项要求数组本身非空。 */
|
|
181
186
|
function validateStringArray(
|
|
182
187
|
value: unknown,
|
|
183
188
|
path: string,
|
|
@@ -199,6 +204,7 @@ function validateStringArray(
|
|
|
199
204
|
}
|
|
200
205
|
}
|
|
201
206
|
|
|
207
|
+
/** 判断输入是否为普通对象或无原型对象,排除数组和类实例。 */
|
|
202
208
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
203
209
|
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
204
210
|
return false
|
|
@@ -208,6 +214,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
|
|
|
208
214
|
return prototype === Object.prototype || prototype === null
|
|
209
215
|
}
|
|
210
216
|
|
|
217
|
+
/** 确认路径是否指向文件;路径不存在时返回 false,其他文件系统错误继续抛出。 */
|
|
211
218
|
async function isFile(path: string): Promise<boolean> {
|
|
212
219
|
try {
|
|
213
220
|
return (await stat(path)).isFile()
|
|
@@ -219,6 +226,7 @@ async function isFile(path: string): Promise<boolean> {
|
|
|
219
226
|
}
|
|
220
227
|
}
|
|
221
228
|
|
|
229
|
+
/** 识别文件不存在或中间路径不是目录的文件系统错误。 */
|
|
222
230
|
function isMissingPathError(error: unknown): boolean {
|
|
223
231
|
return (
|
|
224
232
|
error instanceof Error &&
|
|
@@ -26,6 +26,7 @@ export interface CreateSyncReportOptions {
|
|
|
26
26
|
files?: readonly SyncFileReport[]
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
/** 填充同步报告的默认选项,并复制各文件的变更数组以隔离调用方修改。 */
|
|
29
30
|
export function createSyncReport(options: CreateSyncReportOptions = {}): SyncReport {
|
|
30
31
|
return {
|
|
31
32
|
command: options.command ?? 'sync',
|
|
@@ -40,6 +41,7 @@ export function createSyncReport(options: CreateSyncReportOptions = {}): SyncRep
|
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
43
|
|
|
44
|
+
/** 将报告写入同目录临时文件后重命名替换目标;失败时清理临时文件并传播异常。 */
|
|
43
45
|
export async function writeSyncReport(report: SyncReport, path: string): Promise<void> {
|
|
44
46
|
const content = `${JSON.stringify(report, undefined, 2)}\n`
|
|
45
47
|
const directory = dirname(path)
|