CodeSampleX

Ejemplo

@typescript-eslint/typescript-estree 8.67.0: createProgram

Muestra verificada para npm @typescript-eslint/typescript-estree 8.67.0: createProgram. El contrato se ejecutó en node 22 · linux alpine/x64 · docker y pasó.

sha256:e416a044ab5bd9c6726831f70265b905d22dc8d4fff5ab04711fa59922988456

Esta red ofrece una sola cosa: una muestra que compila. La ejecutó en un sandbox y guardó el recibo firmado. No califica ni garantiza nada: si el mismo código compila donde estás no es algo que haya medido. Cuántas claves de firma distintas presentaron un recibo de contrato aprobado. Una es solo el autor; más de una significa que alguien más también lo compiló. Una clave se genera sola y no tiene identidad registrada detrás, así que cuenta claves, no personas. MIT-0

Evidencia de ejecución

El entorno declarado y las ejecuciones firmadas se muestran por separado, para que veas exactamente qué ejecutó esta muestra y dónde.

Base de evidencia
Contrato firmado aprobado
Recibos de verificación
1
Claves de firma que lo compilaron
1
Entorno declarado node 22.23 linux 24 · ubuntu · glibc 2.39 x64 node 22.23 javascript npm 10

Entornos de las ejecuciones de verificación

Entorno Contrato Etapas Ejecución
node 22 · linux alpine/x64 · docker ed25519:c1973797be207ac4 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · node-typescript@1node:22-alpine@sha256:c610fcdfb1d5…
2026-08-27

Caso

HOW
Objetivo
verify @typescript-eslint/typescript-estree.createProgram in pkg:npm/%40typescript-eslint/typescript-estree@8.67.0
Paquetes
Símbolos
  • @typescript-eslint/typescript-estree.createProgram
Entorno
node 22.23.2
Creado
2026-08-27T22:54:24Z

Contrato

  1. createProgram creates a TypeScript Program from a tsconfig file and project directory
  2. createProgram provides a TypeChecker to inspect types and symbols
  3. createProgram loads source files specified in tsconfig into the program
  4. createProgram throws an error when tsconfig file does not exist

Archivos

  • PROMPT.md
  • csx.json
  • package-lock.json
  • package.json
  • spec.json
  • src/fixture.ts
  • src/index.js
  • test/contract.cjs
  • tsconfig.json

Descargar el artefacto de código fuente (tar.gz)

Código fuente

PROMPT.md
Clean-room public code sample — generation instructions

Write a brand-new, minimal, self-contained code sample in this clean-room directory.
Do not copy, paraphrase, or reference any existing project source. Work only from this spec.

A csx.json manifest scaffold already exists. Do not recreate it from memory. Preserve its case.goal, packages and symbols; fill its empty case.contract with exact assertions and correct its environment, commands and verifierAdapter for the files you generate.

Goal: verify @typescript-eslint/typescript-estree.createProgram in pkg:npm/%40typescript-eslint/typescript-estree@8.67.0
Kind: HOW

Use EXACTLY these public packages and versions:
  - pkg:npm/%40typescript-eslint/typescript-estree@8.67.0
Demonstrate these symbols/APIs:
  - @typescript-eslint/typescript-estree.createProgram

Rules:
  - One focused purpose; the smallest project that proves the goal.
  - Include a contract test (test/contract.*) that runs OFFLINE and exits 0 exactly when the goal behavior works.
  - Pin every dependency with a lockfile so resolution is reproducible.
  - No secrets, credentials, or tokens. No real URLs (only example.com or localhost). No absolute paths.
  - No personal names, emails, company names, or project identifiers of any kind.
  - No binaries and no generated output (node_modules, dist, target, venv, .git, .env).
  - Keep it under 200 files and 256KB packed.
