@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,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Handlers Generator Repository
|
|
3
|
+
* Generates route-handlers.ts with dynamic imports and flat path structure
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import "server-only";
|
|
7
|
+
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
|
|
10
|
+
import type { ResponseType as BaseResponseType } from "next-vibe/shared/types/response.schema";
|
|
11
|
+
import {
|
|
12
|
+
ErrorResponseTypes,
|
|
13
|
+
fail,
|
|
14
|
+
success,
|
|
15
|
+
} from "next-vibe/shared/types/response.schema";
|
|
16
|
+
import { parseError } from "next-vibe/shared/utils/parse-error";
|
|
17
|
+
|
|
18
|
+
import type { EndpointLogger } from "@/app/api/[locale]/system/unified-interface/shared/logger/endpoint";
|
|
19
|
+
import {
|
|
20
|
+
formatCount,
|
|
21
|
+
formatDuration,
|
|
22
|
+
formatGenerator,
|
|
23
|
+
} from "@/app/api/[locale]/system/unified-interface/shared/logger/formatters";
|
|
24
|
+
import type { ApiSection } from "@/app/api/[locale]/system/unified-interface/shared/types/endpoint";
|
|
25
|
+
import { PATH_SEPARATOR } from "@/app/api/[locale]/system/unified-interface/shared/utils/path";
|
|
26
|
+
|
|
27
|
+
import {
|
|
28
|
+
extractPathKey,
|
|
29
|
+
findFilesRecursively,
|
|
30
|
+
generateAbsoluteImportPath,
|
|
31
|
+
generateFileHeader,
|
|
32
|
+
writeGeneratedFile,
|
|
33
|
+
} from "../shared/utils";
|
|
34
|
+
|
|
35
|
+
// Type definitions
|
|
36
|
+
interface RouteHandlersRequestType {
|
|
37
|
+
outputFile: string;
|
|
38
|
+
dryRun: boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface RouteHandlersResponseType {
|
|
42
|
+
success: boolean;
|
|
43
|
+
message: string;
|
|
44
|
+
routesFound: number;
|
|
45
|
+
duration: number;
|
|
46
|
+
outputFile?: string;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Route Handlers Generator Repository Interface
|
|
51
|
+
*/
|
|
52
|
+
interface RouteHandlersGeneratorRepository {
|
|
53
|
+
generateRouteHandlers(
|
|
54
|
+
data: RouteHandlersRequestType,
|
|
55
|
+
logger: EndpointLogger,
|
|
56
|
+
): Promise<BaseResponseType<RouteHandlersResponseType>>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Route Handlers Generator Repository Implementation
|
|
61
|
+
*/
|
|
62
|
+
class RouteHandlersGeneratorRepositoryImpl implements RouteHandlersGeneratorRepository {
|
|
63
|
+
async generateRouteHandlers(
|
|
64
|
+
data: RouteHandlersRequestType,
|
|
65
|
+
logger: EndpointLogger,
|
|
66
|
+
): Promise<BaseResponseType<RouteHandlersResponseType>> {
|
|
67
|
+
const startTime = Date.now();
|
|
68
|
+
|
|
69
|
+
try {
|
|
70
|
+
const outputFile = data.outputFile;
|
|
71
|
+
logger.debug("Starting route handlers generation", {
|
|
72
|
+
outputFile,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// Discover route files
|
|
76
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
77
|
+
const apiCorePath = ["src", "app", "api", "[locale]"];
|
|
78
|
+
const startDir = join(process.cwd(), ...apiCorePath);
|
|
79
|
+
|
|
80
|
+
logger.debug("Discovering route files");
|
|
81
|
+
const routeFiles = findFilesRecursively(startDir, "route.ts");
|
|
82
|
+
|
|
83
|
+
logger.debug(`Found ${routeFiles.length} route files`);
|
|
84
|
+
|
|
85
|
+
// Generate content
|
|
86
|
+
const content = await this.generateContent(routeFiles);
|
|
87
|
+
|
|
88
|
+
// Write file
|
|
89
|
+
await writeGeneratedFile(outputFile, content, data.dryRun);
|
|
90
|
+
|
|
91
|
+
const duration = Date.now() - startTime;
|
|
92
|
+
|
|
93
|
+
logger.info(
|
|
94
|
+
formatGenerator(
|
|
95
|
+
`Generated route handlers file with ${formatCount(routeFiles.length, "route")} in ${formatDuration(duration)}`,
|
|
96
|
+
"🔗",
|
|
97
|
+
),
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
return success({
|
|
101
|
+
success: true,
|
|
102
|
+
message: "app.api.system.generators.endpoints.success.generated",
|
|
103
|
+
routesFound: routeFiles.length,
|
|
104
|
+
duration,
|
|
105
|
+
outputFile: data.dryRun ? undefined : outputFile,
|
|
106
|
+
});
|
|
107
|
+
} catch (error) {
|
|
108
|
+
const duration = Date.now() - startTime;
|
|
109
|
+
logger.error("Route handlers generation failed", {
|
|
110
|
+
error: parseError(error),
|
|
111
|
+
duration,
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
return fail({
|
|
115
|
+
message: "app.api.system.generators.endpoints.post.errors.server.title",
|
|
116
|
+
errorType: ErrorResponseTypes.INTERNAL_ERROR,
|
|
117
|
+
messageParams: {
|
|
118
|
+
duration,
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Extract HTTP methods from definition file (async)
|
|
126
|
+
* We extract from definition instead of route because route files have server-only dependencies
|
|
127
|
+
*/
|
|
128
|
+
private async extractMethodsFromDefinition(
|
|
129
|
+
routeFile: string,
|
|
130
|
+
): Promise<string[]> {
|
|
131
|
+
const definitionPath = routeFile.replace("/route.ts", "/definition.ts");
|
|
132
|
+
try {
|
|
133
|
+
const definition = (await import(definitionPath)) as {
|
|
134
|
+
default?: ApiSection;
|
|
135
|
+
};
|
|
136
|
+
const defaultExport = definition.default;
|
|
137
|
+
|
|
138
|
+
if (!defaultExport) {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Get all HTTP methods from the definition
|
|
143
|
+
const methods = Object.keys(defaultExport).filter((key) =>
|
|
144
|
+
["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"].includes(
|
|
145
|
+
key,
|
|
146
|
+
),
|
|
147
|
+
);
|
|
148
|
+
return methods;
|
|
149
|
+
} catch {
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Extract aliases from definition file (async)
|
|
156
|
+
*/
|
|
157
|
+
private async extractAliasesFromDefinition(
|
|
158
|
+
routeFile: string,
|
|
159
|
+
): Promise<Array<{ alias: string; method: string }>> {
|
|
160
|
+
const definitionPath = routeFile.replace("/route.ts", "/definition.ts");
|
|
161
|
+
try {
|
|
162
|
+
const definition = (await import(definitionPath)) as {
|
|
163
|
+
default?: Record<string, { aliases?: string[] }>;
|
|
164
|
+
};
|
|
165
|
+
const defaultExport = definition.default;
|
|
166
|
+
|
|
167
|
+
if (!defaultExport) {
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const aliasesWithMethods: Array<{ alias: string; method: string }> = [];
|
|
172
|
+
|
|
173
|
+
// Get aliases from each method
|
|
174
|
+
for (const method of Object.keys(defaultExport)) {
|
|
175
|
+
const methodDef = defaultExport[method];
|
|
176
|
+
if (methodDef?.aliases && Array.isArray(methodDef.aliases)) {
|
|
177
|
+
for (const alias of methodDef.aliases) {
|
|
178
|
+
aliasesWithMethods.push({ alias, method });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return aliasesWithMethods;
|
|
184
|
+
} catch {
|
|
185
|
+
// Definition file doesn't exist or can't be loaded
|
|
186
|
+
}
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Generate route handlers content with dynamic imports and real aliases from definitions
|
|
192
|
+
* Main paths include method suffix (e.g., "core/agent/ai-stream/POST")
|
|
193
|
+
* Aliases also include method from their definition
|
|
194
|
+
*/
|
|
195
|
+
private async generateContent(routeFiles: string[]): Promise<string> {
|
|
196
|
+
const pathMap: Record<string, { importPath: string; method: string }> = {};
|
|
197
|
+
const allPaths: string[] = [];
|
|
198
|
+
|
|
199
|
+
// Build path map with method suffixes and aliases (deduplicate)
|
|
200
|
+
for (const routeFile of routeFiles) {
|
|
201
|
+
const { path } = extractPathKey(routeFile);
|
|
202
|
+
const importPath = generateAbsoluteImportPath(routeFile, "route");
|
|
203
|
+
|
|
204
|
+
// Get methods for this route from definition file
|
|
205
|
+
const methods = await this.extractMethodsFromDefinition(routeFile);
|
|
206
|
+
|
|
207
|
+
// Add main path with method suffix for each method (e.g., "v1_core_agent_ai-stream_POST")
|
|
208
|
+
for (const method of methods) {
|
|
209
|
+
const pathWithMethod = `${path}${PATH_SEPARATOR}${method}`;
|
|
210
|
+
if (!pathMap[pathWithMethod]) {
|
|
211
|
+
pathMap[pathWithMethod] = { importPath, method };
|
|
212
|
+
allPaths.push(pathWithMethod);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Extract and add real aliases from definition file (with their method)
|
|
217
|
+
const definitionAliases =
|
|
218
|
+
await this.extractAliasesFromDefinition(routeFile);
|
|
219
|
+
for (const { alias, method } of definitionAliases) {
|
|
220
|
+
// Only add if not already present (first wins)
|
|
221
|
+
if (!pathMap[alias]) {
|
|
222
|
+
pathMap[alias] = { importPath, method };
|
|
223
|
+
allPaths.push(alias);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Sort paths for consistent output
|
|
229
|
+
allPaths.sort();
|
|
230
|
+
|
|
231
|
+
// Generate getRouteHandler function cases with type-safe loading
|
|
232
|
+
const cases: string[] = [];
|
|
233
|
+
for (const path of allPaths) {
|
|
234
|
+
const { importPath } = pathMap[path];
|
|
235
|
+
// Return the handler - all handlers conform to GenericHandlerBase structurally
|
|
236
|
+
// The type assertion is safe because all handlers accept the same props shape
|
|
237
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
238
|
+
cases.push(` case "${path}":
|
|
239
|
+
return (await import("${importPath}")).tools.${pathMap[path].method} as GenericHandlerBase;`);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
243
|
+
const autoGenTitle = "AUTO-GENERATED FILE - DO NOT EDIT";
|
|
244
|
+
const generatorName = "generators/route-handlers";
|
|
245
|
+
const header = generateFileHeader(autoGenTitle, generatorName, {
|
|
246
|
+
"Routes found": routeFiles.length,
|
|
247
|
+
"Total paths (with aliases)": allPaths.length,
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
// eslint-disable-next-line i18next/no-literal-string
|
|
251
|
+
return `${header}
|
|
252
|
+
|
|
253
|
+
import type { GenericHandlerBase } from "../unified-interface/shared/endpoints/route/handler";
|
|
254
|
+
|
|
255
|
+
/* eslint-disable prettier/prettier */
|
|
256
|
+
/* eslint-disable i18next/no-literal-string */
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Dynamically import route handler by path
|
|
260
|
+
* @param path - The route path (e.g., "core/agent/chat/threads")
|
|
261
|
+
* @returns The route module or null if not found
|
|
262
|
+
*/
|
|
263
|
+
export async function getRouteHandler(
|
|
264
|
+
path: string,
|
|
265
|
+
): Promise<GenericHandlerBase | null> {
|
|
266
|
+
switch (path) {
|
|
267
|
+
${cases.join("\n")}
|
|
268
|
+
default:
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
`;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
export const routeHandlersGeneratorRepository =
|
|
277
|
+
new RouteHandlersGeneratorRepositoryImpl();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { endpointsHandler } from "@/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi";
|
|
2
|
+
import { Methods } from "@/app/api/[locale]/system/unified-interface/shared/types/enums";
|
|
3
|
+
|
|
4
|
+
import definitions from "./definition";
|
|
5
|
+
import { routeHandlersGeneratorRepository } from "./repository";
|
|
6
|
+
|
|
7
|
+
export const { POST, tools } = endpointsHandler({
|
|
8
|
+
endpoint: definitions,
|
|
9
|
+
[Methods.POST]: {
|
|
10
|
+
handler: async (props) => {
|
|
11
|
+
return await routeHandlersGeneratorRepository.generateRouteHandlers(
|
|
12
|
+
props.data,
|
|
13
|
+
props.logger,
|
|
14
|
+
);
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Generator Utilities
|
|
3
|
+
* Simple utilities for all generators
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import "server-only";
|
|
7
|
+
|
|
8
|
+
import { existsSync, mkdirSync, readdirSync } from "node:fs";
|
|
9
|
+
import { writeFile } from "node:fs/promises";
|
|
10
|
+
import { dirname, join, relative } from "node:path";
|
|
11
|
+
|
|
12
|
+
import { PATH_SEPARATOR } from "@/app/api/[locale]/system/unified-interface/shared/utils/path";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Default directories to exclude from scanning
|
|
16
|
+
*/
|
|
17
|
+
export const DEFAULT_EXCLUDE_DIRS = [
|
|
18
|
+
"node_modules",
|
|
19
|
+
".git",
|
|
20
|
+
".next",
|
|
21
|
+
"dist",
|
|
22
|
+
".dist",
|
|
23
|
+
"generated",
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Recursively find files with specific filename in a directory
|
|
28
|
+
*/
|
|
29
|
+
export function findFilesRecursively(
|
|
30
|
+
dir: string,
|
|
31
|
+
targetFilename: string,
|
|
32
|
+
excludeDirs: string[] = DEFAULT_EXCLUDE_DIRS,
|
|
33
|
+
): string[] {
|
|
34
|
+
const results: string[] = [];
|
|
35
|
+
|
|
36
|
+
if (!existsSync(dir)) {
|
|
37
|
+
return results;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
41
|
+
|
|
42
|
+
for (const entry of entries) {
|
|
43
|
+
const fullPath = join(dir, entry.name);
|
|
44
|
+
|
|
45
|
+
// Skip excluded directories
|
|
46
|
+
if (entry.isDirectory() && excludeDirs.includes(entry.name)) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (entry.isDirectory()) {
|
|
51
|
+
// Recursively search subdirectories
|
|
52
|
+
results.push(
|
|
53
|
+
...findFilesRecursively(fullPath, targetFilename, excludeDirs),
|
|
54
|
+
);
|
|
55
|
+
} else if (entry.isFile() && entry.name === targetFilename) {
|
|
56
|
+
// Found a matching file
|
|
57
|
+
results.push(fullPath);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return results;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Get relative import path from source file to output file
|
|
66
|
+
*/
|
|
67
|
+
export function getRelativeImportPath(
|
|
68
|
+
sourceFile: string,
|
|
69
|
+
outputFile: string,
|
|
70
|
+
): string {
|
|
71
|
+
const outputDir = dirname(outputFile);
|
|
72
|
+
let relativePath = relative(outputDir, sourceFile);
|
|
73
|
+
|
|
74
|
+
// Remove .ts extension and normalize path separators
|
|
75
|
+
relativePath = relativePath.replace(/\.ts$/, "").replaceAll("\\", "/");
|
|
76
|
+
|
|
77
|
+
// Ensure it starts with ./ or ../
|
|
78
|
+
if (!relativePath.startsWith(".")) {
|
|
79
|
+
relativePath = `./${relativePath}`;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return relativePath;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Extract nested path segments from a file path
|
|
87
|
+
* Example: src/app/api/[locale]/agent/chat/characters/definition.ts
|
|
88
|
+
* Returns: ["agent", "chat", "characters"]
|
|
89
|
+
*/
|
|
90
|
+
export function extractNestedPath(
|
|
91
|
+
filePath: string,
|
|
92
|
+
startMarker = "[locale]",
|
|
93
|
+
endMarker?: string,
|
|
94
|
+
): string[] {
|
|
95
|
+
const pathParts = filePath.split("/");
|
|
96
|
+
|
|
97
|
+
const startIndex = pathParts.findIndex((p) => p === startMarker);
|
|
98
|
+
if (startIndex === -1) {
|
|
99
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Build-time generator that throws for invalid configuration at startup
|
|
100
|
+
throw new Error(`Could not find ${startMarker} in path: ${filePath}`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// If no end marker provided, auto-detect definition.ts or route.ts
|
|
104
|
+
let actualEndMarker = endMarker;
|
|
105
|
+
if (!actualEndMarker) {
|
|
106
|
+
if (pathParts.includes("definition.ts")) {
|
|
107
|
+
actualEndMarker = "definition.ts";
|
|
108
|
+
} else if (pathParts.includes("route.ts")) {
|
|
109
|
+
actualEndMarker = "route.ts";
|
|
110
|
+
} else {
|
|
111
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Build-time generator that throws for invalid configuration at startup
|
|
112
|
+
throw new Error(
|
|
113
|
+
`Could not auto-detect end marker (definition.ts or route.ts) in path: ${filePath}`,
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const endIndex = pathParts.findIndex((p) => p === actualEndMarker);
|
|
119
|
+
if (endIndex === -1) {
|
|
120
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Build-time generator that throws for invalid configuration at startup
|
|
121
|
+
throw new Error(`Could not find ${actualEndMarker} in path: ${filePath}`);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Extract path segments between locale and the target file
|
|
125
|
+
// Skip the [locale] marker itself, start from the next segment
|
|
126
|
+
return pathParts.slice(startIndex + 1, endIndex);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Extract module name from file path
|
|
131
|
+
* Example: .../core/leads/seeds.ts -> "leads"
|
|
132
|
+
* Example: .../core/emails/smtp-client/seeds.ts -> "smtp-client"
|
|
133
|
+
*/
|
|
134
|
+
export function extractModuleName(
|
|
135
|
+
filePath: string,
|
|
136
|
+
coreMarker = "core",
|
|
137
|
+
): string {
|
|
138
|
+
const pathParts = filePath.split("/");
|
|
139
|
+
const coreIndex = pathParts.findIndex((p) => p === coreMarker);
|
|
140
|
+
|
|
141
|
+
if (coreIndex === -1 || coreIndex >= pathParts.length - 1) {
|
|
142
|
+
return pathParts.at(-2) || "unknown";
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const moduleParts = pathParts.slice(coreIndex + 1, pathParts.length - 1);
|
|
146
|
+
return moduleParts.at(-1) || moduleParts.join("-");
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Write generated content to file
|
|
151
|
+
*/
|
|
152
|
+
export async function writeGeneratedFile(
|
|
153
|
+
filePath: string,
|
|
154
|
+
content: string,
|
|
155
|
+
dryRun = false,
|
|
156
|
+
): Promise<void> {
|
|
157
|
+
if (dryRun) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const outputDir = dirname(filePath);
|
|
162
|
+
if (!existsSync(outputDir)) {
|
|
163
|
+
mkdirSync(outputDir, { recursive: true });
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
await writeFile(filePath, content, "utf8");
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Generate standard file header
|
|
171
|
+
*/
|
|
172
|
+
export function generateFileHeader(
|
|
173
|
+
title: string,
|
|
174
|
+
generatedBy: string,
|
|
175
|
+
additionalInfo?: Record<string, string | number>,
|
|
176
|
+
): string {
|
|
177
|
+
const lines = ["/**"];
|
|
178
|
+
lines.push(` * ${title}`);
|
|
179
|
+
lines.push(` * Generated by ${generatedBy}`);
|
|
180
|
+
|
|
181
|
+
if (additionalInfo) {
|
|
182
|
+
lines.push(" *");
|
|
183
|
+
for (const [key, value] of Object.entries(additionalInfo)) {
|
|
184
|
+
lines.push(` * ${key}: ${value}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
lines.push(" */");
|
|
189
|
+
|
|
190
|
+
return lines.join("\n");
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Sanitize a path segment to remove invalid characters for tool names
|
|
195
|
+
* Removes square brackets from dynamic routes like [id]
|
|
196
|
+
* This must match the sanitization in endpointToToolName to ensure consistency
|
|
197
|
+
*/
|
|
198
|
+
function sanitizePathSegment(segment: string): string {
|
|
199
|
+
// Remove square brackets to handle dynamic routes like [id]
|
|
200
|
+
// Example: "[id]" becomes "id", "[threadId]" becomes "threadId"
|
|
201
|
+
return segment.replaceAll(/\[|\]/g, "");
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Extract path from definition file for flat structure
|
|
206
|
+
* Returns path only - no duplicate parameter format aliases
|
|
207
|
+
* Real aliases come from definition files, not parameter format variations
|
|
208
|
+
* Uses PATH_SEPARATOR constant for consistency
|
|
209
|
+
* Sanitizes path segments to match endpointToToolName behavior
|
|
210
|
+
*/
|
|
211
|
+
export function extractPathKey(
|
|
212
|
+
filePath: string,
|
|
213
|
+
startMarker = "[locale]",
|
|
214
|
+
): { path: string } {
|
|
215
|
+
const nestedPath = extractNestedPath(filePath, startMarker);
|
|
216
|
+
// Sanitize each segment to remove brackets from dynamic routes
|
|
217
|
+
const sanitizedPath = nestedPath.map(sanitizePathSegment);
|
|
218
|
+
const path = sanitizedPath.join(PATH_SEPARATOR);
|
|
219
|
+
return { path };
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Generate absolute import path for definition or route file
|
|
224
|
+
* nestedPath extracts segments after [locale], which we then append to the base path
|
|
225
|
+
*/
|
|
226
|
+
export function generateAbsoluteImportPath(
|
|
227
|
+
filePath: string,
|
|
228
|
+
fileType: "definition" | "route",
|
|
229
|
+
): string {
|
|
230
|
+
const nestedPath = extractNestedPath(filePath);
|
|
231
|
+
const pathStr = nestedPath.join("/");
|
|
232
|
+
return `@/app/api/[locale]/${pathStr}/${fileType}`;
|
|
233
|
+
}
|