@next-vibe/checker 1.0.11 → 1.0.12
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/bin/vibe-runtime.js +10 -19
- package/.dist/bin/vibe-runtime.js.map +3 -3
- package/check.config.ts +4 -4
- package/package.json +2 -9
- package/src/app/api/[locale]/LICENSE +674 -0
- package/src/app/api/[locale]/i18n/de/index.ts +13 -0
- package/src/app/api/[locale]/i18n/en/index.ts +12 -0
- package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
- package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
- package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
- package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
- package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
- package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
- package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
- package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
- package/src/app/api/[locale]/shared/types/utils.ts +190 -0
- package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
- package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
- package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
- package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
- package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
- package/src/app/api/[locale]/shared/utils/index.ts +11 -0
- package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
- package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
- package/src/app/api/[locale]/shared/utils/object.ts +75 -0
- package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
- package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
- package/src/app/api/[locale]/shared/utils/time.ts +53 -0
- package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
- package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
- package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
- package/src/app/api/[locale]/system/builder/enum.ts +77 -0
- package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
- package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
- package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
- package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
- package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
- package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
- package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
- package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
- package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
- package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
- package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
- package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
- package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
- package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
- package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
- package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
- package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
- package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
- package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
- package/src/app/api/[locale]/system/builder/route.ts +21 -0
- package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
- package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
- package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
- package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
- package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
- package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
- package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
- package/src/app/api/[locale]/system/check/config/repository.ts +819 -0
- package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
- package/src/app/api/[locale]/system/check/config/types.ts +616 -0
- package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
- package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
- package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
- package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
- package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
- package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
- package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
- package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
- package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
- package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
- package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
- package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
- package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
- package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
- package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
- package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
- package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
- package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
- package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
- package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
- package/src/app/api/[locale]/system/check/test-project/bun.lock +449 -0
- package/src/app/api/[locale]/system/check/test-project/check.config.ts +989 -0
- package/src/app/api/[locale]/system/check/test-project/package.json +20 -0
- package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
- package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
- package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
- package/src/app/api/[locale]/system/check/test-project/tsconfig.json +38 -0
- package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
- package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
- package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
- package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
- package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
- package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
- package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
- package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
- package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
- package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
- package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
- package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
- package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
- package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
- package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
- package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
- package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
- package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
- package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
- package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
- package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
- package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
- package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
- package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
- package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
- package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
- package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
- package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
- package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
- package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
- package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
- package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
- package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
- package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
- package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
- package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
- package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
- package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
- package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
- package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
- package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
- package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
- package/src/app/api/[locale]/system/help/definition.ts +445 -0
- package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
- package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
- package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
- package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
- package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
- package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
- package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
- package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
- package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
- package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
- package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
- package/src/app/api/[locale]/system/help/list/route.ts +21 -0
- package/src/app/api/[locale]/system/help/repository.ts +212 -0
- package/src/app/api/[locale]/system/help/route.ts +16 -0
- package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
- package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
- package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
- package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
- package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
- package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
- package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
- package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
- package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
- package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
- package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
- package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
- package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
- package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
- package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
- package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
- package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
- package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
- package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
- package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
- package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
- package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
- package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
- package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
- package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
- package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
- package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
- package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
- package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
- package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
- package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
- package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
- package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
- package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
- package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
- package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
- package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
- package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
- package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
- package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
- package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
- package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
- package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
- package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
- package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
- package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
- package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
- package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
- package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
- package/src/app/api/[locale]/user/auth/enum.ts +16 -0
- package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
- package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
- package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
- package/src/app/api/[locale]/user/auth/types.ts +110 -0
- package/src/app/api/[locale]/user/enum.ts +64 -0
- package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
- package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
- package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
- package/src/app/api/[locale]/user/types.ts +118 -0
- package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
- package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
- package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
- package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
- package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
- package/src/app/api/i18n/de/index.ts +6 -0
- package/src/app/api/i18n/en/index.ts +5 -0
- package/src/app/api/i18n/pl/index.ts +5 -0
- package/src/app/i18n/de/index.ts +6 -0
- package/src/app/i18n/en/index.ts +5 -0
- package/src/app/i18n/pl/index.ts +5 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Endpoint Handler Implementation
|
|
5
|
+
* Main function for creating type-safe multi-method handlers
|
|
6
|
+
*/
|
|
7
|
+
import type { ResponseType } from "next-vibe/shared/types/response.schema";
|
|
8
|
+
|
|
9
|
+
import type { UserRoleValue } from "@/app/api/[locale]/user/user-roles/enum";
|
|
10
|
+
import type { CountryLanguage } from "@/i18n/core/config";
|
|
11
|
+
|
|
12
|
+
import type { CreateApiEndpointAny } from "../../types/endpoint";
|
|
13
|
+
import { Methods } from "../../types/enums";
|
|
14
|
+
import type {
|
|
15
|
+
GenericHandlerReturnType as GenericHandlerReturnTypeImport,
|
|
16
|
+
MethodHandlerConfig,
|
|
17
|
+
} from "./handler";
|
|
18
|
+
import { endpointHandler } from "./single";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Base constraint for endpoint definitions
|
|
22
|
+
* All endpoint objects must be a partial record of Methods to CreateApiEndpoint
|
|
23
|
+
*/
|
|
24
|
+
export type EndpointDefinitionsConstraint = Partial<
|
|
25
|
+
Record<Methods, CreateApiEndpointAny>
|
|
26
|
+
>;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Type-safe configuration that enforces handler types match endpoint types
|
|
30
|
+
* Uses conditional types to extract exact types from each endpoint
|
|
31
|
+
* Only requires handlers for methods that exist in the endpoint definition
|
|
32
|
+
* Handlers receive OUTPUT types (validated data) and return OUTPUT types
|
|
33
|
+
*/
|
|
34
|
+
export type EndpointHandlerConfig<T extends EndpointDefinitionsConstraint> = {
|
|
35
|
+
endpoint: T;
|
|
36
|
+
} & {
|
|
37
|
+
[K in Methods]?: K extends keyof T
|
|
38
|
+
? T[K] extends CreateApiEndpointAny
|
|
39
|
+
? MethodHandlerConfig<
|
|
40
|
+
T[K]["types"]["RequestOutput"],
|
|
41
|
+
T[K]["types"]["ResponseOutput"],
|
|
42
|
+
T[K]["types"]["UrlVariablesOutput"],
|
|
43
|
+
T[K]["allowedRoles"]
|
|
44
|
+
>
|
|
45
|
+
: never
|
|
46
|
+
: never;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Type for tools object exported from route handlers
|
|
51
|
+
* Contains method handlers (GET, POST, etc.) with their specific types
|
|
52
|
+
* T must be a partial record of Methods to endpoint definitions with proper structure
|
|
53
|
+
*/
|
|
54
|
+
export type ToolsObject<T extends EndpointDefinitionsConstraint> = {
|
|
55
|
+
[K in keyof T]: T[K] extends CreateApiEndpointAny
|
|
56
|
+
? GenericHandlerReturnTypeImport<
|
|
57
|
+
T[K]["types"]["RequestOutput"],
|
|
58
|
+
T[K]["types"]["ResponseOutput"],
|
|
59
|
+
T[K]["types"]["UrlVariablesOutput"],
|
|
60
|
+
T[K]["allowedRoles"]
|
|
61
|
+
>
|
|
62
|
+
: never;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Return type for endpointsHandler with proper Next.js handler types
|
|
67
|
+
* CLI handlers receive RAW input data (TRequestOutput, TUrlVariablesOutput)
|
|
68
|
+
* tRPC handlers receive RAW input data (TRequestOutput, TUrlVariablesOutput)
|
|
69
|
+
* Next.js handlers work with raw request objects
|
|
70
|
+
* All return VALIDATED response data (TResponseOutput)
|
|
71
|
+
*/
|
|
72
|
+
type EndpointsHandlerReturn<T extends EndpointDefinitionsConstraint> = {
|
|
73
|
+
[K in keyof T]: undefined;
|
|
74
|
+
} & {
|
|
75
|
+
tools: ToolsObject<T>;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Creates handlers for multiple HTTP methods from endpoint definitions
|
|
80
|
+
* Returns an object with Next.js handlers, generic tool handlers, and definitions
|
|
81
|
+
*
|
|
82
|
+
* Note: We use direct endpointHandler calls instead of a helper function because
|
|
83
|
+
* endpointHandler has complex type inference that extracts types from the endpoint.
|
|
84
|
+
* TypeScript can properly infer types when we call endpointHandler directly with
|
|
85
|
+
* the specific endpoint and handler, but not when we try to abstract it into a
|
|
86
|
+
* generic helper function.
|
|
87
|
+
*/
|
|
88
|
+
export function endpointsHandler<const T extends EndpointDefinitionsConstraint>(
|
|
89
|
+
config: EndpointHandlerConfig<T>,
|
|
90
|
+
): EndpointsHandlerReturn<T> {
|
|
91
|
+
const { endpoint: definitions, ...methodConfigs } = config;
|
|
92
|
+
|
|
93
|
+
// Build the result object dynamically with flexible typing
|
|
94
|
+
// We construct the result object gradually and assert the final type at return
|
|
95
|
+
// This pattern is necessary because TypeScript cannot properly track conditional
|
|
96
|
+
// types during dynamic object construction
|
|
97
|
+
type FlexibleResult = Record<string, undefined> & {
|
|
98
|
+
tools: Record<
|
|
99
|
+
string,
|
|
100
|
+
GenericHandlerReturnTypeImport<
|
|
101
|
+
Record<string, string | number | boolean>,
|
|
102
|
+
ResponseType<Record<string, string | number | boolean>>,
|
|
103
|
+
Record<string, string> & { locale: CountryLanguage },
|
|
104
|
+
readonly UserRoleValue[]
|
|
105
|
+
>
|
|
106
|
+
>;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const result: FlexibleResult = {
|
|
110
|
+
tools: {} as FlexibleResult["tools"],
|
|
111
|
+
} as FlexibleResult;
|
|
112
|
+
|
|
113
|
+
// Process GET method
|
|
114
|
+
if (Methods.GET in definitions && Methods.GET in methodConfigs) {
|
|
115
|
+
const endpoint = definitions[Methods.GET];
|
|
116
|
+
const methodConfig = methodConfigs[Methods.GET];
|
|
117
|
+
if (endpoint && methodConfig && "handler" in methodConfig) {
|
|
118
|
+
const handler = endpointHandler({
|
|
119
|
+
endpoint,
|
|
120
|
+
handler: methodConfig.handler,
|
|
121
|
+
});
|
|
122
|
+
result[Methods.GET] = undefined;
|
|
123
|
+
result.tools[Methods.GET] = handler.tools[Methods.GET];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Process POST method
|
|
128
|
+
if (Methods.POST in definitions && Methods.POST in methodConfigs) {
|
|
129
|
+
const endpoint = definitions[Methods.POST];
|
|
130
|
+
const methodConfig = methodConfigs[Methods.POST];
|
|
131
|
+
if (endpoint && methodConfig && "handler" in methodConfig) {
|
|
132
|
+
const handler = endpointHandler({
|
|
133
|
+
endpoint,
|
|
134
|
+
handler: methodConfig.handler,
|
|
135
|
+
});
|
|
136
|
+
result[Methods.POST] = undefined;
|
|
137
|
+
result.tools[Methods.POST] = handler.tools[Methods.POST];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Process PUT method
|
|
142
|
+
if (Methods.PUT in definitions && Methods.PUT in methodConfigs) {
|
|
143
|
+
const endpoint = definitions[Methods.PUT];
|
|
144
|
+
const methodConfig = methodConfigs[Methods.PUT];
|
|
145
|
+
if (endpoint && methodConfig && "handler" in methodConfig) {
|
|
146
|
+
const handler = endpointHandler({
|
|
147
|
+
endpoint,
|
|
148
|
+
handler: methodConfig.handler,
|
|
149
|
+
});
|
|
150
|
+
result[Methods.PUT] = handler[Methods.PUT];
|
|
151
|
+
result.tools[Methods.PUT] = handler.tools[Methods.PUT];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Process PATCH method
|
|
156
|
+
if (Methods.PATCH in definitions && Methods.PATCH in methodConfigs) {
|
|
157
|
+
const endpoint = definitions[Methods.PATCH];
|
|
158
|
+
const methodConfig = methodConfigs[Methods.PATCH];
|
|
159
|
+
if (endpoint && methodConfig && "handler" in methodConfig) {
|
|
160
|
+
const handler = endpointHandler({
|
|
161
|
+
endpoint,
|
|
162
|
+
handler: methodConfig.handler,
|
|
163
|
+
});
|
|
164
|
+
result[Methods.PATCH] = handler[Methods.PATCH];
|
|
165
|
+
result.tools[Methods.PATCH] = handler.tools[Methods.PATCH];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Process DELETE method
|
|
170
|
+
if (Methods.DELETE in definitions && Methods.DELETE in methodConfigs) {
|
|
171
|
+
const endpoint = definitions[Methods.DELETE];
|
|
172
|
+
const methodConfig = methodConfigs[Methods.DELETE];
|
|
173
|
+
if (endpoint && methodConfig && "handler" in methodConfig) {
|
|
174
|
+
const handler = endpointHandler({
|
|
175
|
+
endpoint,
|
|
176
|
+
handler: methodConfig.handler,
|
|
177
|
+
});
|
|
178
|
+
result[Methods.DELETE] = handler[Methods.DELETE];
|
|
179
|
+
result.tools[Methods.DELETE] = handler.tools[Methods.DELETE];
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return result as EndpointsHandlerReturn<T>;
|
|
184
|
+
}
|
package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Validation Module
|
|
3
|
+
* Generic validation utilities used by all handler types
|
|
4
|
+
* Platform-specific validation logic should be in respective handler folders
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import "server-only";
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
ErrorResponseTypes,
|
|
11
|
+
fail,
|
|
12
|
+
type ResponseType,
|
|
13
|
+
success,
|
|
14
|
+
} from "next-vibe/shared/types/response.schema";
|
|
15
|
+
import { parseError, validateData } from "next-vibe/shared/utils";
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
|
|
18
|
+
import type { CountryLanguage } from "@/i18n/core/config";
|
|
19
|
+
import { CountryLanguageValues } from "@/i18n/core/config";
|
|
20
|
+
|
|
21
|
+
import type { EndpointLogger } from "../../logger/endpoint";
|
|
22
|
+
import type { Methods } from "../../types/enums";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Validate locale using the standard schema
|
|
26
|
+
*/
|
|
27
|
+
export function validateLocale(
|
|
28
|
+
locale: CountryLanguage,
|
|
29
|
+
logger: EndpointLogger,
|
|
30
|
+
): ResponseType<CountryLanguage> {
|
|
31
|
+
const localeValidation = validateData(
|
|
32
|
+
locale,
|
|
33
|
+
z.enum(CountryLanguageValues).optional(),
|
|
34
|
+
logger,
|
|
35
|
+
);
|
|
36
|
+
const validatedLocale = localeValidation.success
|
|
37
|
+
? localeValidation.data
|
|
38
|
+
: undefined;
|
|
39
|
+
if (!validatedLocale) {
|
|
40
|
+
logger.error("Invalid locale provided:", locale);
|
|
41
|
+
return fail({
|
|
42
|
+
message: ErrorResponseTypes.INVALID_REQUEST_ERROR.errorKey,
|
|
43
|
+
errorType: ErrorResponseTypes.INVALID_REQUEST_ERROR,
|
|
44
|
+
messageParams: {
|
|
45
|
+
error: "Invalid locale provided",
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return success(validatedLocale);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* CLI validation context
|
|
54
|
+
*/
|
|
55
|
+
export interface HandlerValidationContext<TRequestData, TUrlParameters> {
|
|
56
|
+
/** HTTP method being used */
|
|
57
|
+
method: Methods;
|
|
58
|
+
/** Direct request data */
|
|
59
|
+
requestData: TRequestData;
|
|
60
|
+
/** Direct URL parameters */
|
|
61
|
+
urlParameters: TUrlParameters;
|
|
62
|
+
/** Locale for error messages */
|
|
63
|
+
locale: CountryLanguage;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Validated request data - contains validated data (OUTPUT types) ready for handler
|
|
68
|
+
* This represents the final validated data that domain handlers receive
|
|
69
|
+
*/
|
|
70
|
+
export interface ValidatedRequestData<TRequestOutput, TUrlVariablesOutput> {
|
|
71
|
+
/** Validated request data (OUTPUT type - what handlers receive) */
|
|
72
|
+
requestData: TRequestOutput;
|
|
73
|
+
/** Validated URL parameters (OUTPUT type - what handlers receive) */
|
|
74
|
+
urlPathParams: TUrlVariablesOutput;
|
|
75
|
+
/** Validated locale */
|
|
76
|
+
locale: CountryLanguage;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Validate CLI request data
|
|
81
|
+
* Types flow naturally from schemas - no explicit type parameters needed
|
|
82
|
+
*/
|
|
83
|
+
export function validateHandlerRequestData<
|
|
84
|
+
TRequestSchema extends z.ZodTypeAny,
|
|
85
|
+
TUrlSchema extends z.ZodTypeAny,
|
|
86
|
+
>(
|
|
87
|
+
endpoint: {
|
|
88
|
+
requestSchema: TRequestSchema;
|
|
89
|
+
requestUrlPathParamsSchema: TUrlSchema;
|
|
90
|
+
},
|
|
91
|
+
context: HandlerValidationContext<
|
|
92
|
+
z.input<TRequestSchema>,
|
|
93
|
+
z.input<TUrlSchema>
|
|
94
|
+
>,
|
|
95
|
+
logger: EndpointLogger,
|
|
96
|
+
): ResponseType<
|
|
97
|
+
ValidatedRequestData<z.output<TRequestSchema>, z.output<TUrlSchema>>
|
|
98
|
+
> {
|
|
99
|
+
try {
|
|
100
|
+
// Validate locale
|
|
101
|
+
const localeResult = validateLocale(context.locale, logger);
|
|
102
|
+
if (!localeResult.success) {
|
|
103
|
+
return localeResult;
|
|
104
|
+
}
|
|
105
|
+
const validatedLocale = localeResult.data;
|
|
106
|
+
|
|
107
|
+
const urlValidation = validateData(
|
|
108
|
+
context.urlParameters,
|
|
109
|
+
endpoint.requestUrlPathParamsSchema,
|
|
110
|
+
logger,
|
|
111
|
+
);
|
|
112
|
+
if (!urlValidation.success) {
|
|
113
|
+
logger.error("URL validation failed", {
|
|
114
|
+
error: urlValidation.message,
|
|
115
|
+
messageParams: urlValidation.messageParams,
|
|
116
|
+
});
|
|
117
|
+
return {
|
|
118
|
+
success: false,
|
|
119
|
+
message: ErrorResponseTypes.INVALID_QUERY_ERROR.errorKey,
|
|
120
|
+
errorType: ErrorResponseTypes.INVALID_QUERY_ERROR,
|
|
121
|
+
messageParams: {
|
|
122
|
+
error: urlValidation.message,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Now validate the final merged data
|
|
128
|
+
const requestValidation = validateData(
|
|
129
|
+
context.requestData,
|
|
130
|
+
endpoint.requestSchema,
|
|
131
|
+
logger,
|
|
132
|
+
);
|
|
133
|
+
if (!requestValidation.success) {
|
|
134
|
+
logger.error("Request validation failed", {
|
|
135
|
+
error: requestValidation.message,
|
|
136
|
+
messageParams: requestValidation.messageParams,
|
|
137
|
+
});
|
|
138
|
+
return {
|
|
139
|
+
success: false,
|
|
140
|
+
message: ErrorResponseTypes.INVALID_REQUEST_ERROR.errorKey,
|
|
141
|
+
errorType: ErrorResponseTypes.INVALID_REQUEST_ERROR,
|
|
142
|
+
messageParams: {
|
|
143
|
+
error: requestValidation.message,
|
|
144
|
+
},
|
|
145
|
+
cause: requestValidation,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return {
|
|
150
|
+
success: true,
|
|
151
|
+
data: {
|
|
152
|
+
requestData: requestValidation.data,
|
|
153
|
+
urlPathParams: urlValidation.data,
|
|
154
|
+
locale: validatedLocale,
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
} catch (error) {
|
|
158
|
+
logger.error("Request validation failed", parseError(error));
|
|
159
|
+
return {
|
|
160
|
+
success: false,
|
|
161
|
+
message: ErrorResponseTypes.INVALID_REQUEST_ERROR.errorKey,
|
|
162
|
+
errorType: ErrorResponseTypes.INVALID_REQUEST_ERROR,
|
|
163
|
+
messageParams: {
|
|
164
|
+
error: parseError(error).message,
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Validate response data against endpoint schema
|
|
172
|
+
* Returns validated data or error
|
|
173
|
+
*/
|
|
174
|
+
export function validateResponseData<TResponseOutput>(
|
|
175
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Schema validation: Response data can be any type until validated against schema, so unknown is correct.
|
|
176
|
+
data: unknown,
|
|
177
|
+
schema: z.ZodTypeAny,
|
|
178
|
+
logger: EndpointLogger,
|
|
179
|
+
): ResponseType<TResponseOutput> {
|
|
180
|
+
const validation = validateData(data, schema, logger);
|
|
181
|
+
|
|
182
|
+
if (!validation.success) {
|
|
183
|
+
logger.error("[Request Validator] Response validation failed", {
|
|
184
|
+
error: validation.message,
|
|
185
|
+
messageParams: validation.messageParams,
|
|
186
|
+
});
|
|
187
|
+
return {
|
|
188
|
+
success: false,
|
|
189
|
+
message: "app.api.shared.errorTypes.invalid_response_error",
|
|
190
|
+
errorType: ErrorResponseTypes.INVALID_RESPONSE_ERROR,
|
|
191
|
+
messageParams: {
|
|
192
|
+
error: validation.message,
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return {
|
|
198
|
+
success: true,
|
|
199
|
+
data: validation.data as TResponseOutput,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Handler Implementation
|
|
3
|
+
* Main function for creating API handlers that support Next.js, tRPC, and CLI
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import "server-only";
|
|
7
|
+
|
|
8
|
+
import type { CreateApiEndpointAny } from "../../types/endpoint";
|
|
9
|
+
import {
|
|
10
|
+
type ApiHandlerOptions,
|
|
11
|
+
createGenericHandler,
|
|
12
|
+
type GenericHandlerReturnType,
|
|
13
|
+
} from "./handler";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* API handler return type that supports both Next.js and tRPC
|
|
17
|
+
*/
|
|
18
|
+
type EndpointHandlerReturn<TEndpoint extends CreateApiEndpointAny> = {
|
|
19
|
+
[K in TEndpoint["method"]]: undefined;
|
|
20
|
+
} & {
|
|
21
|
+
tools: {
|
|
22
|
+
[K in TEndpoint["method"]]: GenericHandlerReturnType<
|
|
23
|
+
TEndpoint["types"]["RequestOutput"],
|
|
24
|
+
TEndpoint["types"]["ResponseOutput"],
|
|
25
|
+
TEndpoint["types"]["UrlVariablesOutput"],
|
|
26
|
+
TEndpoint["allowedRoles"]
|
|
27
|
+
>;
|
|
28
|
+
};
|
|
29
|
+
definitions: TEndpoint;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Create an API route handler that supports both Next.js, tRPC, and CLI
|
|
34
|
+
* @param options - API handler options
|
|
35
|
+
* @returns Object with both Next.js handler, tRPC procedure, and CLI handler
|
|
36
|
+
*
|
|
37
|
+
* Type parameters are inferred from options.endpoint.types for proper type flow
|
|
38
|
+
*/
|
|
39
|
+
export function endpointHandler<T extends CreateApiEndpointAny>(
|
|
40
|
+
options: ApiHandlerOptions<
|
|
41
|
+
T["types"]["RequestOutput"],
|
|
42
|
+
T["types"]["ResponseOutput"],
|
|
43
|
+
T["types"]["UrlVariablesOutput"],
|
|
44
|
+
T["allowedRoles"],
|
|
45
|
+
T
|
|
46
|
+
>,
|
|
47
|
+
): EndpointHandlerReturn<T> {
|
|
48
|
+
const genericHandler = createGenericHandler(options);
|
|
49
|
+
const method = options.endpoint.method;
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
[method]: undefined!,
|
|
53
|
+
tools: {
|
|
54
|
+
[method]: genericHandler,
|
|
55
|
+
},
|
|
56
|
+
definitions: options.endpoint,
|
|
57
|
+
} as EndpointHandlerReturn<T>;
|
|
58
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client Environment Definition
|
|
3
|
+
* Enforces explicit process.env references for Next.js bundler
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { z } from "zod";
|
|
7
|
+
import { z as zod } from "zod";
|
|
8
|
+
|
|
9
|
+
interface FieldDef<T extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
10
|
+
schema: T;
|
|
11
|
+
value: z.input<T>; // Must pass explicit process.env.VAR_NAME
|
|
12
|
+
example: string;
|
|
13
|
+
comment?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
type Fields = Record<string, FieldDef>;
|
|
17
|
+
|
|
18
|
+
type InferEnv<T extends Fields> = {
|
|
19
|
+
[K in keyof T]: z.infer<T[K]["schema"]>;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Define client environment with explicit process.env references
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* export const { env } = defineEnvClient({
|
|
27
|
+
* NEXT_PUBLIC_APP_URL: {
|
|
28
|
+
* schema: z.string().url(),
|
|
29
|
+
* value: process.env.NEXT_PUBLIC_APP_URL, // Required for bundler
|
|
30
|
+
* example: "http://localhost:3000"
|
|
31
|
+
* },
|
|
32
|
+
* });
|
|
33
|
+
*/
|
|
34
|
+
export function defineEnvClient<T extends Fields>(
|
|
35
|
+
fields: T,
|
|
36
|
+
): { envClient: InferEnv<T> } {
|
|
37
|
+
const schemaShape = Object.fromEntries(
|
|
38
|
+
Object.entries(fields).map(([key, def]) => [key, def.schema]),
|
|
39
|
+
);
|
|
40
|
+
const schema = zod.object(schemaShape);
|
|
41
|
+
|
|
42
|
+
const values = Object.fromEntries(
|
|
43
|
+
Object.entries(fields).map(([key, def]) => [key, def.value]),
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const envClient = schema.parse(values) as InferEnv<T>;
|
|
47
|
+
|
|
48
|
+
return { envClient };
|
|
49
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal Environment Definition
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import "server-only";
|
|
6
|
+
|
|
7
|
+
import { validateEnv } from "next-vibe/shared/utils/env-util";
|
|
8
|
+
import type { z } from "zod";
|
|
9
|
+
import { z as zod } from "zod";
|
|
10
|
+
|
|
11
|
+
import { envValidationLogger } from "./validation-logger";
|
|
12
|
+
|
|
13
|
+
interface FieldDef<T extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
14
|
+
schema: T;
|
|
15
|
+
example: string;
|
|
16
|
+
comment?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type Fields = Record<string, FieldDef>;
|
|
20
|
+
|
|
21
|
+
type InferEnv<T extends Fields> = {
|
|
22
|
+
[K in keyof T]: z.infer<T[K]["schema"]>;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Define and validate environment variables
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* export const { env } = defineEnv({
|
|
30
|
+
* DATABASE_URL: { schema: z.string().url(), example: "postgres://localhost/db", comment: "DB" },
|
|
31
|
+
* API_KEY: { schema: z.string().min(10), example: "your-api-key" },
|
|
32
|
+
* });
|
|
33
|
+
*/
|
|
34
|
+
export function defineEnv<T extends Fields>(fields: T): { env: InferEnv<T> } {
|
|
35
|
+
const schemaShape = Object.fromEntries(
|
|
36
|
+
Object.entries(fields).map(([key, def]) => [key, def.schema]),
|
|
37
|
+
);
|
|
38
|
+
const schema = zod.object(schemaShape);
|
|
39
|
+
|
|
40
|
+
const env = validateEnv(
|
|
41
|
+
process.env,
|
|
42
|
+
schema,
|
|
43
|
+
envValidationLogger,
|
|
44
|
+
) as InferEnv<T>;
|
|
45
|
+
|
|
46
|
+
return { env };
|
|
47
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Validation Logger
|
|
3
|
+
* Simple logger for environment validation that works in both browser and server contexts
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ExplicitAnyType } from "next-vibe/shared/types/utils";
|
|
7
|
+
|
|
8
|
+
import type { EndpointLogger } from "@/app/api/[locale]/system/unified-interface/shared/logger/endpoint";
|
|
9
|
+
|
|
10
|
+
declare const process: {
|
|
11
|
+
env: {
|
|
12
|
+
[key: string]: string | undefined;
|
|
13
|
+
};
|
|
14
|
+
stdout: {
|
|
15
|
+
write: (message: string) => boolean;
|
|
16
|
+
};
|
|
17
|
+
stderr: {
|
|
18
|
+
write: (message: string) => boolean;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Simple logger for environment validation
|
|
24
|
+
* Works in both browser and server contexts
|
|
25
|
+
*/
|
|
26
|
+
export const envValidationLogger: EndpointLogger = {
|
|
27
|
+
info: (message: string, meta?: ExplicitAnyType) => {
|
|
28
|
+
const metaStr = meta ? ` ${JSON.stringify(meta)}` : "";
|
|
29
|
+
if (typeof window === "undefined") {
|
|
30
|
+
process.stdout.write(`[ENV] ${message}${metaStr}\n`);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
error: (message: string, meta?: ExplicitAnyType) => {
|
|
34
|
+
const metaStr = meta ? ` ${JSON.stringify(meta)}` : "";
|
|
35
|
+
if (typeof window === "undefined") {
|
|
36
|
+
process.stderr.write(`[ENV] ${message}${metaStr}\n`);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
debug: (message: string, meta?: ExplicitAnyType) => {
|
|
40
|
+
const metaStr = meta ? ` ${JSON.stringify(meta)}` : "";
|
|
41
|
+
if (typeof window === "undefined") {
|
|
42
|
+
process.stdout.write(`[ENV] ${message}${metaStr}\n`);
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
warn: (message: string, meta?: ExplicitAnyType) => {
|
|
46
|
+
const metaStr = meta ? ` ${JSON.stringify(meta)}` : "";
|
|
47
|
+
if (typeof window === "undefined") {
|
|
48
|
+
process.stderr.write(`[ENV] ${message}${metaStr}\n`);
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
vibe: (message: string, meta?: ExplicitAnyType) => {
|
|
52
|
+
const metaStr = meta ? ` ${JSON.stringify(meta)}` : "";
|
|
53
|
+
if (typeof window === "undefined") {
|
|
54
|
+
process.stdout.write(`[ENV] ${message}${metaStr}\n`);
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
isDebugEnabled: false,
|
|
58
|
+
};
|