@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,21 @@
|
|
|
1
|
+
import type { translations as enTranslations } from "../en";
|
|
2
|
+
|
|
3
|
+
export const translations: typeof enTranslations = {
|
|
4
|
+
parseJsonWithComments: {
|
|
5
|
+
errors: {
|
|
6
|
+
invalid_json: "Nieprawidłowy format JSON",
|
|
7
|
+
},
|
|
8
|
+
},
|
|
9
|
+
time: {
|
|
10
|
+
errors: {
|
|
11
|
+
invalid_time_format: {
|
|
12
|
+
title: "Nieprawidłowy format czasu",
|
|
13
|
+
description: "Czas musi być w formacie HH:MM",
|
|
14
|
+
},
|
|
15
|
+
invalid_time_range: {
|
|
16
|
+
title: "Nieprawidłowy zakres czasu",
|
|
17
|
+
description: "Czas musi być między 00:00 a 23:59",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities that can be used in both client and server environments
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// Export all utility functions
|
|
6
|
+
export * from "./base64";
|
|
7
|
+
export * from "./env-util";
|
|
8
|
+
export * from "./object";
|
|
9
|
+
export * from "./parse-error";
|
|
10
|
+
export * from "./time";
|
|
11
|
+
export * from "./validation";
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for safely setting nested object paths
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// Interface for objects that can contain nested structures
|
|
6
|
+
interface NestedObject<TValue> {
|
|
7
|
+
[key: string]: NestedObject<TValue> | TValue;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Safely sets a value at a nested object path, creating intermediate objects as needed
|
|
12
|
+
* @param obj - The target object
|
|
13
|
+
* @param path - Array of path segments
|
|
14
|
+
* @param value - The value to set
|
|
15
|
+
*/
|
|
16
|
+
export function setNestedPath<TValue, TObject>(
|
|
17
|
+
obj: TObject,
|
|
18
|
+
path: readonly string[],
|
|
19
|
+
value: TValue,
|
|
20
|
+
): void {
|
|
21
|
+
let current = obj as NestedObject<TValue>;
|
|
22
|
+
|
|
23
|
+
// Create intermediate path segments
|
|
24
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
25
|
+
const segment = path[i];
|
|
26
|
+
if (!segment) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (!current[segment] || typeof current[segment] !== "object") {
|
|
31
|
+
current[segment] = {};
|
|
32
|
+
}
|
|
33
|
+
current = current[segment] as NestedObject<TValue>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Set the final value
|
|
37
|
+
const lastSegment = path.at(-1);
|
|
38
|
+
if (lastSegment) {
|
|
39
|
+
current[lastSegment] = value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for object utilities to verify type preservation
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { describe, expect, test } from "bun:test";
|
|
6
|
+
|
|
7
|
+
import { objectEntries, objectEntriesNumericEnum } from "./object";
|
|
8
|
+
|
|
9
|
+
// Test enum definitions to match the ones used in cron stats
|
|
10
|
+
enum TestPriority {
|
|
11
|
+
LOW = "low",
|
|
12
|
+
NORMAL = "normal",
|
|
13
|
+
HIGH = "high",
|
|
14
|
+
CRITICAL = "critical",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
enum TestWeekday {
|
|
18
|
+
SUNDAY = 0,
|
|
19
|
+
MONDAY = 1,
|
|
20
|
+
TUESDAY = 2,
|
|
21
|
+
WEDNESDAY = 3,
|
|
22
|
+
THURSDAY = 4,
|
|
23
|
+
FRIDAY = 5,
|
|
24
|
+
SATURDAY = 6,
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Test data structures
|
|
28
|
+
const priorityRecord: Partial<Record<TestPriority, number>> = {
|
|
29
|
+
[TestPriority.LOW]: 5,
|
|
30
|
+
[TestPriority.HIGH]: 10,
|
|
31
|
+
// NORMAL and CRITICAL are missing to test partial records
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const weekdayRecord: Partial<Record<TestWeekday, number>> = {
|
|
35
|
+
[TestWeekday.MONDAY]: 100,
|
|
36
|
+
[TestWeekday.FRIDAY]: 80,
|
|
37
|
+
// Other days are missing
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// Test type preservation
|
|
41
|
+
describe("Object utilities type preservation", () => {
|
|
42
|
+
test("objectEntries preserves enum types for priority", () => {
|
|
43
|
+
const entries = objectEntries(priorityRecord);
|
|
44
|
+
|
|
45
|
+
// This should compile without type errors and preserve enum types
|
|
46
|
+
entries.forEach(([priority, count]) => {
|
|
47
|
+
// priority should be of type TestPriority
|
|
48
|
+
// count should be of type number
|
|
49
|
+
expect(Object.values(TestPriority)).toContain(priority);
|
|
50
|
+
expect(typeof count).toBe("number");
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
expect(entries.length).toBe(2); // Only LOW and HIGH are defined
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test("objectEntriesNumericEnum preserves enum types for weekday", () => {
|
|
57
|
+
const entries = objectEntriesNumericEnum(weekdayRecord);
|
|
58
|
+
|
|
59
|
+
// This should compile without type errors and preserve enum types
|
|
60
|
+
entries.forEach(([weekday, count]) => {
|
|
61
|
+
// weekday should be of type TestWeekday (number enum)
|
|
62
|
+
// count should be of type number
|
|
63
|
+
expect(typeof weekday).toBe("number");
|
|
64
|
+
expect(Object.values(TestWeekday)).toContain(weekday);
|
|
65
|
+
expect(typeof count).toBe("number");
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
expect(entries.length).toBe(2); // Only MONDAY and FRIDAY are defined
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test("filtered entries only include defined values", () => {
|
|
72
|
+
const partialRecord: Partial<Record<TestPriority, number>> = {
|
|
73
|
+
[TestPriority.LOW]: 5,
|
|
74
|
+
[TestPriority.NORMAL]: undefined, // This should be filtered out
|
|
75
|
+
[TestPriority.HIGH]: 10,
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const entries = objectEntries(partialRecord);
|
|
79
|
+
expect(entries.length).toBe(2); // undefined values should be filtered
|
|
80
|
+
expect(entries.every(([, value]) => value !== undefined)).toBe(true);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Object utilities with type preservation
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Type-safe Object.entries that preserves enum and key types
|
|
7
|
+
*
|
|
8
|
+
* @param obj - The object to get entries from
|
|
9
|
+
* @returns Array of [key, value] tuples with preserved types
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* enum Color { RED = "red", BLUE = "blue" }
|
|
14
|
+
* const colorCounts: Record<Color, number> = { [Color.RED]: 5, [Color.BLUE]: 3 };
|
|
15
|
+
* const entries = objectEntries(colorCounts); // [Color, number][]
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function objectEntries<K extends string | number | symbol, V>(
|
|
19
|
+
obj: Record<K, V>,
|
|
20
|
+
): Array<[K, V]>;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Type-safe Object.entries for partial records (handles undefined values)
|
|
24
|
+
*
|
|
25
|
+
* @param obj - The partial object to get entries from
|
|
26
|
+
* @returns Array of [key, value] tuples with preserved types, filtered for defined values
|
|
27
|
+
*/
|
|
28
|
+
export function objectEntries<K extends string | number | symbol, V>(
|
|
29
|
+
obj: Partial<Record<K, V>>,
|
|
30
|
+
): Array<[K, V]>;
|
|
31
|
+
|
|
32
|
+
export function objectEntries<K extends string | number | symbol, V>(
|
|
33
|
+
obj: Record<K, V> | Partial<Record<K, V>>,
|
|
34
|
+
): Array<[K, V]> {
|
|
35
|
+
return Object.entries(obj).filter(
|
|
36
|
+
([, value]) => value !== undefined,
|
|
37
|
+
) as Array<[K, V]>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Type-safe Object.keys that preserves key types
|
|
42
|
+
*
|
|
43
|
+
* @param obj - The object to get keys from
|
|
44
|
+
* @returns Array of keys with preserved types
|
|
45
|
+
*/
|
|
46
|
+
export function objectKeys<K extends string | number | symbol, V>(
|
|
47
|
+
obj: Record<K, V> | Partial<Record<K, V>>,
|
|
48
|
+
): K[] {
|
|
49
|
+
return Object.keys(obj) as K[];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Type-safe Object.values that preserves value types
|
|
54
|
+
*
|
|
55
|
+
* @param obj - The object to get values from
|
|
56
|
+
* @returns Array of values with preserved types
|
|
57
|
+
*/
|
|
58
|
+
export function objectValues<V>(obj: Record<string | number | symbol, V>): V[] {
|
|
59
|
+
return Object.values(obj);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Special handling for enum-based records where keys might be numeric
|
|
64
|
+
* This is useful for JSWeekday and other numeric enums
|
|
65
|
+
*
|
|
66
|
+
* @param obj - The object with potentially numeric enum keys
|
|
67
|
+
* @returns Array of [enum, value] tuples with proper enum type conversion
|
|
68
|
+
*/
|
|
69
|
+
export function objectEntriesNumericEnum<E extends number, V>(
|
|
70
|
+
obj: Partial<Record<E, V>>,
|
|
71
|
+
): Array<[E, V]> {
|
|
72
|
+
return Object.entries(obj)
|
|
73
|
+
.filter(([, value]) => value !== undefined)
|
|
74
|
+
.map(([key, value]) => [parseInt(key, 10) as E, value as V]);
|
|
75
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { ErrorResponseType } from "next-vibe/shared/types/response.schema";
|
|
2
|
+
|
|
3
|
+
import type { TParams, TranslationKey } from "@/i18n/core/static-types";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Custom error class that preserves error type and translation parameters
|
|
7
|
+
*/
|
|
8
|
+
class ApiError extends Error {
|
|
9
|
+
errorType?: string;
|
|
10
|
+
messageParams?: TParams;
|
|
11
|
+
translationKey?: TranslationKey;
|
|
12
|
+
|
|
13
|
+
constructor(options: {
|
|
14
|
+
errorType: string;
|
|
15
|
+
messageParams?: TParams;
|
|
16
|
+
translationKey: TranslationKey;
|
|
17
|
+
}) {
|
|
18
|
+
super(options.translationKey);
|
|
19
|
+
this.name = "ApiError" as const;
|
|
20
|
+
this.errorType = options.errorType;
|
|
21
|
+
this.messageParams = options.messageParams;
|
|
22
|
+
this.translationKey = options.translationKey;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Check if an object is an ErrorResponseType
|
|
28
|
+
*/
|
|
29
|
+
export function isErrorResponseType(
|
|
30
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Error parsing utility requires 'unknown' to handle any error input type
|
|
31
|
+
obj: unknown,
|
|
32
|
+
): obj is ErrorResponseType {
|
|
33
|
+
return (
|
|
34
|
+
typeof obj === "object" &&
|
|
35
|
+
obj !== null &&
|
|
36
|
+
"success" in obj &&
|
|
37
|
+
obj.success === false &&
|
|
38
|
+
"message" in obj &&
|
|
39
|
+
"errorType" in obj
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Possible error input types for error checking and parsing
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Parse a parseable error into a proper Error object
|
|
49
|
+
* Preserves error type and translation parameters if available
|
|
50
|
+
*
|
|
51
|
+
* @param error - The error to parse
|
|
52
|
+
* @returns A proper Error object
|
|
53
|
+
*/
|
|
54
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Error parsing utility requires 'unknown' to handle any error input type
|
|
55
|
+
export function parseError(error: unknown): Error {
|
|
56
|
+
// Handle standard Error instances
|
|
57
|
+
if (error instanceof Error) {
|
|
58
|
+
return error;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Handle ErrorResponseType objects
|
|
62
|
+
if (isErrorResponseType(error)) {
|
|
63
|
+
return new ApiError({
|
|
64
|
+
errorType: error.errorType.errorKey,
|
|
65
|
+
messageParams: error.messageParams,
|
|
66
|
+
translationKey: error.message,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Handle other objects
|
|
71
|
+
if (typeof error === "object" && error !== null) {
|
|
72
|
+
// Extract meaningful error info from objects without console.error pollution
|
|
73
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Error parsing requires type assertion for object property access
|
|
74
|
+
const errorObj = error as Record<string, unknown>;
|
|
75
|
+
const errorMessage =
|
|
76
|
+
errorObj.error || errorObj.message || "An unknown error occurred";
|
|
77
|
+
return new Error(String(errorMessage));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Handle string errors
|
|
81
|
+
if (typeof error === "string") {
|
|
82
|
+
return new Error(error);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Handle objects with message property
|
|
86
|
+
if (typeof error === "object" && error !== null && "message" in error) {
|
|
87
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Error parsing requires type assertion for object property access
|
|
88
|
+
const errorObj = error as Record<string, unknown>;
|
|
89
|
+
const message = errorObj.message;
|
|
90
|
+
if (typeof message === "string") {
|
|
91
|
+
return new Error(message);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Handle objects with error property
|
|
96
|
+
if (typeof error === "object" && error !== null && "error" in error) {
|
|
97
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Error parsing requires type assertion for object property access
|
|
98
|
+
const errorObj = error as Record<string, unknown>;
|
|
99
|
+
const errorMessage = errorObj.error;
|
|
100
|
+
if (typeof errorMessage === "string") {
|
|
101
|
+
return new Error(errorMessage);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Handle null/undefined
|
|
106
|
+
if (error === null || error === undefined) {
|
|
107
|
+
return new Error("errors.noDetails");
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Default case
|
|
111
|
+
return new Error("An unknown error occurred");
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Format strings with values using a template pattern
|
|
116
|
+
*
|
|
117
|
+
* @param strings - The strings to format
|
|
118
|
+
* @param values - The values to insert into the strings
|
|
119
|
+
* @returns The formatted strings
|
|
120
|
+
*/
|
|
121
|
+
export function format<
|
|
122
|
+
T extends Record<string, string | number | boolean | null | undefined>,
|
|
123
|
+
>(strings: string[], values: T): string[] {
|
|
124
|
+
return strings.map((part) =>
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- Required by replace() API
|
|
126
|
+
part.replaceAll(/{(\w+)}/g, (match, key: string) => {
|
|
127
|
+
const value = values[key];
|
|
128
|
+
if (value === null || value === undefined) {
|
|
129
|
+
return "";
|
|
130
|
+
}
|
|
131
|
+
return String(value);
|
|
132
|
+
}),
|
|
133
|
+
);
|
|
134
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { parse } from "jsonc-parser";
|
|
2
|
+
import type { ResponseType } from "next-vibe/shared/types/response.schema";
|
|
3
|
+
import {
|
|
4
|
+
ErrorResponseTypes,
|
|
5
|
+
fail,
|
|
6
|
+
} from "next-vibe/shared/types/response.schema";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* JSON Parser with Comment Support
|
|
10
|
+
* Handles JSON files with comments (like tsconfig.json)
|
|
11
|
+
* Uses jsonc-parser which properly handles comments and trailing commas
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export interface JsonWithComments {
|
|
15
|
+
[key: string]:
|
|
16
|
+
| string
|
|
17
|
+
| number
|
|
18
|
+
| boolean
|
|
19
|
+
| null
|
|
20
|
+
| undefined
|
|
21
|
+
| JsonWithComments
|
|
22
|
+
| JsonWithComments[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Parse JSON with support for comments and trailing commas
|
|
27
|
+
*
|
|
28
|
+
* @param jsonString - JSON string potentially containing comments
|
|
29
|
+
* @returns Parsed JSON object or error response
|
|
30
|
+
*/
|
|
31
|
+
export function parseJsonWithComments(
|
|
32
|
+
jsonString: string,
|
|
33
|
+
): ResponseType<JsonWithComments> {
|
|
34
|
+
try {
|
|
35
|
+
const result = parse(jsonString);
|
|
36
|
+
if (typeof result !== "object" || result === null) {
|
|
37
|
+
return fail({
|
|
38
|
+
message:
|
|
39
|
+
"app.api.shared.utils.parseJsonWithComments.errors.invalid_json",
|
|
40
|
+
errorType: ErrorResponseTypes.INVALID_FORMAT_ERROR,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
// Type guard: result is an object and matches JsonWithComments structure
|
|
44
|
+
return {
|
|
45
|
+
success: true,
|
|
46
|
+
data: result,
|
|
47
|
+
};
|
|
48
|
+
} catch (error) {
|
|
49
|
+
return fail({
|
|
50
|
+
message: "app.api.shared.utils.parseJsonWithComments.errors.invalid_json",
|
|
51
|
+
errorType: ErrorResponseTypes.INVALID_FORMAT_ERROR,
|
|
52
|
+
messageParams: {
|
|
53
|
+
error: error instanceof Error ? error.message : String(error),
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Safely parse JSON with comments, returning null on error
|
|
61
|
+
*
|
|
62
|
+
* @param jsonString - JSON string potentially containing comments
|
|
63
|
+
* @returns Parsed JSON object or null if parsing fails
|
|
64
|
+
*/
|
|
65
|
+
export function tryParseJsonWithComments(
|
|
66
|
+
jsonString: string,
|
|
67
|
+
): JsonWithComments | null {
|
|
68
|
+
const result = parseJsonWithComments(jsonString);
|
|
69
|
+
return result.success ? result.data : null;
|
|
70
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ErrorResponseTypes,
|
|
3
|
+
fail,
|
|
4
|
+
type ResponseType,
|
|
5
|
+
success,
|
|
6
|
+
} from "../types/response.schema";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Converts a time string in HH:MM format to seconds since midnight
|
|
10
|
+
* @param timeStr - Time string in HH:MM format
|
|
11
|
+
* @returns Success response with seconds or error response
|
|
12
|
+
*/
|
|
13
|
+
export function timeToSeconds(
|
|
14
|
+
timeStr: `${number}:${number}`,
|
|
15
|
+
): ResponseType<number> {
|
|
16
|
+
const [hours, minutes] = timeStr.split(":").map(Number);
|
|
17
|
+
if (hours === undefined || minutes === undefined) {
|
|
18
|
+
return fail({
|
|
19
|
+
message: "app.api.shared.utils.time.errors.invalid_time_format.title",
|
|
20
|
+
errorType: ErrorResponseTypes.VALIDATION_ERROR,
|
|
21
|
+
messageParams: {
|
|
22
|
+
inputValue: timeStr,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return success(hours * 3600 + minutes * 60);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type SimpleTimeFormat = `${number}:${number}`;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Converts seconds since midnight to a time string in HH:MM format
|
|
33
|
+
* @param seconds - Seconds since midnight
|
|
34
|
+
* @returns Success response with time string or error response
|
|
35
|
+
*/
|
|
36
|
+
export function secondsToTime(seconds: number): ResponseType<string> {
|
|
37
|
+
if (seconds < 0 || seconds >= 86_400) {
|
|
38
|
+
return fail({
|
|
39
|
+
message: "app.api.shared.utils.time.errors.invalid_time_range.title",
|
|
40
|
+
errorType: ErrorResponseTypes.VALIDATION_ERROR,
|
|
41
|
+
messageParams: {
|
|
42
|
+
inputValue: seconds,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const hours = Math.floor(seconds / 3600);
|
|
48
|
+
const minutes = Math.floor((seconds % 3600) / 60);
|
|
49
|
+
|
|
50
|
+
const timeString = `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`;
|
|
51
|
+
|
|
52
|
+
return success(timeString);
|
|
53
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { ZodError, ZodIssue } from "zod";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
|
|
4
|
+
import type { EndpointLogger } from "@/app/api/[locale]/system/unified-interface/shared/logger/endpoint";
|
|
5
|
+
|
|
6
|
+
import type { ResponseType } from "../types/response.schema";
|
|
7
|
+
import { ErrorResponseTypes, fail } from "../types/response.schema";
|
|
8
|
+
import { parseError } from "./parse-error";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Validate data against a schema
|
|
12
|
+
* Accepts any data (from HTTP, user input, etc.) and validates it
|
|
13
|
+
* @param data - The data to validate (can be any type from HTTP)
|
|
14
|
+
* @param schema - The schema to validate against
|
|
15
|
+
* @returns A response with the validated data or error
|
|
16
|
+
*/
|
|
17
|
+
export function validateData<TSchema extends z.ZodType>(
|
|
18
|
+
data: Parameters<TSchema["parse"]>[0],
|
|
19
|
+
schema: TSchema,
|
|
20
|
+
logger: EndpointLogger,
|
|
21
|
+
): ResponseType<z.infer<TSchema>> {
|
|
22
|
+
if (isEmptyObjectSchema(schema)) {
|
|
23
|
+
return { success: true, data: {} as z.infer<TSchema> };
|
|
24
|
+
}
|
|
25
|
+
if (isEmptySchema(schema)) {
|
|
26
|
+
return { success: true, data: undefined as z.infer<TSchema> };
|
|
27
|
+
}
|
|
28
|
+
if (isNeverSchema(schema)) {
|
|
29
|
+
return { success: true, data: undefined as z.infer<TSchema> };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
const result = schema.safeParse(data);
|
|
34
|
+
|
|
35
|
+
if (!result.success) {
|
|
36
|
+
const formattedErrors = formatZodErrors(result.error);
|
|
37
|
+
const errorCount = result.error.issues?.length || 0;
|
|
38
|
+
logger.error("Validation error details", {
|
|
39
|
+
errorCount,
|
|
40
|
+
errors: result.error.issues?.slice(0, 3).map((e: ZodIssue) => ({
|
|
41
|
+
path: e.path.join("."),
|
|
42
|
+
message: e.message,
|
|
43
|
+
code: e.code,
|
|
44
|
+
})),
|
|
45
|
+
allErrors: JSON.stringify(result.error.issues),
|
|
46
|
+
formattedErrors,
|
|
47
|
+
errorType: typeof result.error,
|
|
48
|
+
errorConstructor: result.error?.constructor?.name,
|
|
49
|
+
hasIssues: "issues" in result.error,
|
|
50
|
+
fullError: JSON.stringify(result.error, null, 2),
|
|
51
|
+
});
|
|
52
|
+
return fail({
|
|
53
|
+
message: "app.api.shared.errorTypes.validation_error",
|
|
54
|
+
errorType: ErrorResponseTypes.VALIDATION_ERROR,
|
|
55
|
+
messageParams: {
|
|
56
|
+
error: formattedErrors.join(", "),
|
|
57
|
+
errorCount: errorCount,
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// For API responses, don't wrap the response in a success object, return the data directly
|
|
63
|
+
return { data: result.data, success: true };
|
|
64
|
+
} catch (error) {
|
|
65
|
+
const parsedError = parseError(error);
|
|
66
|
+
logger.error("Unexpected validation error", parsedError);
|
|
67
|
+
return fail({
|
|
68
|
+
message: "app.api.shared.errorTypes.validation_error",
|
|
69
|
+
errorType: ErrorResponseTypes.VALIDATION_ERROR,
|
|
70
|
+
messageParams: { error: parsedError.message },
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Format Zod errors into a readable format
|
|
77
|
+
* @param zodError - The ZodError object to format
|
|
78
|
+
* @returns A formatted error string array
|
|
79
|
+
*/
|
|
80
|
+
function formatZodErrors(zodError: ZodError): string[] {
|
|
81
|
+
if (
|
|
82
|
+
!zodError?.issues ||
|
|
83
|
+
!Array.isArray(zodError.issues) ||
|
|
84
|
+
zodError.issues.length === 0
|
|
85
|
+
) {
|
|
86
|
+
return ["error.general.unknown_validation_error"];
|
|
87
|
+
}
|
|
88
|
+
return zodError.issues.map(
|
|
89
|
+
(err: ZodIssue) => `${err.path.join(".")}: ${err.message}`,
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Check if request schema is an empty object
|
|
95
|
+
*/
|
|
96
|
+
export function isEmptyObjectSchema(schema: z.ZodSchema): boolean {
|
|
97
|
+
return (
|
|
98
|
+
schema instanceof z.ZodObject && Object.keys(schema.shape).length === 0
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Check if schema expects no input (undefined or never)
|
|
104
|
+
*/
|
|
105
|
+
export function isEmptySchema(schema: z.ZodSchema): boolean {
|
|
106
|
+
return (
|
|
107
|
+
schema instanceof z.ZodUndefined ||
|
|
108
|
+
schema instanceof z.ZodNever ||
|
|
109
|
+
schema instanceof z.ZodVoid
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Check if schema expects never type specifically
|
|
115
|
+
*/
|
|
116
|
+
export function isNeverSchema(schema: z.ZodSchema): boolean {
|
|
117
|
+
try {
|
|
118
|
+
const testResult = schema.safeParse({});
|
|
119
|
+
return (
|
|
120
|
+
!testResult.success &&
|
|
121
|
+
testResult.error?.issues?.[0]?.code === "invalid_type" &&
|
|
122
|
+
testResult.error?.issues?.[0]?.expected === "never"
|
|
123
|
+
);
|
|
124
|
+
} catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|