CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl-labs/typescript-project-structure

TypeScript project structure, strict tsconfig, module resolution, path aliases, shared types, and monorepo patterns

90

1.09x
Quality

84%

Does it follow best practices?

Impact

100%

1.09x

Average score across 5 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-2/

{
  "context": "Tests whether the agent sets up a TypeScript Express API project with strict tsconfig, proper module resolution, path aliases, src/ directory separation, essential scripts, and correct TypeScript patterns.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "strict: true in tsconfig",
      "description": "tsconfig.json has \"strict\": true in compilerOptions — not individual strict flags cherry-picked, and not strict: false or missing",
      "max_score": 12
    },
    {
      "name": "noUncheckedIndexedAccess enabled",
      "description": "tsconfig.json has \"noUncheckedIndexedAccess\": true in compilerOptions",
      "max_score": 10
    },
    {
      "name": "Correct module resolution for Node.js",
      "description": "tsconfig.json uses moduleResolution: \"NodeNext\" (or \"Node16\") paired with module: \"NodeNext\" (or \"Node16\"), OR uses a compatible bundler-based setup. Not using legacy \"node\" resolution or mismatched module/moduleResolution.",
      "max_score": 10
    },
    {
      "name": "Path alias configured",
      "description": "tsconfig.json has a paths configuration with an alias (e.g., @/* mapping to ./src/*) and baseUrl set",
      "max_score": 8
    },
    {
      "name": "Source code in src/ directory",
      "description": "All application source code (routes, services, types, lib) lives inside a src/ directory, not at the project root alongside config files",
      "max_score": 10
    },
    {
      "name": "dist/ and node_modules/ in .gitignore",
      "description": ".gitignore exists and includes both dist/ (or build/) and node_modules/",
      "max_score": 8
    },
    {
      "name": "Essential package.json scripts",
      "description": "package.json has scripts for: build (tsc), dev (tsx watch or similar), start (node dist/), and typecheck (tsc --noEmit). All four must be present.",
      "max_score": 10
    },
    {
      "name": "Type-only imports used",
      "description": "When importing types/interfaces that are only used as type annotations, import type syntax is used (at least in some imports)",
      "max_score": 8
    },
    {
      "name": "Types defined in dedicated types directory",
      "description": "Shared type definitions (Task, User, API types) are in a dedicated types/ directory or file, not scattered across service/route files",
      "max_score": 8
    },
    {
      "name": "ESLint with typescript-eslint configured",
      "description": "An ESLint config file exists that uses typescript-eslint (either flat config or legacy config format)",
      "max_score": 8
    },
    {
      "name": "package.json type: module",
      "description": "If using NodeNext module resolution, package.json has \"type\": \"module\". If using CommonJS, this is not required but the module/moduleResolution must be consistent.",
      "max_score": 8
    }
  ]
}

evals

tile.json