csx.json
{"case":{"caseId":"case:sha256:479cb5571828103cbc892e9cd4da3c691685f0765e73b664e62892258d8536d7","constraints":{"executionContext":"node"},"contract":["createProgram creates a TypeScript Program from a tsconfig file and project directory","createProgram provides a TypeChecker to inspect types and symbols","createProgram loads source files specified in tsconfig into the program","createProgram throws an error when tsconfig file does not exist"],"goal":"verify @typescript-eslint/typescript-estree.createProgram in pkg:npm/%40typescript-eslint/typescript-estree@8.67.0","kind":"HOW","packages":["pkg:npm/%40typescript-eslint/typescript-estree@8.67.0"],"schemaVersion":1,"symbols":["@typescript-eslint/typescript-estree.createProgram"]},"contractCommand":["node","test/contract.cjs"],"environment":{"arch":"x64","distro":"ubuntu","ecosystem":"npm","executionContext":"node","language":"javascript","libc":"glibc","libcVersion":"2.39","moduleSystem":"cjs","os":"linux","osVersionBucket":"24","packageManager":"npm","packageManagerVersion":"10.9.8","runtime":"node","runtimeVersion":"22.23.2","schemaVersion":1},"license":"MIT-0","packages":["pkg:npm/%40typescript-eslint/typescript-estree@8.67.0"],"schemaVersion":1,"subject":"pkg:npm/%40typescript-eslint/typescript-estree@8.67.0","symbols":["@typescript-eslint/typescript-estree.createProgram"],"verifierAdapter":"node-typescript@1"}
package-lock.json
{
  "name": "verify-typescript-estree-create-program",
  "version": "1.0.0",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "name": "verify-typescript-estree-create-program",
      "version": "1.0.0",
      "dependencies": {
        "@typescript-eslint/typescript-estree": "8.67.0"
      }
    },
    "node_modules/@typescript-eslint/project-service": {
      "version": "8.67.0",
      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz",
      "integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==",
      "license": "MIT",
      "dependencies": {
        "@typescript-eslint/tsconfig-utils": "^8.67.0",
        "@typescript-eslint/types": "^8.67.0",
        "debug": "^4.4.3"
      },
      "engines": {
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/typescript-eslint"
      },
      "peerDependencies": {
        "typescript": ">=4.8.4 <6.1.0"
      }
    },
    "node_modules/@typescript-eslint/tsconfig-utils": {
      "version": "8.67.0",
      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz",
      "integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==",
      "license": "MIT",
      "engines": {
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/typescript-eslint"
      },
      "peerDependencies": {
        "typescript": ">=4.8.4 <6.1.0"
      }
    },
    "node_modules/@typescript-eslint/types": {
      "version": "8.67.0",
      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz",
      "integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==",
      "license": "MIT",
      "engines": {
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/typescript-eslint"
      }
    },
    "node_modules/@typescript-eslint/typescript-estree": {
      "version": "8.67.0",
      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz",
      "integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==",
      "license": "MIT",
      "dependencies": {
        "@typescript-eslint/project-service": "8.67.0",
        "@typescript-eslint/tsconfig-utils": "8.67.0",
        "@typescript-eslint/types": "8.67.0",
        "@typescript-eslint/visitor-keys": "8.67.0",
        "debug": "^4.4.3",
        "minimatch": "^10.2.2",
        "semver": "^7.7.3",
        "tinyglobby": "^0.2.15",
        "ts-api-utils": "^2.5.0"
      },
      "engines": {
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/typescript-eslint"
      },
      "peerDependencies": {
        "typescript": ">=4.8.4 <6.1.0"
      }
    },
    "node_modules/@typescript-eslint/visitor-keys": {
      "version": "8.67.0",
      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz",
      "integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==",
      "license": "MIT",
      "dependencies": {
        "@typescript-eslint/types": "8.67.0",
        "eslint-visitor-keys": "^5.0.0"
      },
      "engines": {
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/typescript-eslint"
      }
    },
    "node_modules/balanced-match": {
      "version": "4.0.4",
      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
      "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
      "license": "MIT",
      "engines": {
        "node": "18 || 20 || >=22"
      }
    },
    "node_modules/brace-expansion": {
      "version": "5.0.9",
      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
      "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
      "license": "MIT",
      "dependencies": {
        "balanced-match": "^4.0.2"
      },
      "engines": {
        "node": "20 || >=22"
      }
    },
    "node_modules/debug": {
      "version": "4.4.3",
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
      "license": "MIT",
      "dependencies": {
        "ms": "^2.1.3"
      },
      "engines": {
        "node": ">=6.0"
      },
      "peerDependenciesMeta": {
        "supports-color": {
          "optional": true
        }
      }
    },
    "node_modules/eslint-visitor-keys": {
      "version": "5.0.1",
      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
      "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
      "license": "Apache-2.0",
      "engines": {
        "node": "^20.19.0 || ^22.13.0 || >=24"
      },
      "funding": {
        "url": "https://opencollective.com/eslint"
      }
    },
    "node_modules/fdir": {
      "version": "6.5.0",
      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
      "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
      "license": "MIT",
      "engines": {
        "node": ">=12.0.0"
      },
      "peerDependencies": {
        "picomatch": "^3 || ^4"
      },
      "peerDependenciesMeta": {
        "picomatch": {
          "optional": true
        }
      }
    },
    "node_modules/minimatch": {
      "version": "10.2.6",
      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
      "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
      "license": "BlueOak-1.0.0",
      "dependencies": {
        "brace-expansion": "^5.0.8"
      },
      "engines": {
        "node": "18 || 20 || >=22"
      },
      "funding": {
        "url": "https://github.com/sponsors/isaacs"
      }
    },
    "node_modules/ms": {
      "version": "2.1.3",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
      "license": "MIT"
    },
    "node_modules/picomatch": {
      "version": "4.0.7",
      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
      "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
      "license": "MIT",
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/jonschlinkert"
      }
    },
    "node_modules/semver": {
      "version": "7.8.5",
      "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
      "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
      "license": "ISC",
      "bin": {
        "semver": "bin/semver.js"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/tinyglobby": {
      "version": "0.2.17",
      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
      "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
      "license": "MIT",
      "dependencies": {
        "fdir": "^6.5.0",
        "picomatch": "^4.0.4"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "funding": {
        "url": "https://github.com/sponsors/SuperchupuDev"
      }
    },
    "node_modules/ts-api-utils": {
      "version": "2.5.0",
      "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
      "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
      "license": "MIT",
      "engines": {
        "node": ">=18.12"
      },
      "peerDependencies": {
        "typescript": ">=4.8.4"
      }
    },
    "node_modules/typescript": {
      "version": "6.0.3",
      "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz",
      "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
      "license": "Apache-2.0",
      "peer": true,
      "bin": {
        "tsc": "bin/tsc",
        "tsserver": "bin/tsserver"
      },
      "engines": {
        "node": ">=14.17"
      }
    }
  }
}
package.json
{
  "name": "verify-typescript-estree-create-program",
  "version": "1.0.0",
  "private": true,
  "description": "verify @typescript-eslint/typescript-estree.createProgram in pkg:npm/@typescript-eslint/typescript-estree@8.67.0",
  "main": "src/index.js",
  "scripts": {
    "test": "node test/contract.cjs"
  },
  "dependencies": {
    "@typescript-eslint/typescript-estree": "8.67.0"
  }
}
spec.json
{
  "schemaVersion": 1,
  "goal": "verify @typescript-eslint/typescript-estree.createProgram in pkg:npm/%40typescript-eslint/typescript-estree@8.67.0",
  "kind": "HOW",
  "packages": [
    "pkg:npm/%40typescript-eslint/typescript-estree@8.67.0"
  ],
  "symbols": [
    "@typescript-eslint/typescript-estree.createProgram"
  ]
}
src/fixture.ts
export function calculateTotal(price: number, quantity: number): number {
  return price * quantity;
}

