@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,583 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Oxlint JS Plugin: JSX Capitalization
|
|
3
|
+
*
|
|
4
|
+
* Enforces the use of capitalized JSX components from next-vibe-ui
|
|
5
|
+
* instead of lowercase HTML elements (div, p, a, etc.)
|
|
6
|
+
*
|
|
7
|
+
* Configuration is loaded from check.config.ts via the shared config loader.
|
|
8
|
+
*
|
|
9
|
+
* Supports:
|
|
10
|
+
* - Bun runtime (direct TypeScript)
|
|
11
|
+
* - Node.js runtime (compiled JavaScript)
|
|
12
|
+
* - NPM package installation
|
|
13
|
+
* - Local development
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import type { JsxCapitalizationPluginConfig } from "../../../../config/types";
|
|
17
|
+
import type {
|
|
18
|
+
JSXIdentifier,
|
|
19
|
+
OxlintASTNode,
|
|
20
|
+
OxlintComment,
|
|
21
|
+
OxlintRuleContext,
|
|
22
|
+
} from "../../../types";
|
|
23
|
+
import type {
|
|
24
|
+
createPluginMessages,
|
|
25
|
+
loadPluginConfig,
|
|
26
|
+
} from "../../shared/config-loader";
|
|
27
|
+
|
|
28
|
+
/** JSXOpeningElement AST node */
|
|
29
|
+
interface JSXOpeningElement extends OxlintASTNode {
|
|
30
|
+
type: "JSXOpeningElement";
|
|
31
|
+
name?: OxlintASTNode;
|
|
32
|
+
attributes?: OxlintASTNode[];
|
|
33
|
+
selfClosing?: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// ============================================================
|
|
37
|
+
// Types
|
|
38
|
+
// ============================================================
|
|
39
|
+
|
|
40
|
+
/** Extended rule context with jsx-capitalization options */
|
|
41
|
+
interface JsxCapitalizationRuleContext extends OxlintRuleContext {
|
|
42
|
+
options?: JsxCapitalizationPluginConfig[];
|
|
43
|
+
getCommentsInside?: (node: OxlintASTNode) => OxlintComment[];
|
|
44
|
+
getCommentsBefore?: (node: OxlintASTNode) => OxlintComment[];
|
|
45
|
+
getFilename?: () => string;
|
|
46
|
+
filename?: string;
|
|
47
|
+
sourceCode?: {
|
|
48
|
+
getCommentsBefore?: (node: OxlintASTNode) => OxlintComment[];
|
|
49
|
+
getCommentsInside?: (node: OxlintASTNode) => OxlintComment[];
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Element sets structure for use in rule */
|
|
54
|
+
interface ElementSets {
|
|
55
|
+
typography: Set<string>;
|
|
56
|
+
standalone: Set<string>;
|
|
57
|
+
svg: Set<string>;
|
|
58
|
+
image: Set<string>;
|
|
59
|
+
commonUi: Set<string>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Default error messages (can be customized via config) */
|
|
63
|
+
interface JsxCapitalizationMessages {
|
|
64
|
+
anchorTag: string;
|
|
65
|
+
typographyElement: string;
|
|
66
|
+
standaloneElement: string;
|
|
67
|
+
svgElement: string;
|
|
68
|
+
imageElement: string;
|
|
69
|
+
commonUiElement: string;
|
|
70
|
+
genericElement: string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// ============================================================
|
|
74
|
+
// Default Configuration
|
|
75
|
+
// ============================================================
|
|
76
|
+
|
|
77
|
+
const DEFAULT_CONFIG: JsxCapitalizationPluginConfig = {
|
|
78
|
+
excludedPaths: [],
|
|
79
|
+
excludedFilePatterns: [".email.tsx", ".test.tsx", ".spec.tsx"],
|
|
80
|
+
typographyElements: [
|
|
81
|
+
"p",
|
|
82
|
+
"span",
|
|
83
|
+
"h1",
|
|
84
|
+
"h2",
|
|
85
|
+
"h3",
|
|
86
|
+
"h4",
|
|
87
|
+
"h5",
|
|
88
|
+
"h6",
|
|
89
|
+
"strong",
|
|
90
|
+
"em",
|
|
91
|
+
"small",
|
|
92
|
+
"blockquote",
|
|
93
|
+
"code",
|
|
94
|
+
"pre",
|
|
95
|
+
],
|
|
96
|
+
standaloneElements: [
|
|
97
|
+
"div",
|
|
98
|
+
"button",
|
|
99
|
+
"input",
|
|
100
|
+
"label",
|
|
101
|
+
"form",
|
|
102
|
+
"table",
|
|
103
|
+
"ul",
|
|
104
|
+
"ol",
|
|
105
|
+
"li",
|
|
106
|
+
],
|
|
107
|
+
svgElements: [
|
|
108
|
+
"svg",
|
|
109
|
+
"path",
|
|
110
|
+
"circle",
|
|
111
|
+
"rect",
|
|
112
|
+
"line",
|
|
113
|
+
"polygon",
|
|
114
|
+
"polyline",
|
|
115
|
+
"ellipse",
|
|
116
|
+
"g",
|
|
117
|
+
],
|
|
118
|
+
imageElements: ["img", "picture", "source", "video", "audio"],
|
|
119
|
+
commonUiElements: [
|
|
120
|
+
"nav",
|
|
121
|
+
"header",
|
|
122
|
+
"footer",
|
|
123
|
+
"main",
|
|
124
|
+
"section",
|
|
125
|
+
"article",
|
|
126
|
+
"aside",
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const DEFAULT_MESSAGES: JsxCapitalizationMessages = {
|
|
131
|
+
anchorTag:
|
|
132
|
+
'Use platform-independent <Link> component instead of <a>. import { Link } from "next-vibe-ui/ui/link";',
|
|
133
|
+
typographyElement:
|
|
134
|
+
'Use typography component <{capitalizedName}> instead of <{elementName}>. import { {capitalizedName} } from "next-vibe-ui/ui/typography";',
|
|
135
|
+
standaloneElement:
|
|
136
|
+
'Use platform-independent <{capitalizedName}> component instead of <{elementName}>. import { {capitalizedName} } from "next-vibe-ui/ui/{elementName}";',
|
|
137
|
+
svgElement:
|
|
138
|
+
"SVG element <{elementName}> detected. For icons, use components from next-vibe-ui/ui/icons instead. For custom SVG, create platform-independent components using react-native-svg that work on both web and native.",
|
|
139
|
+
imageElement:
|
|
140
|
+
'Use platform-independent <Image> component instead of <{elementName}>. import { Image } from "next-vibe-ui/ui/image";',
|
|
141
|
+
commonUiElement:
|
|
142
|
+
'Use platform-independent <{capitalizedName}> component instead of <{elementName}>. import { {capitalizedName} } from "next-vibe-ui/ui/{elementName}";',
|
|
143
|
+
genericElement:
|
|
144
|
+
"Lowercase element <{elementName}> detected. Create platform-independent components: 1) Create next-vibe-ui/web/ui/{elementName}.tsx for web, 2) Create next-vibe-ui/native/ui/{elementName}.tsx for React Native, or 3) Use an existing component if available.",
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// ============================================================
|
|
148
|
+
// Dynamic Import for Shared Loader
|
|
149
|
+
// ============================================================
|
|
150
|
+
|
|
151
|
+
// Plugin config loader (lazy loaded to handle various runtime environments)
|
|
152
|
+
let configLoader: {
|
|
153
|
+
loadPluginConfig: typeof loadPluginConfig;
|
|
154
|
+
createPluginMessages: typeof createPluginMessages;
|
|
155
|
+
} | null = null;
|
|
156
|
+
|
|
157
|
+
let cachedConfig: JsxCapitalizationPluginConfig | null = null;
|
|
158
|
+
let cachedMessages: JsxCapitalizationMessages | null = null;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Load the shared config loader module
|
|
162
|
+
* Uses dynamic require to handle different runtime environments
|
|
163
|
+
*/
|
|
164
|
+
function getConfigLoader(): typeof configLoader {
|
|
165
|
+
if (configLoader) {
|
|
166
|
+
return configLoader;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
try {
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- Plugin context requires sync loading
|
|
171
|
+
configLoader = require("../../shared/config-loader") as typeof configLoader;
|
|
172
|
+
return configLoader;
|
|
173
|
+
} catch {
|
|
174
|
+
// Shared loader not available, will use fallback
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Load jsx-capitalization config using shared loader or fallback
|
|
181
|
+
*/
|
|
182
|
+
function loadJsxCapitalizationConfig(): JsxCapitalizationPluginConfig {
|
|
183
|
+
if (cachedConfig !== null) {
|
|
184
|
+
return cachedConfig;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const loader = getConfigLoader();
|
|
188
|
+
|
|
189
|
+
if (loader) {
|
|
190
|
+
const result = loader.loadPluginConfig(
|
|
191
|
+
"oxlint-plugin-jsx-capitalization/jsx-capitalization",
|
|
192
|
+
DEFAULT_CONFIG,
|
|
193
|
+
);
|
|
194
|
+
cachedConfig = result.config ?? DEFAULT_CONFIG;
|
|
195
|
+
} else {
|
|
196
|
+
// Fallback: try direct require of check.config.ts
|
|
197
|
+
cachedConfig = loadConfigFallback();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return cachedConfig;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Fallback config loading when shared loader is not available
|
|
205
|
+
*/
|
|
206
|
+
function loadConfigFallback(): JsxCapitalizationPluginConfig {
|
|
207
|
+
try {
|
|
208
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment -- Plugin fallback requires dynamic loading
|
|
209
|
+
const config = require(`${process.cwd()}/check.config.ts`);
|
|
210
|
+
const checkConfig = config.default ?? config;
|
|
211
|
+
const exported =
|
|
212
|
+
typeof checkConfig === "function" ? checkConfig() : checkConfig;
|
|
213
|
+
|
|
214
|
+
const ruleConfig =
|
|
215
|
+
exported?.oxlint?.rules?.[
|
|
216
|
+
"oxlint-plugin-jsx-capitalization/jsx-capitalization"
|
|
217
|
+
];
|
|
218
|
+
if (Array.isArray(ruleConfig) && ruleConfig[1]) {
|
|
219
|
+
return ruleConfig[1] as JsxCapitalizationPluginConfig;
|
|
220
|
+
}
|
|
221
|
+
} catch {
|
|
222
|
+
// Config not available
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return DEFAULT_CONFIG;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Get error messages (supports customization via config)
|
|
230
|
+
*/
|
|
231
|
+
function getMessages(): JsxCapitalizationMessages {
|
|
232
|
+
if (cachedMessages !== null) {
|
|
233
|
+
return cachedMessages;
|
|
234
|
+
}
|
|
235
|
+
cachedMessages = DEFAULT_MESSAGES;
|
|
236
|
+
return cachedMessages;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Format a message with value substitution
|
|
241
|
+
*/
|
|
242
|
+
function formatMessage(
|
|
243
|
+
template: string,
|
|
244
|
+
elementName: string,
|
|
245
|
+
capitalizedName: string,
|
|
246
|
+
): string {
|
|
247
|
+
return template
|
|
248
|
+
.replaceAll("{elementName}", elementName)
|
|
249
|
+
.replaceAll("{capitalizedName}", capitalizedName);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// ============================================================
|
|
253
|
+
// Helper Functions
|
|
254
|
+
// ============================================================
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Check if a JSX element name is lowercase (indicating an HTML element)
|
|
258
|
+
* In React/JSX, lowercase names are HTML elements, uppercase names are components
|
|
259
|
+
*/
|
|
260
|
+
function isLowercaseElement(elementName: string): boolean {
|
|
261
|
+
const firstChar = elementName.charAt(0);
|
|
262
|
+
return (
|
|
263
|
+
firstChar === firstChar.toLowerCase() &&
|
|
264
|
+
firstChar !== firstChar.toUpperCase()
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Check if the current file is in the excluded path or matches excluded patterns
|
|
270
|
+
*/
|
|
271
|
+
function isExcludedPath(
|
|
272
|
+
context: JsxCapitalizationRuleContext,
|
|
273
|
+
excludedPaths: readonly string[],
|
|
274
|
+
excludedFilePatterns: readonly string[],
|
|
275
|
+
): boolean {
|
|
276
|
+
let filename = "";
|
|
277
|
+
|
|
278
|
+
// Try to get filename from context
|
|
279
|
+
if (typeof context.getFilename === "function") {
|
|
280
|
+
filename = context.getFilename();
|
|
281
|
+
} else if (typeof context.filename === "string") {
|
|
282
|
+
filename = context.filename;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
if (!filename) {
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// Normalize path separators
|
|
290
|
+
const normalizedPath = filename.replaceAll("\\", "/");
|
|
291
|
+
|
|
292
|
+
// Check if file is in any excluded directory
|
|
293
|
+
for (const excludedPath of excludedPaths) {
|
|
294
|
+
if (normalizedPath.includes(excludedPath)) {
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// Check if file matches any excluded pattern
|
|
300
|
+
for (const pattern of excludedFilePatterns) {
|
|
301
|
+
if (normalizedPath.includes(pattern) || normalizedPath.endsWith(pattern)) {
|
|
302
|
+
return true;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Check if the node has a disable comment
|
|
311
|
+
*/
|
|
312
|
+
function hasDisableComment(
|
|
313
|
+
context: JsxCapitalizationRuleContext,
|
|
314
|
+
node: OxlintASTNode,
|
|
315
|
+
): boolean {
|
|
316
|
+
const getComments =
|
|
317
|
+
context.getCommentsBefore ?? context.sourceCode?.getCommentsBefore;
|
|
318
|
+
if (typeof getComments !== "function") {
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
try {
|
|
323
|
+
const comments = getComments(node);
|
|
324
|
+
if (!comments || !Array.isArray(comments)) {
|
|
325
|
+
return false;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
for (const comment of comments) {
|
|
329
|
+
if (!comment || typeof comment.value !== "string") {
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
const commentText = comment.value.trim();
|
|
333
|
+
if (
|
|
334
|
+
(commentText.includes("eslint-disable-next-line") ||
|
|
335
|
+
commentText.includes("oxlint-disable-next-line")) &&
|
|
336
|
+
(commentText.includes("jsx-capitalization") ||
|
|
337
|
+
commentText.includes("no-lowercase-jsx"))
|
|
338
|
+
) {
|
|
339
|
+
return true;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
} catch {
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Get the element name from JSX opening element
|
|
351
|
+
*/
|
|
352
|
+
function getElementName(node: JSXOpeningElement): string | null {
|
|
353
|
+
const name = node.name;
|
|
354
|
+
|
|
355
|
+
if (!name) {
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Handle simple identifier (e.g., <div>)
|
|
360
|
+
if (name.type === "JSXIdentifier") {
|
|
361
|
+
return (name as JSXIdentifier).name;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// Handle member expression (e.g., <Foo.Bar>) - not applicable for HTML elements
|
|
365
|
+
if (name.type === "JSXMemberExpression") {
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// Handle namespaced name (e.g., <svg:path>) - not applicable for HTML elements
|
|
370
|
+
if (name.type === "JSXNamespacedName") {
|
|
371
|
+
return null;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
return null;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Capitalize the first letter of a string
|
|
379
|
+
*/
|
|
380
|
+
function capitalize(str: string): string {
|
|
381
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Get element sets from rule options or config file
|
|
386
|
+
*/
|
|
387
|
+
function getElementSets(context: JsxCapitalizationRuleContext): ElementSets {
|
|
388
|
+
// First try rule options (primary - passed via oxlint config)
|
|
389
|
+
const ruleOptions = context.options?.[0];
|
|
390
|
+
if (ruleOptions) {
|
|
391
|
+
return {
|
|
392
|
+
typography: new Set(ruleOptions.typographyElements ?? []),
|
|
393
|
+
standalone: new Set(ruleOptions.standaloneElements ?? []),
|
|
394
|
+
svg: new Set(ruleOptions.svgElements ?? []),
|
|
395
|
+
image: new Set(ruleOptions.imageElements ?? []),
|
|
396
|
+
commonUi: new Set(ruleOptions.commonUiElements ?? []),
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// Fallback to config file (for direct plugin usage)
|
|
401
|
+
const config = loadJsxCapitalizationConfig();
|
|
402
|
+
return {
|
|
403
|
+
typography: new Set(config.typographyElements ?? []),
|
|
404
|
+
standalone: new Set(config.standaloneElements ?? []),
|
|
405
|
+
svg: new Set(config.svgElements ?? []),
|
|
406
|
+
image: new Set(config.imageElements ?? []),
|
|
407
|
+
commonUi: new Set(config.commonUiElements ?? []),
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Get excluded paths from rule options or config file
|
|
413
|
+
*/
|
|
414
|
+
function getExcludedPaths(context: JsxCapitalizationRuleContext): {
|
|
415
|
+
excludedPaths: readonly string[];
|
|
416
|
+
excludedFilePatterns: readonly string[];
|
|
417
|
+
} {
|
|
418
|
+
// First try rule options
|
|
419
|
+
const ruleOptions = context.options?.[0];
|
|
420
|
+
if (ruleOptions) {
|
|
421
|
+
return {
|
|
422
|
+
excludedPaths: ruleOptions.excludedPaths ?? [],
|
|
423
|
+
excludedFilePatterns: ruleOptions.excludedFilePatterns ?? [],
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// Fallback to config file
|
|
428
|
+
const config = loadJsxCapitalizationConfig();
|
|
429
|
+
return {
|
|
430
|
+
excludedPaths: config.excludedPaths ?? [],
|
|
431
|
+
excludedFilePatterns: config.excludedFilePatterns ?? [],
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* Get error message for lowercase JSX element with smart import suggestions
|
|
437
|
+
*/
|
|
438
|
+
function getErrorMessage(
|
|
439
|
+
elementName: string,
|
|
440
|
+
elementSets: ElementSets,
|
|
441
|
+
): string {
|
|
442
|
+
const capitalizedName = capitalize(elementName);
|
|
443
|
+
const messages = getMessages();
|
|
444
|
+
|
|
445
|
+
// Special case: anchor tags should use Link component
|
|
446
|
+
if (elementName === "a") {
|
|
447
|
+
return messages.anchorTag;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// Typography elements from typography.tsx
|
|
451
|
+
if (elementSets.typography.has(elementName)) {
|
|
452
|
+
return formatMessage(
|
|
453
|
+
messages.typographyElement,
|
|
454
|
+
elementName,
|
|
455
|
+
capitalizedName,
|
|
456
|
+
);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// Standalone UI elements with their own files
|
|
460
|
+
if (elementSets.standalone.has(elementName)) {
|
|
461
|
+
return formatMessage(
|
|
462
|
+
messages.standaloneElement,
|
|
463
|
+
elementName,
|
|
464
|
+
capitalizedName,
|
|
465
|
+
);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
// SVG elements - suggest using icons instead
|
|
469
|
+
if (elementSets.svg.has(elementName)) {
|
|
470
|
+
return formatMessage(messages.svgElement, elementName, capitalizedName);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
// Image elements
|
|
474
|
+
if (elementSets.image.has(elementName)) {
|
|
475
|
+
return formatMessage(messages.imageElement, elementName, capitalizedName);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// Common UI elements with known wrappers
|
|
479
|
+
if (elementSets.commonUi.has(elementName)) {
|
|
480
|
+
return formatMessage(
|
|
481
|
+
messages.commonUiElement,
|
|
482
|
+
elementName,
|
|
483
|
+
capitalizedName,
|
|
484
|
+
);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// Generic/unknown elements - guide to create platform-specific components
|
|
488
|
+
return formatMessage(messages.genericElement, elementName, capitalizedName);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
// ============================================================
|
|
492
|
+
// Rule Implementation
|
|
493
|
+
// ============================================================
|
|
494
|
+
|
|
495
|
+
const jsxCapitalizationRule = {
|
|
496
|
+
meta: {
|
|
497
|
+
type: "problem",
|
|
498
|
+
docs: {
|
|
499
|
+
description:
|
|
500
|
+
"Enforces the use of capitalized JSX components instead of lowercase HTML elements",
|
|
501
|
+
category: "Best Practices",
|
|
502
|
+
recommended: true,
|
|
503
|
+
},
|
|
504
|
+
schema: [
|
|
505
|
+
{
|
|
506
|
+
type: "object",
|
|
507
|
+
properties: {
|
|
508
|
+
excludedPaths: { type: "array", items: { type: "string" } },
|
|
509
|
+
excludedFilePatterns: { type: "array", items: { type: "string" } },
|
|
510
|
+
typographyElements: { type: "array", items: { type: "string" } },
|
|
511
|
+
standaloneElements: { type: "array", items: { type: "string" } },
|
|
512
|
+
svgElements: { type: "array", items: { type: "string" } },
|
|
513
|
+
imageElements: { type: "array", items: { type: "string" } },
|
|
514
|
+
commonUiElements: { type: "array", items: { type: "string" } },
|
|
515
|
+
},
|
|
516
|
+
},
|
|
517
|
+
],
|
|
518
|
+
},
|
|
519
|
+
create(
|
|
520
|
+
context: JsxCapitalizationRuleContext,
|
|
521
|
+
): Record<string, (node: OxlintASTNode) => void> {
|
|
522
|
+
// Load config from check.config.ts (single source of truth)
|
|
523
|
+
// Falls back to rule options if config file not available
|
|
524
|
+
const { excludedPaths, excludedFilePatterns } = getExcludedPaths(context);
|
|
525
|
+
const elementSets = getElementSets(context);
|
|
526
|
+
|
|
527
|
+
// Check if file is in excluded path
|
|
528
|
+
const isExcluded = isExcludedPath(
|
|
529
|
+
context,
|
|
530
|
+
excludedPaths,
|
|
531
|
+
excludedFilePatterns,
|
|
532
|
+
);
|
|
533
|
+
|
|
534
|
+
return {
|
|
535
|
+
JSXOpeningElement(node: OxlintASTNode): void {
|
|
536
|
+
// Skip if file is in excluded directory
|
|
537
|
+
if (isExcluded) {
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
// Skip if has disable comment
|
|
542
|
+
if (hasDisableComment(context, node)) {
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
const openingElement = node as JSXOpeningElement;
|
|
547
|
+
const elementName = getElementName(openingElement);
|
|
548
|
+
|
|
549
|
+
// Skip if we couldn't get the element name
|
|
550
|
+
if (!elementName) {
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// Check if it's a lowercase element (HTML element that should be capitalized)
|
|
555
|
+
if (isLowercaseElement(elementName)) {
|
|
556
|
+
context.report({
|
|
557
|
+
node,
|
|
558
|
+
message: getErrorMessage(elementName, elementSets),
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
},
|
|
562
|
+
};
|
|
563
|
+
},
|
|
564
|
+
};
|
|
565
|
+
|
|
566
|
+
// ============================================================
|
|
567
|
+
// Plugin Export
|
|
568
|
+
// ============================================================
|
|
569
|
+
|
|
570
|
+
export default {
|
|
571
|
+
meta: {
|
|
572
|
+
name: "oxlint-plugin-jsx-capitalization",
|
|
573
|
+
version: "1.0.0",
|
|
574
|
+
},
|
|
575
|
+
rules: {
|
|
576
|
+
"jsx-capitalization": jsxCapitalizationRule,
|
|
577
|
+
},
|
|
578
|
+
};
|
|
579
|
+
|
|
580
|
+
// Named exports for direct access
|
|
581
|
+
export { DEFAULT_CONFIG as defaultConfig };
|
|
582
|
+
export { DEFAULT_MESSAGES as defaultMessages };
|
|
583
|
+
export type { JsxCapitalizationMessages, JsxCapitalizationPluginConfig };
|