2026-04-08 02:43:29 +02:00
|
|
|
/* eslint-env node */
|
|
|
|
|
module.exports = {
|
|
|
|
|
root: true,
|
|
|
|
|
parser: "@typescript-eslint/parser",
|
|
|
|
|
plugins: ["solid"],
|
|
|
|
|
extends: [
|
|
|
|
|
"eslint:recommended",
|
|
|
|
|
"plugin:@typescript-eslint/recommended",
|
|
|
|
|
"plugin:solid/recommended",
|
|
|
|
|
],
|
|
|
|
|
overrides: [
|
|
|
|
|
{
|
|
|
|
|
files: ["**/*.tsx"],
|
|
|
|
|
parserOptions: {
|
|
|
|
|
ecmaFeatures: {
|
|
|
|
|
jsx: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
settings: {
|
|
|
|
|
solid: {
|
|
|
|
|
noImportReact: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
rules: {
|
fix: ESLint, SolidJS reactivity bugs, role workflow bug fixes
ESLint:
- Downgrade eslint v10 → v8.57.1 (compatible with @typescript-eslint v7 + eslint-plugin-solid)
- Fix .eslintrc.cjs: remove invalid require() calls, update to valid rule set
- Add npm run lint script
SolidJS solid/prefer-for (18 fixes across 3 files):
- OpportunityGraph.tsx: EDGES.map() → <For> with reactive visible/drawing signals
- PortfolioPage.tsx: services.map() and experience.map() → <For>
- DashboardDesignPreview.tsx: 15 .map() calls → <For> (stats, packages, timeline,
testimonials, quick actions, step tabs, pills, form fields, status lists, buttons,
counters, filter tabs)
Role workflow bug fixes (from full role audit):
- cover_letter → cover_note in job applications (field name canonical fix)
- applicant_user_id field name fix in shortlisted candidates
- CompanyApplicationsPage: GET → POST for contact unlock endpoint
- CreditsPage: /payments/history → /payments/invoices; response key data.data
- CreditsPage: holds response key data.data (not data.holds)
- ProfessionalResponsesPage: requirement_id → lead_id, decision_at → resolved_at
- PortfolioPage: data.items → data.data; fix vacuous-truth in form completion check;
saveProfessionalForm: check res.ok before showing success
- CustomerBrowseProfessionalsPage: professional_role_code → profession_key
- MyDashboardPage: professional prefix split('_')[0] not replace('_','')
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-12 13:38:38 +02:00
|
|
|
// Rules valid in eslint-plugin-solid v0.14.5
|
2026-04-08 02:43:29 +02:00
|
|
|
"solid/jsx-no-undef": "error",
|
|
|
|
|
"solid/prefer-classlist": "error",
|
fix: ESLint, SolidJS reactivity bugs, role workflow bug fixes
ESLint:
- Downgrade eslint v10 → v8.57.1 (compatible with @typescript-eslint v7 + eslint-plugin-solid)
- Fix .eslintrc.cjs: remove invalid require() calls, update to valid rule set
- Add npm run lint script
SolidJS solid/prefer-for (18 fixes across 3 files):
- OpportunityGraph.tsx: EDGES.map() → <For> with reactive visible/drawing signals
- PortfolioPage.tsx: services.map() and experience.map() → <For>
- DashboardDesignPreview.tsx: 15 .map() calls → <For> (stats, packages, timeline,
testimonials, quick actions, step tabs, pills, form fields, status lists, buttons,
counters, filter tabs)
Role workflow bug fixes (from full role audit):
- cover_letter → cover_note in job applications (field name canonical fix)
- applicant_user_id field name fix in shortlisted candidates
- CompanyApplicationsPage: GET → POST for contact unlock endpoint
- CreditsPage: /payments/history → /payments/invoices; response key data.data
- CreditsPage: holds response key data.data (not data.holds)
- ProfessionalResponsesPage: requirement_id → lead_id, decision_at → resolved_at
- PortfolioPage: data.items → data.data; fix vacuous-truth in form completion check;
saveProfessionalForm: check res.ok before showing success
- CustomerBrowseProfessionalsPage: professional_role_code → profession_key
- MyDashboardPage: professional prefix split('_')[0] not replace('_','')
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-12 13:38:38 +02:00
|
|
|
"solid/prefer-for": "error", // catches .map() in JSX — use <For> instead
|
|
|
|
|
"solid/reactivity": "warn", // catches signals used outside reactive context
|
|
|
|
|
"solid/event-handlers": "warn", // catches non-standard event handler props
|
|
|
|
|
"solid/no-react-specific-props": "error",
|
|
|
|
|
"solid/no-innerhtml": "warn", // prefer children over innerHTML
|
|
|
|
|
"solid/no-destructure": "warn", // catches destructured props/signals
|
|
|
|
|
"solid/self-closing-comp": "warn",
|
2026-04-08 02:43:29 +02:00
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
rules: {
|
|
|
|
|
"@typescript-eslint/explicit-function-return-type": "off",
|
2026-08-12 17:46:03 +02:00
|
|
|
"@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_" }],
|
|
|
|
|
"@typescript-eslint/no-explicit-any": "off",
|
2026-04-08 02:43:29 +02:00
|
|
|
"arrow-body-style": ["warn", "as-needed"],
|
|
|
|
|
curly: ["error", "multi-line"],
|
|
|
|
|
"no-console": "off",
|
|
|
|
|
"no-debugger": "warn",
|
|
|
|
|
"no-unused-vars": "off",
|
|
|
|
|
"prefer-const": "error",
|
|
|
|
|
},
|
|
|
|
|
env: {
|
|
|
|
|
browser: true,
|
|
|
|
|
},
|
|
|
|
|
ignorePatterns: [
|
|
|
|
|
"dist",
|
|
|
|
|
".output",
|
|
|
|
|
"node_modules",
|
|
|
|
|
"coverage",
|
|
|
|
|
"test-results",
|
|
|
|
|
"playwright-report",
|
|
|
|
|
],
|
|
|
|
|
};
|