@next-vibe/checker 1.0.11 → 1.0.13
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 +26 -22
- package/.dist/bin/vibe-runtime.js.map +5 -5
- package/.dist/oxlint-plugins/i18n.js +4 -0
- package/.dist/oxlint-plugins/i18n.js.map +1 -0
- package/.dist/oxlint-plugins/jsx-capitalization.js +4 -0
- package/.dist/oxlint-plugins/jsx-capitalization.js.map +1 -0
- package/.dist/oxlint-plugins/restricted-syntax.js +4 -0
- package/.dist/oxlint-plugins/restricted-syntax.js.map +1 -0
- package/check.config.ts +4 -12
- 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 +78 -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 +886 -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 +532 -0
- package/src/app/api/[locale]/system/check/test-project/check.config.ts +981 -0
- package/src/app/api/[locale]/system/check/test-project/package.json +12 -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 +34 -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,372 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Oxlint JS Plugin: i18n No Literal String
|
|
3
|
+
*
|
|
4
|
+
* Detects untranslated literal strings in JSX and code.
|
|
5
|
+
* Configuration is loaded from check.config.ts via the shared config loader.
|
|
6
|
+
*
|
|
7
|
+
* Supports:
|
|
8
|
+
* - Bun runtime (direct TypeScript)
|
|
9
|
+
* - Node.js runtime (compiled JavaScript)
|
|
10
|
+
* - NPM package installation
|
|
11
|
+
* - Local development
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { I18nPluginConfig } from "../../../../config/types";
|
|
15
|
+
import type {
|
|
16
|
+
JSXAttribute,
|
|
17
|
+
JSXIdentifier,
|
|
18
|
+
JSXLiteral,
|
|
19
|
+
OxlintASTNode,
|
|
20
|
+
OxlintRuleContext,
|
|
21
|
+
} from "../../../types";
|
|
22
|
+
import type {
|
|
23
|
+
createPluginMessages,
|
|
24
|
+
loadPluginConfig,
|
|
25
|
+
} from "../../shared/config-loader";
|
|
26
|
+
|
|
27
|
+
// ============================================================
|
|
28
|
+
// Types
|
|
29
|
+
// ============================================================
|
|
30
|
+
|
|
31
|
+
/** Extended rule context with i18n options */
|
|
32
|
+
interface I18nRuleContext extends OxlintRuleContext {
|
|
33
|
+
options?: I18nPluginConfig[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Default error messages (can be customized via config) */
|
|
37
|
+
interface I18nMessages {
|
|
38
|
+
jsxText: string;
|
|
39
|
+
jsxExpression: string;
|
|
40
|
+
jsxAttribute: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// ============================================================
|
|
44
|
+
// Default Configuration
|
|
45
|
+
// ============================================================
|
|
46
|
+
|
|
47
|
+
const DEFAULT_CONFIG: I18nPluginConfig = {
|
|
48
|
+
words: {
|
|
49
|
+
exclude: [
|
|
50
|
+
// Punctuation and symbols only
|
|
51
|
+
String.raw`^[\[\]{}—<>•+%#@.:_*;,/()\-]+$`,
|
|
52
|
+
// Whitespace only
|
|
53
|
+
String.raw`^\s+$`,
|
|
54
|
+
// Numbers only
|
|
55
|
+
String.raw`^\d+$`,
|
|
56
|
+
// File extensions
|
|
57
|
+
String.raw`^[^\s]+\.[^\s]+$`,
|
|
58
|
+
// URLs and paths
|
|
59
|
+
String.raw`^(?:https?://|/)[^\s]*$`,
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
"jsx-attributes": {
|
|
63
|
+
exclude: [
|
|
64
|
+
"className",
|
|
65
|
+
"href",
|
|
66
|
+
"src",
|
|
67
|
+
"alt",
|
|
68
|
+
"id",
|
|
69
|
+
"name",
|
|
70
|
+
"type",
|
|
71
|
+
"value",
|
|
72
|
+
"key",
|
|
73
|
+
"ref",
|
|
74
|
+
"*ClassName",
|
|
75
|
+
"*Style",
|
|
76
|
+
"*Variant",
|
|
77
|
+
"*Size",
|
|
78
|
+
"*Color",
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
"object-properties": {
|
|
82
|
+
exclude: [],
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const DEFAULT_MESSAGES: I18nMessages = {
|
|
87
|
+
jsxText: 'Literal string "{value}" should be translated using i18n.',
|
|
88
|
+
jsxExpression:
|
|
89
|
+
'Literal string "{value}" in JSX expression should be translated.',
|
|
90
|
+
jsxAttribute:
|
|
91
|
+
'Literal string "{value}" in JSX attribute should be translated.',
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// ============================================================
|
|
95
|
+
// Dynamic Import for Shared Loader
|
|
96
|
+
// ============================================================
|
|
97
|
+
|
|
98
|
+
// Plugin config loader (lazy loaded to handle various runtime environments)
|
|
99
|
+
let configLoader: {
|
|
100
|
+
loadPluginConfig: typeof loadPluginConfig;
|
|
101
|
+
createPluginMessages: typeof createPluginMessages;
|
|
102
|
+
} | null = null;
|
|
103
|
+
|
|
104
|
+
let cachedConfig: I18nPluginConfig | null = null;
|
|
105
|
+
let cachedMessages: I18nMessages | null = null;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Load the shared config loader module
|
|
109
|
+
* Uses dynamic require to handle different runtime environments
|
|
110
|
+
*/
|
|
111
|
+
function getConfigLoader(): typeof configLoader {
|
|
112
|
+
if (configLoader) {
|
|
113
|
+
return configLoader;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
try {
|
|
117
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- Plugin context requires sync loading
|
|
118
|
+
configLoader = require("../../shared/config-loader") as typeof configLoader;
|
|
119
|
+
return configLoader;
|
|
120
|
+
} catch {
|
|
121
|
+
// Shared loader not available, will use fallback
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Load i18n config using shared loader or fallback
|
|
128
|
+
*/
|
|
129
|
+
function loadI18nConfig(): I18nPluginConfig {
|
|
130
|
+
if (cachedConfig !== null) {
|
|
131
|
+
return cachedConfig;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const loader = getConfigLoader();
|
|
135
|
+
|
|
136
|
+
if (loader) {
|
|
137
|
+
const result = loader.loadPluginConfig(
|
|
138
|
+
"oxlint-plugin-i18n/no-literal-string",
|
|
139
|
+
DEFAULT_CONFIG,
|
|
140
|
+
);
|
|
141
|
+
cachedConfig = result.config ?? DEFAULT_CONFIG;
|
|
142
|
+
} else {
|
|
143
|
+
// Fallback: try direct require of check.config.ts
|
|
144
|
+
cachedConfig = loadConfigFallback();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return cachedConfig;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Fallback config loading when shared loader is not available
|
|
152
|
+
*/
|
|
153
|
+
function loadConfigFallback(): I18nPluginConfig {
|
|
154
|
+
try {
|
|
155
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment -- Plugin fallback requires dynamic loading
|
|
156
|
+
const config = require(`${process.cwd()}/check.config.ts`);
|
|
157
|
+
const checkConfig = config.default ?? config;
|
|
158
|
+
const exported =
|
|
159
|
+
typeof checkConfig === "function" ? checkConfig() : checkConfig;
|
|
160
|
+
|
|
161
|
+
const ruleConfig =
|
|
162
|
+
exported?.oxlint?.rules?.["oxlint-plugin-i18n/no-literal-string"];
|
|
163
|
+
if (Array.isArray(ruleConfig) && ruleConfig[1]) {
|
|
164
|
+
return ruleConfig[1] as I18nPluginConfig;
|
|
165
|
+
}
|
|
166
|
+
} catch {
|
|
167
|
+
// Config not available
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return DEFAULT_CONFIG;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Get error messages (supports customization via config)
|
|
175
|
+
*/
|
|
176
|
+
function getMessages(): I18nMessages {
|
|
177
|
+
if (cachedMessages !== null) {
|
|
178
|
+
return cachedMessages;
|
|
179
|
+
}
|
|
180
|
+
cachedMessages = DEFAULT_MESSAGES;
|
|
181
|
+
return cachedMessages;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Format a message with value substitution
|
|
186
|
+
*/
|
|
187
|
+
function formatMessage(template: string, value: string): string {
|
|
188
|
+
return template.replaceAll("{value}", value);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// ============================================================
|
|
192
|
+
// Rule Implementation
|
|
193
|
+
// ============================================================
|
|
194
|
+
|
|
195
|
+
const noLiteralStringRule = {
|
|
196
|
+
meta: {
|
|
197
|
+
type: "problem",
|
|
198
|
+
docs: {
|
|
199
|
+
description: "Disallow literal strings that should be internationalized",
|
|
200
|
+
category: "Best Practices",
|
|
201
|
+
recommended: true,
|
|
202
|
+
},
|
|
203
|
+
schema: [
|
|
204
|
+
{
|
|
205
|
+
type: "object",
|
|
206
|
+
properties: {
|
|
207
|
+
words: {
|
|
208
|
+
type: "object",
|
|
209
|
+
properties: {
|
|
210
|
+
exclude: { type: "array", items: { type: "string" } },
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
"jsx-attributes": {
|
|
214
|
+
type: "object",
|
|
215
|
+
properties: {
|
|
216
|
+
exclude: { type: "array", items: { type: "string" } },
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
"object-properties": {
|
|
220
|
+
type: "object",
|
|
221
|
+
properties: {
|
|
222
|
+
exclude: { type: "array", items: { type: "string" } },
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
},
|
|
229
|
+
create(
|
|
230
|
+
context: I18nRuleContext,
|
|
231
|
+
): Record<string, (node: OxlintASTNode) => void> {
|
|
232
|
+
// Load config from check.config.ts (single source of truth)
|
|
233
|
+
// Falls back to rule options if config file not available
|
|
234
|
+
const configFromFile = loadI18nConfig();
|
|
235
|
+
const ruleOptions = context.options?.[0] ?? {};
|
|
236
|
+
|
|
237
|
+
// Merge: rule options override file config
|
|
238
|
+
const options: I18nPluginConfig = {
|
|
239
|
+
...configFromFile,
|
|
240
|
+
...ruleOptions,
|
|
241
|
+
words: {
|
|
242
|
+
...configFromFile.words,
|
|
243
|
+
...ruleOptions.words,
|
|
244
|
+
},
|
|
245
|
+
"jsx-attributes": {
|
|
246
|
+
...configFromFile["jsx-attributes"],
|
|
247
|
+
...ruleOptions["jsx-attributes"],
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
const messages = getMessages();
|
|
252
|
+
|
|
253
|
+
// Convert string patterns to RegExp with Unicode support
|
|
254
|
+
const wordExclusionPatterns = (options.words?.exclude ?? []).map(
|
|
255
|
+
(pattern: string) => new RegExp(pattern, "u"),
|
|
256
|
+
);
|
|
257
|
+
const excludedAttributes = options["jsx-attributes"]?.exclude ?? [];
|
|
258
|
+
|
|
259
|
+
// Helper: Check if a string should be excluded
|
|
260
|
+
const shouldExcludeString = (value: string): boolean => {
|
|
261
|
+
if (!value || typeof value !== "string") {
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Check all word exclusion patterns
|
|
266
|
+
for (const pattern of wordExclusionPatterns) {
|
|
267
|
+
if (pattern.test(value)) {
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return false;
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
// Helper: Check if JSX attribute is excluded
|
|
276
|
+
const isExcludedAttribute = (attrName: string): boolean => {
|
|
277
|
+
return excludedAttributes.some((excluded: string) => {
|
|
278
|
+
if (excluded.startsWith("*")) {
|
|
279
|
+
return attrName.endsWith(excluded.slice(1));
|
|
280
|
+
}
|
|
281
|
+
return attrName === excluded;
|
|
282
|
+
});
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
return {
|
|
286
|
+
// JSX Text nodes
|
|
287
|
+
JSXText(node: OxlintASTNode): void {
|
|
288
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- AST node parsing: Node values from the parser are unknown until runtime type checking
|
|
289
|
+
const value = (node as { value?: unknown }).value;
|
|
290
|
+
if (typeof value !== "string") {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
const trimmed = value.trim();
|
|
294
|
+
|
|
295
|
+
if (trimmed && !shouldExcludeString(trimmed)) {
|
|
296
|
+
context.report({
|
|
297
|
+
node,
|
|
298
|
+
message: formatMessage(messages.jsxText, trimmed),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
|
|
303
|
+
// String literals in JSX expressions
|
|
304
|
+
"JSXExpressionContainer > Literal"(node: OxlintASTNode): void {
|
|
305
|
+
const value = (node as JSXLiteral).value;
|
|
306
|
+
if (typeof value === "string" && !shouldExcludeString(value)) {
|
|
307
|
+
context.report({
|
|
308
|
+
node,
|
|
309
|
+
message: formatMessage(messages.jsxExpression, value),
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
|
|
314
|
+
// JSX Attribute values
|
|
315
|
+
JSXAttribute(node: OxlintASTNode): void {
|
|
316
|
+
const attrNode = node as JSXAttribute;
|
|
317
|
+
const nameNode = attrNode.name;
|
|
318
|
+
|
|
319
|
+
if (!nameNode) {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// Get the attribute name string
|
|
324
|
+
const attrName: string =
|
|
325
|
+
(nameNode as JSXIdentifier).name ?? String(nameNode);
|
|
326
|
+
|
|
327
|
+
// Skip ALL excluded attributes
|
|
328
|
+
if (isExcludedAttribute(attrName)) {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// For non-excluded attributes, check if the value is a literal string
|
|
333
|
+
const valueNode = attrNode.value;
|
|
334
|
+
if (!valueNode) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
if (valueNode.type === "Literal") {
|
|
339
|
+
const literalValue = (valueNode as JSXLiteral).value;
|
|
340
|
+
if (
|
|
341
|
+
typeof literalValue === "string" &&
|
|
342
|
+
!shouldExcludeString(literalValue)
|
|
343
|
+
) {
|
|
344
|
+
context.report({
|
|
345
|
+
node: valueNode,
|
|
346
|
+
message: formatMessage(messages.jsxAttribute, literalValue),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
};
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
// ============================================================
|
|
356
|
+
// Plugin Export
|
|
357
|
+
// ============================================================
|
|
358
|
+
|
|
359
|
+
export default {
|
|
360
|
+
meta: {
|
|
361
|
+
name: "oxlint-plugin-i18n",
|
|
362
|
+
version: "1.0.0",
|
|
363
|
+
},
|
|
364
|
+
rules: {
|
|
365
|
+
"no-literal-string": noLiteralStringRule,
|
|
366
|
+
},
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
// Named exports for direct access
|
|
370
|
+
export { DEFAULT_CONFIG as defaultConfig };
|
|
371
|
+
export { DEFAULT_MESSAGES as defaultMessages };
|
|
372
|
+
export type { I18nMessages, I18nPluginConfig };
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# oxlint-plugin-jsx-capitalization
|
|
2
|
+
|
|
3
|
+
Oxlint plugin that enforces the use of capitalized JSX components from `next-vibe-ui` instead of lowercase HTML elements.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- ✅ Detects lowercase JSX elements (div, p, a, button, etc.)
|
|
8
|
+
- ✅ Provides helpful error messages with suggested imports
|
|
9
|
+
- ✅ Automatically excludes files in `/src/packages/next-vibe-ui/web/` directory
|
|
10
|
+
- ✅ Supports disable comments
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
This plugin is part of the monorepo and is built automatically.
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm run build
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
The plugin is configured in the oxlint configuration file:
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"jsPlugins": [
|
|
27
|
+
"oxlint-plugin-jsx-capitalization"
|
|
28
|
+
],
|
|
29
|
+
"rules": {
|
|
30
|
+
"oxlint-plugin-jsx-capitalization/jsx-capitalization": "error"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Error Examples
|
|
36
|
+
|
|
37
|
+
### Common UI Components
|
|
38
|
+
|
|
39
|
+
#### ❌ Bad
|
|
40
|
+
```tsx
|
|
41
|
+
function MyComponent() {
|
|
42
|
+
return <div>Hello World</div>;
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Error message:**
|
|
47
|
+
```
|
|
48
|
+
Use platform-independent <Div> component instead of <div>.
|
|
49
|
+
import { Div } from "next-vibe-ui/ui/div";
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### ✅ Good
|
|
53
|
+
```tsx
|
|
54
|
+
import { Div } from "next-vibe-ui/ui/div";
|
|
55
|
+
|
|
56
|
+
function MyComponent() {
|
|
57
|
+
return <Div>Hello World</Div>;
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Typography Components
|
|
62
|
+
|
|
63
|
+
#### ❌ Bad
|
|
64
|
+
```tsx
|
|
65
|
+
function Article() {
|
|
66
|
+
return (
|
|
67
|
+
<>
|
|
68
|
+
<h2>Title</h2>
|
|
69
|
+
<p>Paragraph text</p>
|
|
70
|
+
</>
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Error messages:**
|
|
76
|
+
```
|
|
77
|
+
Use typography component <H2> instead of <h2>.
|
|
78
|
+
import { H2 } from "next-vibe-ui/ui/typography";
|
|
79
|
+
|
|
80
|
+
Use typography component <P> instead of <p>.
|
|
81
|
+
import { P } from "next-vibe-ui/ui/typography";
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
#### ✅ Good
|
|
85
|
+
```tsx
|
|
86
|
+
import { H2, P } from "next-vibe-ui/ui/typography";
|
|
87
|
+
|
|
88
|
+
function Article() {
|
|
89
|
+
return (
|
|
90
|
+
<>
|
|
91
|
+
<H2>Title</H2>
|
|
92
|
+
<P>Paragraph text</P>
|
|
93
|
+
</>
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Image Components
|
|
99
|
+
|
|
100
|
+
#### ❌ Bad
|
|
101
|
+
```tsx
|
|
102
|
+
function Avatar() {
|
|
103
|
+
return <img src="/avatar.png" alt="User" />;
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Error message:**
|
|
108
|
+
```
|
|
109
|
+
Use platform-independent <Image> component instead of <img>.
|
|
110
|
+
import { Image } from "next-vibe-ui/ui/image";
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
#### ✅ Good
|
|
114
|
+
```tsx
|
|
115
|
+
import { Image } from "next-vibe-ui/ui/image";
|
|
116
|
+
|
|
117
|
+
function Avatar() {
|
|
118
|
+
return <Image src="/avatar.png" alt="User" />;
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### SVG Elements
|
|
123
|
+
|
|
124
|
+
#### ❌ Bad
|
|
125
|
+
```tsx
|
|
126
|
+
function Icon() {
|
|
127
|
+
return (
|
|
128
|
+
<svg viewBox="0 0 24 24">
|
|
129
|
+
<path d="M12 2L2 7v10l10 5 10-5V7L12 2z" />
|
|
130
|
+
</svg>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Error message:**
|
|
136
|
+
```
|
|
137
|
+
SVG element <svg> detected. For icons, use components from
|
|
138
|
+
next-vibe-ui/ui/icons instead. For custom SVG, create
|
|
139
|
+
platform-independent components using react-native-svg that
|
|
140
|
+
work on both web and native.
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### ✅ Good
|
|
144
|
+
```tsx
|
|
145
|
+
// Option 1: Use existing icon components
|
|
146
|
+
import { CheckIcon } from "next-vibe-ui/ui/icons/Check";
|
|
147
|
+
|
|
148
|
+
function Success() {
|
|
149
|
+
return <CheckIcon />;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Option 2: Create custom SVG component with react-native-svg
|
|
153
|
+
import Svg, { Path } from "react-native-svg";
|
|
154
|
+
|
|
155
|
+
function CustomIcon() {
|
|
156
|
+
return (
|
|
157
|
+
<Svg viewBox="0 0 24 24">
|
|
158
|
+
<Path d="M12 2L2 7v10l10 5 10-5V7L12 2z" />
|
|
159
|
+
</Svg>
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Excluded Paths
|
|
165
|
+
|
|
166
|
+
Files in the following directory are automatically excluded:
|
|
167
|
+
- `/src/packages/next-vibe-ui/web/`
|
|
168
|
+
|
|
169
|
+
## Disable Comments
|
|
170
|
+
|
|
171
|
+
You can disable the rule for specific lines using comments:
|
|
172
|
+
|
|
173
|
+
```tsx
|
|
174
|
+
// eslint-disable-next-line oxlint-plugin-jsx-capitalization/jsx-capitalization
|
|
175
|
+
<div>This is allowed</div>
|
|
176
|
+
|
|
177
|
+
// oxlint-disable-next-line jsx-capitalization
|
|
178
|
+
<p>This is also allowed</p>
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Element Categories
|
|
182
|
+
|
|
183
|
+
The plugin checks for **ALL lowercase JSX elements** and provides context-specific error messages:
|
|
184
|
+
|
|
185
|
+
### 1. Typography Components
|
|
186
|
+
Import from `next-vibe-ui/ui/typography`:
|
|
187
|
+
- **Headings:** h1, h2, h3, h4 → H1, H2, H3, H4
|
|
188
|
+
- **Text:** p → P
|
|
189
|
+
- **Quotes:** blockquote → BlockQuote
|
|
190
|
+
- **Code:** code → Code
|
|
191
|
+
|
|
192
|
+
### 2. Standalone UI Components
|
|
193
|
+
Import individually from `next-vibe-ui/ui/{component}`:
|
|
194
|
+
- **Text:** span → Span (from `next-vibe-ui/ui/span`)
|
|
195
|
+
- **Code blocks:** pre → Pre (from `next-vibe-ui/ui/pre`)
|
|
196
|
+
|
|
197
|
+
### 3. Common UI Components
|
|
198
|
+
Import from `next-vibe-ui/ui/{element}`:
|
|
199
|
+
- **Containers:** div, section, article, aside, header, footer, main, nav
|
|
200
|
+
- **Interactive:** button, input, textarea, select, label, form
|
|
201
|
+
- **Lists:** ul, ol, li
|
|
202
|
+
- **Tables:** table, thead, tbody, tr, th, td
|
|
203
|
+
- **Links:** link
|
|
204
|
+
- **And many more...**
|
|
205
|
+
|
|
206
|
+
### 4. Image Components
|
|
207
|
+
Import from `next-vibe-ui/ui/image`:
|
|
208
|
+
- **Images:** img, picture → Image
|
|
209
|
+
|
|
210
|
+
### 5. SVG Elements
|
|
211
|
+
**Suggests using icon components or react-native-svg:**
|
|
212
|
+
- svg, path, circle, rect, polygon, etc.
|
|
213
|
+
- For icons: Use components from `next-vibe-ui/ui/icons`
|
|
214
|
+
- For custom SVG: Use `react-native-svg` for platform independence
|
|
215
|
+
|
|
216
|
+
### 6. Unknown Elements
|
|
217
|
+
For any element without a known wrapper component, the plugin suggests:
|
|
218
|
+
1. Creating `next-vibe-ui/web/ui/{element}.tsx` for web
|
|
219
|
+
2. Creating `next-vibe-ui/native/ui/{element}.tsx` for React Native
|
|
220
|
+
3. Or using an existing component if available
|
|
221
|
+
|
|
222
|
+
**Note:** The plugin uses dynamic lowercase detection, so it catches **any** element starting with a lowercase letter.
|
|
223
|
+
|
|
224
|
+
## Development
|
|
225
|
+
|
|
226
|
+
### Build
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
npm run build
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Watch mode
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
npm run dev
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Clean
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
npm run clean
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## License
|
|
245
|
+
|
|
246
|
+
MIT
|