@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,500 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Oxlint JS Plugin: Restricted Syntax
|
|
3
|
+
*
|
|
4
|
+
* Enforces custom syntax restrictions:
|
|
5
|
+
* - No `unknown` type
|
|
6
|
+
* - No `object` type
|
|
7
|
+
* - No `throw` statements
|
|
8
|
+
* - No JSX in object literals (except for common React node properties like content, icon, title, etc.)
|
|
9
|
+
*
|
|
10
|
+
* Configuration is loaded from check.config.ts via the shared config loader.
|
|
11
|
+
*
|
|
12
|
+
* Supports:
|
|
13
|
+
* - Bun runtime (direct TypeScript)
|
|
14
|
+
* - Node.js runtime (compiled JavaScript)
|
|
15
|
+
* - NPM package installation
|
|
16
|
+
* - Local development
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import type { RestrictedSyntaxPluginConfig } from "../../../../config/types";
|
|
20
|
+
import type {
|
|
21
|
+
OxlintASTNode,
|
|
22
|
+
OxlintComment,
|
|
23
|
+
OxlintRuleContext,
|
|
24
|
+
} from "../../../types";
|
|
25
|
+
import type {
|
|
26
|
+
createPluginMessages,
|
|
27
|
+
loadPluginConfig,
|
|
28
|
+
} from "../../shared/config-loader";
|
|
29
|
+
|
|
30
|
+
// ============================================================
|
|
31
|
+
// Types
|
|
32
|
+
// ============================================================
|
|
33
|
+
|
|
34
|
+
/** Extended rule context with restricted-syntax options */
|
|
35
|
+
interface RestrictedSyntaxRuleContext extends OxlintRuleContext {
|
|
36
|
+
options?: RestrictedSyntaxPluginConfig[];
|
|
37
|
+
getCommentsInside?: (node: OxlintASTNode) => OxlintComment[];
|
|
38
|
+
getCommentsBefore?: (node: OxlintASTNode) => OxlintComment[];
|
|
39
|
+
getFilename?: () => string;
|
|
40
|
+
filename?: string;
|
|
41
|
+
sourceCode?: {
|
|
42
|
+
getCommentsBefore?: (node: OxlintASTNode) => OxlintComment[];
|
|
43
|
+
getCommentsInside?: (node: OxlintASTNode) => OxlintComment[];
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** AST node for Identifier */
|
|
48
|
+
interface Identifier extends OxlintASTNode {
|
|
49
|
+
type: "Identifier";
|
|
50
|
+
name: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** AST node for Literal */
|
|
54
|
+
interface Literal extends OxlintASTNode {
|
|
55
|
+
type: "Literal";
|
|
56
|
+
value: string | number | boolean | null;
|
|
57
|
+
raw?: string;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** AST node for Property */
|
|
61
|
+
interface Property extends OxlintASTNode {
|
|
62
|
+
type: "Property";
|
|
63
|
+
key?: OxlintASTNode;
|
|
64
|
+
value?: OxlintASTNode;
|
|
65
|
+
computed?: boolean;
|
|
66
|
+
method?: boolean;
|
|
67
|
+
shorthand?: boolean;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** AST node for ParenthesizedExpression */
|
|
71
|
+
interface ParenthesizedExpression extends OxlintASTNode {
|
|
72
|
+
type: "ParenthesizedExpression";
|
|
73
|
+
expression?: OxlintASTNode;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Default error messages (can be customized via config) */
|
|
77
|
+
interface RestrictedSyntaxMessages {
|
|
78
|
+
unknownType: string;
|
|
79
|
+
objectType: string;
|
|
80
|
+
throwStatement: string;
|
|
81
|
+
jsxInObjectLiteral: string;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// ============================================================
|
|
85
|
+
// Default Configuration
|
|
86
|
+
// ============================================================
|
|
87
|
+
|
|
88
|
+
const DEFAULT_CONFIG: RestrictedSyntaxPluginConfig = {
|
|
89
|
+
jsxAllowedProperties: [
|
|
90
|
+
"content",
|
|
91
|
+
"icon",
|
|
92
|
+
"title",
|
|
93
|
+
"label",
|
|
94
|
+
"description",
|
|
95
|
+
"children",
|
|
96
|
+
"render",
|
|
97
|
+
"fallback",
|
|
98
|
+
"error",
|
|
99
|
+
"loading",
|
|
100
|
+
"empty",
|
|
101
|
+
"header",
|
|
102
|
+
"footer",
|
|
103
|
+
"trigger",
|
|
104
|
+
"component",
|
|
105
|
+
],
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const DEFAULT_MESSAGES: RestrictedSyntaxMessages = {
|
|
109
|
+
unknownType:
|
|
110
|
+
"Usage of the 'unknown' type isn't allowed. Consider using the inferred types from the unified interface system based on definition.ts",
|
|
111
|
+
objectType:
|
|
112
|
+
"Usage of the 'object' type isn't allowed. Consider using the inferred types from the unified interface system based on definition.ts",
|
|
113
|
+
throwStatement:
|
|
114
|
+
"Usage of 'throw' statements is not allowed. Use proper ResponseType<T> patterns instead.",
|
|
115
|
+
jsxInObjectLiteral:
|
|
116
|
+
"JSX elements inside object literals are not allowed. Extract JSX to a separate function to ensure i18n rules work properly.",
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
// ============================================================
|
|
120
|
+
// Dynamic Import for Shared Loader
|
|
121
|
+
// ============================================================
|
|
122
|
+
|
|
123
|
+
// Plugin config loader (lazy loaded to handle various runtime environments)
|
|
124
|
+
let configLoader: {
|
|
125
|
+
loadPluginConfig: typeof loadPluginConfig;
|
|
126
|
+
createPluginMessages: typeof createPluginMessages;
|
|
127
|
+
} | null = null;
|
|
128
|
+
|
|
129
|
+
let cachedConfig: RestrictedSyntaxPluginConfig | null = null;
|
|
130
|
+
let cachedMessages: RestrictedSyntaxMessages | null = null;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Load the shared config loader module
|
|
134
|
+
* Uses dynamic require to handle different runtime environments
|
|
135
|
+
*/
|
|
136
|
+
function getConfigLoader(): typeof configLoader {
|
|
137
|
+
if (configLoader) {
|
|
138
|
+
return configLoader;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
try {
|
|
142
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- Plugin context requires sync loading
|
|
143
|
+
configLoader = require("../../shared/config-loader") as typeof configLoader;
|
|
144
|
+
return configLoader;
|
|
145
|
+
} catch {
|
|
146
|
+
// Shared loader not available, will use fallback
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Load restricted-syntax config using shared loader or fallback
|
|
153
|
+
*/
|
|
154
|
+
function loadRestrictedSyntaxConfig(): RestrictedSyntaxPluginConfig {
|
|
155
|
+
if (cachedConfig !== null) {
|
|
156
|
+
return cachedConfig;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const loader = getConfigLoader();
|
|
160
|
+
|
|
161
|
+
if (loader) {
|
|
162
|
+
const result = loader.loadPluginConfig(
|
|
163
|
+
"oxlint-plugin-restricted/restricted-syntax",
|
|
164
|
+
DEFAULT_CONFIG,
|
|
165
|
+
);
|
|
166
|
+
cachedConfig = result.config ?? DEFAULT_CONFIG;
|
|
167
|
+
} else {
|
|
168
|
+
// Fallback: try direct require of check.config.ts
|
|
169
|
+
cachedConfig = loadConfigFallback();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return cachedConfig;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Fallback config loading when shared loader is not available
|
|
177
|
+
*/
|
|
178
|
+
function loadConfigFallback(): RestrictedSyntaxPluginConfig {
|
|
179
|
+
try {
|
|
180
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment -- Plugin fallback requires dynamic loading
|
|
181
|
+
const config = require(`${process.cwd()}/check.config.ts`);
|
|
182
|
+
const checkConfig = config.default ?? config;
|
|
183
|
+
const exported =
|
|
184
|
+
typeof checkConfig === "function" ? checkConfig() : checkConfig;
|
|
185
|
+
|
|
186
|
+
const ruleConfig =
|
|
187
|
+
exported?.oxlint?.rules?.["oxlint-plugin-restricted/restricted-syntax"];
|
|
188
|
+
if (Array.isArray(ruleConfig) && ruleConfig[1]) {
|
|
189
|
+
return ruleConfig[1] as RestrictedSyntaxPluginConfig;
|
|
190
|
+
}
|
|
191
|
+
} catch {
|
|
192
|
+
// Config not available
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return DEFAULT_CONFIG;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Get error messages (supports customization via config)
|
|
200
|
+
*/
|
|
201
|
+
function getMessages(): RestrictedSyntaxMessages {
|
|
202
|
+
if (cachedMessages !== null) {
|
|
203
|
+
return cachedMessages;
|
|
204
|
+
}
|
|
205
|
+
cachedMessages = DEFAULT_MESSAGES;
|
|
206
|
+
return cachedMessages;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// ============================================================
|
|
210
|
+
// Helper Functions
|
|
211
|
+
// ============================================================
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Type guard to check if a node is a Property node
|
|
215
|
+
*/
|
|
216
|
+
function isProperty(node: OxlintASTNode): node is Property {
|
|
217
|
+
return (
|
|
218
|
+
node.type === "Property" && typeof (node as Property).method === "boolean"
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Check if the current file is in an allowed path where restricted syntax is permitted
|
|
224
|
+
*/
|
|
225
|
+
function isAllowedPath(context: RestrictedSyntaxRuleContext): boolean {
|
|
226
|
+
let filename = "";
|
|
227
|
+
|
|
228
|
+
// Try to get filename from context
|
|
229
|
+
if (typeof context.getFilename === "function") {
|
|
230
|
+
filename = context.getFilename();
|
|
231
|
+
} else if (typeof context.filename === "string") {
|
|
232
|
+
filename = context.filename;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (!filename) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Check if the node has a disable comment
|
|
244
|
+
*/
|
|
245
|
+
function hasDisableComment(
|
|
246
|
+
context: RestrictedSyntaxRuleContext,
|
|
247
|
+
node: OxlintASTNode,
|
|
248
|
+
): boolean {
|
|
249
|
+
// Try to get comments from context
|
|
250
|
+
const getComments =
|
|
251
|
+
context.getCommentsBefore ?? context.sourceCode?.getCommentsBefore;
|
|
252
|
+
if (typeof getComments !== "function") {
|
|
253
|
+
// If comment API is not available, allow the node (fail open)
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
try {
|
|
258
|
+
const comments = getComments(node);
|
|
259
|
+
if (!comments || !Array.isArray(comments)) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Check if any preceding comment contains eslint-disable or oxlint-disable for restricted-syntax
|
|
264
|
+
for (const comment of comments) {
|
|
265
|
+
if (!comment || typeof comment.value !== "string") {
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
const commentText = comment.value.trim();
|
|
269
|
+
if (
|
|
270
|
+
(commentText.includes("eslint-disable-next-line") ||
|
|
271
|
+
commentText.includes("oxlint-disable-next-line")) &&
|
|
272
|
+
(commentText.includes("restricted-syntax") ||
|
|
273
|
+
commentText.includes("no-restricted-syntax"))
|
|
274
|
+
) {
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
} catch {
|
|
279
|
+
// If any error occurs, don't block (fail open)
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Check if a node is an ObjectProperty
|
|
288
|
+
*/
|
|
289
|
+
function isObjectProperty(prop: OxlintASTNode): prop is Property {
|
|
290
|
+
return isProperty(prop);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Get the JSX allowed properties Set from rule options or config file
|
|
295
|
+
*/
|
|
296
|
+
function getJsxAllowedProperties(
|
|
297
|
+
context: RestrictedSyntaxRuleContext,
|
|
298
|
+
): Set<string> {
|
|
299
|
+
// First try rule options (primary - passed via oxlint config)
|
|
300
|
+
const ruleOptions = context.options?.[0];
|
|
301
|
+
if (ruleOptions?.jsxAllowedProperties) {
|
|
302
|
+
return new Set(ruleOptions.jsxAllowedProperties);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// Fallback to config file (for direct plugin usage)
|
|
306
|
+
const config = loadRestrictedSyntaxConfig();
|
|
307
|
+
if (config.jsxAllowedProperties) {
|
|
308
|
+
return new Set(config.jsxAllowedProperties);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Return empty set if no config
|
|
312
|
+
return new Set();
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Check if a property key is in the allowlist for JSX values
|
|
317
|
+
*/
|
|
318
|
+
function isJSXAllowedKey(
|
|
319
|
+
prop: OxlintASTNode,
|
|
320
|
+
jsxAllowedProperties: Set<string>,
|
|
321
|
+
): boolean {
|
|
322
|
+
const property = prop as Property;
|
|
323
|
+
if (property.computed) {
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
const key = property.key;
|
|
327
|
+
if (!key) {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
let keyName: string | null = null;
|
|
332
|
+
|
|
333
|
+
if (key.type === "Identifier") {
|
|
334
|
+
keyName = (key as Identifier).name;
|
|
335
|
+
} else if (
|
|
336
|
+
key.type === "Literal" &&
|
|
337
|
+
typeof (key as Literal).value === "string"
|
|
338
|
+
) {
|
|
339
|
+
keyName = (key as Literal).value as string;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
return keyName !== null && jsxAllowedProperties.has(keyName);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Check if a node is a JSX element or fragment
|
|
347
|
+
*/
|
|
348
|
+
function isJSX(n: OxlintASTNode): boolean {
|
|
349
|
+
return n && (n.type === "JSXElement" || n.type === "JSXFragment");
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Unwrap parenthesized expressions to get the inner node
|
|
354
|
+
*/
|
|
355
|
+
function unwrapParen(n: OxlintASTNode): OxlintASTNode {
|
|
356
|
+
let cur = n;
|
|
357
|
+
while (cur?.type === "ParenthesizedExpression") {
|
|
358
|
+
const expr = (cur as ParenthesizedExpression).expression;
|
|
359
|
+
if (!expr) {
|
|
360
|
+
break;
|
|
361
|
+
}
|
|
362
|
+
cur = expr;
|
|
363
|
+
}
|
|
364
|
+
return cur;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// ============================================================
|
|
368
|
+
// Rule Implementation
|
|
369
|
+
// ============================================================
|
|
370
|
+
|
|
371
|
+
const restrictedSyntaxRule = {
|
|
372
|
+
meta: {
|
|
373
|
+
type: "problem",
|
|
374
|
+
docs: {
|
|
375
|
+
description:
|
|
376
|
+
"Enforces restricted syntax patterns (no unknown, object, throw, JSX in non-React-node properties)",
|
|
377
|
+
category: "Best Practices",
|
|
378
|
+
recommended: true,
|
|
379
|
+
},
|
|
380
|
+
schema: [
|
|
381
|
+
{
|
|
382
|
+
type: "object",
|
|
383
|
+
properties: {
|
|
384
|
+
jsxAllowedProperties: { type: "array", items: { type: "string" } },
|
|
385
|
+
},
|
|
386
|
+
},
|
|
387
|
+
],
|
|
388
|
+
},
|
|
389
|
+
create(
|
|
390
|
+
context: RestrictedSyntaxRuleContext,
|
|
391
|
+
): Record<string, (node: OxlintASTNode) => void> {
|
|
392
|
+
// Check if file is in allowed path (applies to all rules)
|
|
393
|
+
const isAllowed = isAllowedPath(context);
|
|
394
|
+
|
|
395
|
+
// Load JSX allowed properties from rule options or config (single source of truth)
|
|
396
|
+
const jsxAllowedProperties = getJsxAllowedProperties(context);
|
|
397
|
+
|
|
398
|
+
// Get customizable messages
|
|
399
|
+
const messages = getMessages();
|
|
400
|
+
|
|
401
|
+
return {
|
|
402
|
+
// ============================================================
|
|
403
|
+
// Restricted syntax rules
|
|
404
|
+
// ============================================================
|
|
405
|
+
TSUnknownKeyword(node: OxlintASTNode): void {
|
|
406
|
+
if (isAllowed || hasDisableComment(context, node)) {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
context.report({
|
|
410
|
+
node,
|
|
411
|
+
message: messages.unknownType,
|
|
412
|
+
});
|
|
413
|
+
},
|
|
414
|
+
|
|
415
|
+
TSObjectKeyword(node: OxlintASTNode): void {
|
|
416
|
+
if (isAllowed || hasDisableComment(context, node)) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
context.report({
|
|
420
|
+
node,
|
|
421
|
+
message: messages.objectType,
|
|
422
|
+
});
|
|
423
|
+
},
|
|
424
|
+
|
|
425
|
+
ThrowStatement(node: OxlintASTNode): void {
|
|
426
|
+
if (isAllowed || hasDisableComment(context, node)) {
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
context.report({
|
|
430
|
+
node,
|
|
431
|
+
message: messages.throwStatement,
|
|
432
|
+
});
|
|
433
|
+
},
|
|
434
|
+
|
|
435
|
+
Property(node: OxlintASTNode): void {
|
|
436
|
+
// Only process ObjectProperty nodes
|
|
437
|
+
if (!isObjectProperty(node)) {
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// Skip properties that are allowed to have JSX values
|
|
442
|
+
if (isJSXAllowedKey(node, jsxAllowedProperties)) {
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
const property = node as Property;
|
|
447
|
+
const value = property.value;
|
|
448
|
+
|
|
449
|
+
if (
|
|
450
|
+
!value ||
|
|
451
|
+
typeof value === "string" ||
|
|
452
|
+
typeof value === "number" ||
|
|
453
|
+
typeof value === "boolean" ||
|
|
454
|
+
value === null
|
|
455
|
+
) {
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// Check for direct JSX
|
|
460
|
+
if (isJSX(value)) {
|
|
461
|
+
context.report({
|
|
462
|
+
node: value,
|
|
463
|
+
message: messages.jsxInObjectLiteral,
|
|
464
|
+
});
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
// Check for parenthesized JSX
|
|
469
|
+
if (value.type === "ParenthesizedExpression") {
|
|
470
|
+
const inner = unwrapParen(value);
|
|
471
|
+
if (isJSX(inner)) {
|
|
472
|
+
context.report({
|
|
473
|
+
node: inner,
|
|
474
|
+
message: messages.jsxInObjectLiteral,
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
},
|
|
479
|
+
};
|
|
480
|
+
},
|
|
481
|
+
};
|
|
482
|
+
|
|
483
|
+
// ============================================================
|
|
484
|
+
// Plugin Export
|
|
485
|
+
// ============================================================
|
|
486
|
+
|
|
487
|
+
export default {
|
|
488
|
+
meta: {
|
|
489
|
+
name: "oxlint-plugin-restricted",
|
|
490
|
+
version: "1.0.0",
|
|
491
|
+
},
|
|
492
|
+
rules: {
|
|
493
|
+
"restricted-syntax": restrictedSyntaxRule,
|
|
494
|
+
},
|
|
495
|
+
};
|
|
496
|
+
|
|
497
|
+
// Named exports for direct access
|
|
498
|
+
export { DEFAULT_CONFIG as defaultConfig };
|
|
499
|
+
export { DEFAULT_MESSAGES as defaultMessages };
|
|
500
|
+
export type { RestrictedSyntaxMessages, RestrictedSyntaxPluginConfig };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test file for oxlint-plugin-restricted/restricted-syntax rule
|
|
3
|
+
*
|
|
4
|
+
* This file verifies that the restricted-syntax plugin catches all violations:
|
|
5
|
+
* - unknown type usage
|
|
6
|
+
* - object type usage
|
|
7
|
+
* - throw statements
|
|
8
|
+
* - JSX in object literals (except icon property)
|
|
9
|
+
*
|
|
10
|
+
* Each violation is marked with eslint-disable-next-line to assert that an
|
|
11
|
+
* error SHOULD occur. If the rule stops working, these assertions will become
|
|
12
|
+
* errors themselves.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type React from "react";
|
|
16
|
+
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// TEST 1: unknown type (SHOULD ERROR)
|
|
19
|
+
// ============================================================================
|
|
20
|
+
|
|
21
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax
|
|
22
|
+
const testUnknown: unknown = 5;
|
|
23
|
+
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// TEST 2: object type (SHOULD ERROR)
|
|
26
|
+
// ============================================================================
|
|
27
|
+
|
|
28
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax
|
|
29
|
+
const testObject: object = {};
|
|
30
|
+
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// TEST 3: throw statement (SHOULD ERROR)
|
|
33
|
+
// ============================================================================
|
|
34
|
+
|
|
35
|
+
function testThrow() {
|
|
36
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax
|
|
37
|
+
throw new Error("error"); // Should error: Usage of 'throw' statements is not allowed
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// TEST 4: JSX in object literal (SHOULD ERROR)
|
|
42
|
+
// ============================================================================
|
|
43
|
+
|
|
44
|
+
const configWithJsx = {
|
|
45
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax, oxlint-plugin-i18n/no-literal-string
|
|
46
|
+
content: <div>Test</div>, // Should error: JSX elements inside object literals are not allowed
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// TEST 5: JSX in object with icon exception (SHOULD PASS)
|
|
51
|
+
// ============================================================================
|
|
52
|
+
|
|
53
|
+
const configWithIcon: { icon: React.ReactNode } = {
|
|
54
|
+
// eslint-disable-next-line oxlint-plugin-i18n/no-literal-string
|
|
55
|
+
icon: <svg>Icon</svg>, // Should NOT error: icon property is allowed
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// ============================================================================
|
|
59
|
+
// TEST 6: Parenthesized JSX in object (SHOULD ERROR)
|
|
60
|
+
// ============================================================================
|
|
61
|
+
|
|
62
|
+
const configWithParenthesizedJsx = {
|
|
63
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax, oxlint-plugin-i18n/no-literal-string
|
|
64
|
+
element: <span>Wrapped</span>, // Should error: JSX elements inside object literals are not allowed
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export {
|
|
68
|
+
configWithIcon,
|
|
69
|
+
configWithJsx,
|
|
70
|
+
configWithParenthesizedJsx,
|
|
71
|
+
testObject,
|
|
72
|
+
testThrow,
|
|
73
|
+
testUnknown,
|
|
74
|
+
};
|