export interface ProductItem {
  id: string;
  name: string;
  price: number;
}
src/index.js
const { createProgram, clearProgramCache } = require('@typescript-eslint/typescript-estree');

/**
 * Creates a TypeScript Program instance using the given configuration file and project directory.
 *
 * @param {string} configFile - Path to the tsconfig file
 * @param {string} [projectDirectory] - Project directory path (defaults to current working directory)
 * @returns {import('typescript').Program}
 */
function initializeProgram(configFile, projectDirectory) {
  const projectDir = projectDirectory || process.cwd();
  return createProgram(configFile, projectDir);
}

/**
 * Retrieves the TypeChecker for a given tsconfig and project directory.
 *
 * @param {string} configFile - Path to the tsconfig file
 * @param {string} [projectDirectory] - Project directory path
 * @returns {import('typescript').TypeChecker}
 */
function getProgramTypeChecker(configFile, projectDirectory) {
  const program = initializeProgram(configFile, projectDirectory);
  return program.getTypeChecker();
}

/**
 * Clears the internal program cache.
 */
function resetProgramCache() {
  clearProgramCache();
}

module.exports = {
  initializeProgram,
  getProgramTypeChecker,
  resetProgramCache,
};
test/contract.cjs
const assert = require('assert');
const path = require('path');
const { createProgram, clearProgramCache } = require('@typescript-eslint/typescript-estree');
const { initializeProgram, getProgramTypeChecker, resetProgramCache } = require('../src/index.js');

const tsconfigPath = path.resolve(__dirname, '../tsconfig.json');
const projectDir = path.resolve(__dirname, '..');

// 1. createProgram creates a TypeScript Program from a tsconfig file and project directory
const program = createProgram(tsconfigPath, projectDir);
assert(program !== null && typeof program === 'object', 'createProgram should return a program object');
assert(typeof program.getTypeChecker === 'function', 'program should have getTypeChecker method');
assert(typeof program.getSourceFiles === 'function', 'program should have getSourceFiles method');
assert(typeof program.getRootFileNames === 'function', 'program should have getRootFileNames method');

const helperProgram = initializeProgram(tsconfigPath, projectDir);
assert(helperProgram !== null && typeof helperProgram === 'object', 'initializeProgram helper should return program');

// 2. createProgram provides a TypeChecker to inspect types and symbols
const checker = program.getTypeChecker();
assert(checker !== null && typeof checker === 'object', 'getTypeChecker should return a TypeChecker object');
assert(typeof checker.getTypeAtLocation === 'function', 'TypeChecker should have getTypeAtLocation');
assert(typeof checker.getSymbolAtLocation === 'function', 'TypeChecker should have getSymbolAtLocation');

const helperChecker = getProgramTypeChecker(tsconfigPath, projectDir);
assert(helperChecker !== null && typeof helperChecker === 'object', 'getProgramTypeChecker helper should return TypeChecker');

// 3. createProgram loads source files specified in tsconfig into the program
const rootFiles = program.getRootFileNames();
assert(Array.isArray(rootFiles), 'getRootFileNames should return an array');
assert(rootFiles.length > 0, 'getRootFileNames should contain configured source files');

const fixturePath = path.resolve(__dirname, '../src/fixture.ts');
const normalizedFixturePath = fixturePath.replace(/\\/g, '/');
assert(
  rootFiles.some((f) => f.replace(/\\/g, '/') === normalizedFixturePath),
  'rootFiles should contain fixture.ts'
);

const sourceFile = program.getSourceFile(fixturePath);
assert(sourceFile !== undefined, 'getSourceFile should return SourceFile for fixture.ts');
assert.strictEqual(sourceFile.isDeclarationFile, false, 'fixture.ts should not be a declaration file');

// 4. createProgram throws an error when tsconfig file does not exist
assert.throws(
  () => {
    createProgram(path.resolve(__dirname, '../nonexistent-tsconfig.json'), projectDir);
  },
  /Cannot read file|Unable to parse|does not exist/i,
  'createProgram should throw when tsconfig does not exist'
);

// Verify resetProgramCache / clearProgramCache runs without error
resetProgramCache();
clearProgramCache();

console.log('Contract verification passed successfully.');
tsconfig.json
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true
  },
  "include": [
    "src/**/*"
  ]
}

Seeder de origen

anónimo