CodeSampleX

Пример

typescript 7.0.2: createBlock

Проверенный пример — npm typescript 7.0.2: createBlock. Контракт выполнен на node 22 · linux alpine/x64 · docker и пройден: buildBlock constructs a Block AST…

sha256:a1e9c5d9853b308e29f948388d9401d35b2a8a594e67179021825d6301ac6aa8

Эта сеть предлагает одно: образец, который собирается. Она запустила его в песочнице и сохранила подписанную квитанцию. Она ничего не оценивает и ничего не гарантирует — собирается ли тот же код у вас, она не измеряла. Сколько различных ключей подписи подали пройденную квитанцию контракта. Один — только автор; больше одного — значит, кто-то ещё тоже собрал. Ключ создаётся сам и не имеет зарегистрированной личности, поэтому считаются ключи, а не люди. MIT-0

Свидетельства выполнения

Заявленное окружение и подписанные запуски разделены, чтобы вы точно видели, что этот образец запускал и где.

Основа свидетельства
Подписанный контракт пройден
Квитанции проверки
1
Ключи подписи, собравшие его
1
Заявленная среда linux 24 · ubuntu · glibc 2.39 x64 npm

Среды запусков проверки

Окружение Контракт Этапы Запуск
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-28

Кейс

HOW
Цель
verify typescript.createBlock in pkg:npm/typescript@7.0.2
Пакеты
Символы
  • typescript.createBlock
Создан
2026-08-28T07:06:15Z

Контракт

  1. buildBlock constructs a Block AST node from an array of statements and validates it with isBlock
  2. buildEmptyBlock constructs an empty Block statement with no child statements
  3. buildNestedBlock constructs a Block statement containing inner nested blocks
  4. inspectBlock extracts Block AST metadata including statementCount and validates type guards

Файлы

  • PROMPT.md
  • csx.json
  • package-lock.json
  • package.json
  • spec.json
  • src/index.mjs
  • test/contract.mjs

Скачать артефакт с исходным кодом (tar.gz)

Исходный код

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.createBlock in pkg:npm/typescript@7.0.2
Kind: HOW

Use EXACTLY these public packages and versions:
  - pkg:npm/typescript@7.0.2
Demonstrate these symbols/APIs:
  - typescript.createBlock

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:c463102fd7d8ca2e6f4753a13d10eceed1b5ec731df9301874bb16699b59e7b2","contract":["buildBlock constructs a Block AST node from an array of statements and validates it with isBlock","buildEmptyBlock constructs an empty Block statement with no child statements","buildNestedBlock constructs a Block statement containing inner nested blocks","inspectBlock extracts Block AST metadata including statementCount and validates type guards"],"goal":"verify typescript.createBlock in pkg:npm/typescript@7.0.2","kind":"HOW","packages":["pkg:npm/typescript@7.0.2"],"schemaVersion":1,"symbols":["typescript.createBlock"]},"contractCommand":["node","test/contract.mjs"],"environment":{"arch":"x64","distro":"ubuntu","ecosystem":"npm","libc":"glibc","libcVersion":"2.39","os":"linux","osVersionBucket":"24","packageManager":"npm","schemaVersion":1},"license":"MIT-0","packages":["pkg:npm/typescript@7.0.2"],"schemaVersion":1,"subject":"pkg:npm/typescript@7.0.2","symbols":["typescript.createBlock"],"verifierAdapter":"node-typescript@1"}
package-lock.json
{
  "name": "typescript-create-block-sample",
  "version": "1.0.0",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "name": "typescript-create-block-sample",
      "version": "1.0.0",
      "license": "MIT-0",
      "dependencies": {
        "typescript": "7.0.2"
      }
    },
    "node_modules/@typescript/typescript-aix-ppc64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz",
      "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==",
      "cpu": [
        "ppc64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "aix"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-darwin-arm64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz",
      "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==",
      "cpu": [
        "arm64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-darwin-x64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz",
      "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==",
      "cpu": [
        "x64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-freebsd-arm64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz",
      "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==",
      "cpu": [
        "arm64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-freebsd-x64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz",
      "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==",
      "cpu": [
        "x64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-linux-arm": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz",
      "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==",
      "cpu": [
        "arm"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-linux-arm64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz",
      "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==",
      "cpu": [
        "arm64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-linux-loong64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz",
      "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==",
      "cpu": [
        "loong64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-linux-mips64el": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz",
      "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==",
      "cpu": [
        "mips64el"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-linux-ppc64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz",
      "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==",
      "cpu": [
        "ppc64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-linux-riscv64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz",
      "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==",
      "cpu": [
        "riscv64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-linux-s390x": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz",
      "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==",
      "cpu": [
        "s390x"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-linux-x64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz",
      "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==",
      "cpu": [
        "x64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-netbsd-arm64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz",
      "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==",
      "cpu": [
        "arm64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "netbsd"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-netbsd-x64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz",
      "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==",
      "cpu": [
        "x64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "netbsd"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-openbsd-arm64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz",
      "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==",
      "cpu": [
        "arm64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "openbsd"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-openbsd-x64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz",
      "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==",
      "cpu": [
        "x64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "openbsd"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-sunos-x64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz",
      "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==",
      "cpu": [
        "x64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "sunos"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-win32-arm64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz",
      "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==",
      "cpu": [
        "arm64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/@typescript/typescript-win32-x64": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz",
      "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==",
      "cpu": [
        "x64"
      ],
      "license": "Apache-2.0",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=16.20.0"
      }
    },
    "node_modules/typescript": {
      "version": "7.0.2",
      "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz",
      "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==",
      "license": "Apache-2.0",
      "bin": {
        "tsc": "bin/tsc"
      },
      "engines": {
        "node": ">=16.20.0"
      },
      "optionalDependencies": {
        "@typescript/typescript-aix-ppc64": "7.0.2",
        "@typescript/typescript-darwin-arm64": "7.0.2",
        "@typescript/typescript-darwin-x64": "7.0.2",
        "@typescript/typescript-freebsd-arm64": "7.0.2",
        "@typescript/typescript-freebsd-x64": "7.0.2",
        "@typescript/typescript-linux-arm": "7.0.2",
        "@typescript/typescript-linux-arm64": "7.0.2",
        "@typescript/typescript-linux-loong64": "7.0.2",
        "@typescript/typescript-linux-mips64el": "7.0.2",
        "@typescript/typescript-linux-ppc64": "7.0.2",
        "@typescript/typescript-linux-riscv64": "7.0.2",
        "@typescript/typescript-linux-s390x": "7.0.2",
        "@typescript/typescript-linux-x64": "7.0.2",
        "@typescript/typescript-netbsd-arm64": "7.0.2",
        "@typescript/typescript-netbsd-x64": "7.0.2",
        "@typescript/typescript-openbsd-arm64": "7.0.2",
        "@typescript/typescript-openbsd-x64": "7.0.2",
        "@typescript/typescript-sunos-x64": "7.0.2",
        "@typescript/typescript-win32-arm64": "7.0.2",
        "@typescript/typescript-win32-x64": "7.0.2"
      }
    }
  }
}
package.json
{
  "name": "typescript-create-block-sample",
  "version": "1.0.0",
  "description": "Construct and validate TypeScript block statements using typescript.createBlock",
  "type": "module",
  "main": "src/index.mjs",
  "scripts": {
    "test": "node test/contract.mjs"
  },
  "dependencies": {
    "typescript": "7.0.2"
  },
  "license": "MIT-0"
}
spec.json
{
  "schemaVersion": 1,
  "goal": "verify typescript.createBlock in pkg:npm/typescript@7.0.2",
  "kind": "HOW",
  "packages": [
    "pkg:npm/typescript@7.0.2"
  ],
  "symbols": [
    "typescript.createBlock"
  ]
}
src/index.mjs
import {
  createBlock,
  createReturnStatement,
  createNumericLiteral,
  createStringLiteral,
  createIdentifier,
  createVariableStatement,
  createVariableDeclarationList,
  createVariableDeclaration,
} from 'typescript/unstable/ast/factory';

import {
  isBlock,
  isReturnStatement,
  isVariableStatement,
  isIdentifier,
} from 'typescript/unstable/ast/is';

import {
  SyntaxKind,
  formatSyntaxKind,
  NodeFlags,
} from 'typescript/unstable/ast';

/**
 * Constructs a Block AST node from an array of statements.
 *
 * @param {object[]} [statements=[]] - Array of statement AST nodes.
 * @param {boolean} [multiLine=true] - Whether the block spans multiple lines.
 * @returns {object} Block AST node.
 */
export function buildBlock(statements = [], multiLine = true) {
  if (!Array.isArray(statements)) {
    throw new TypeError('Expected statements to be an array');
  }
  return createBlock(statements, multiLine);
}

/**
 * Constructs an empty Block AST node with no inner statements.
 *
 * @param {boolean} [multiLine=false] - Whether the block spans multiple lines.
 * @returns {object} Empty Block AST node.
 */
export function buildEmptyBlock(multiLine = false) {
  return createBlock([], multiLine);
}

/**
 * Constructs a nested Block AST node containing an inner block statement.
 *
 * @param {object[]} innerStatements - Statements to place inside the inner block.
 * @param {object[]} [outerStatements=[]] - Additional statements in the outer block.
 * @param {boolean} [multiLine=true] - Whether blocks span multiple lines.
 * @returns {object} Outer Block AST node containing the inner block.
 */
export function buildNestedBlock(innerStatements = [], outerStatements = [], multiLine = true) {
  const innerBlock = createBlock(innerStatements, multiLine);
  const combinedStatements = [innerBlock, ...outerStatements];
  return createBlock(combinedStatements, multiLine);
}

/**
 * Inspects a Block AST node and extracts structural metadata.
 *
 * @param {object} node - AST node to inspect.
 * @returns {{
 *   kind: number,
 *   kindName: string,
 *   isBlock: boolean,
 *   statementCount: number,
 *   statements: object[],
 *   multiLine: boolean
 * }}
 */
export function inspectBlock(node) {
  if (!node || typeof node !== 'object' || !isBlock(node)) {
    throw new TypeError('Expected a Block AST node');
  }

  return {
    kind: node.kind,
    kindName: formatSyntaxKind(node.kind),
    isBlock: isBlock(node),
    statementCount: Array.isArray(node.statements) ? node.statements.length : 0,
    statements: node.statements || [],
    multiLine: Boolean(node.multiLine),
  };
}

export {
  createBlock,
  createReturnStatement,
  createNumericLiteral,
  createStringLiteral,
  createIdentifier,
  createVariableStatement,
  createVariableDeclarationList,
  createVariableDeclaration,
  isBlock,
  isReturnStatement,
  isVariableStatement,
  isIdentifier,
  SyntaxKind,
  formatSyntaxKind,
  NodeFlags,
};
test/contract.mjs
import assert from 'node:assert/strict';
import {
  buildBlock,
  buildEmptyBlock,
  buildNestedBlock,
  inspectBlock,
  createBlock,
  createReturnStatement,
  createNumericLiteral,
  createStringLiteral,
  createIdentifier,
  createVariableStatement,
  createVariableDeclarationList,
  createVariableDeclaration,
  isBlock,
  isReturnStatement,
  isVariableStatement,
  isIdentifier,
  SyntaxKind,
  formatSyntaxKind,
  NodeFlags,
} from '../src/index.mjs';

// Contract 1: buildBlock constructs a Block AST node from an array of statements and validates it with isBlock
{
  const returnStmt = createReturnStatement(createNumericLiteral('42'));
  const varDecl = createVariableDeclaration(
    createIdentifier('message'),
    undefined,
    undefined,
    createStringLiteral('"hello"')
  );
  const varDeclList = createVariableDeclarationList([varDecl], NodeFlags.Const);
  const varStmt = createVariableStatement(undefined, varDeclList);

  const blockNode = buildBlock([varStmt, returnStmt], true);

  assert.ok(blockNode, 'Block node should be created');
  assert.strictEqual(isBlock(blockNode), true, 'Node should satisfy isBlock type guard');
  assert.strictEqual(formatSyntaxKind(blockNode.kind), 'Block', 'Kind name should be Block');
  assert.strictEqual(blockNode.statements.length, 2, 'Block should contain 2 statements');
  assert.strictEqual(isVariableStatement(blockNode.statements[0]), true, 'First statement should be variable statement');
  assert.strictEqual(isReturnStatement(blockNode.statements[1]), true, 'Second statement should be return statement');
}

// Contract 2: buildEmptyBlock constructs an empty Block statement with no child statements
{
  const emptyBlock = buildEmptyBlock(false);

  assert.ok(emptyBlock, 'Empty block node should be created');
  assert.strictEqual(isBlock(emptyBlock), true, 'Empty block should satisfy isBlock');
  assert.strictEqual(formatSyntaxKind(emptyBlock.kind), 'Block', 'Kind name should be Block');
  assert.strictEqual(emptyBlock.statements.length, 0, 'Empty block should contain 0 statements');
  assert.strictEqual(emptyBlock.multiLine, false, 'multiLine should be false');
}

// Contract 3: buildNestedBlock constructs a Block statement containing inner nested blocks
{
  const innerReturn = createReturnStatement(createStringLiteral('"inner result"'));
  const outerReturn = createReturnStatement(createStringLiteral('"outer result"'));

  const nestedBlock = buildNestedBlock([innerReturn], [outerReturn], true);

  assert.ok(nestedBlock, 'Nested block node should be created');
  assert.strictEqual(isBlock(nestedBlock), true, 'Outer node should be Block');
  assert.strictEqual(nestedBlock.statements.length, 2, 'Outer block should contain 2 statements');

  const firstStmt = nestedBlock.statements[0];
  assert.strictEqual(isBlock(firstStmt), true, 'First statement of outer block should be a nested Block');
  assert.strictEqual(firstStmt.statements.length, 1, 'Inner block should contain 1 statement');
  assert.strictEqual(isReturnStatement(firstStmt.statements[0]), true, 'Inner statement should be ReturnStatement');

  const secondStmt = nestedBlock.statements[1];
  assert.strictEqual(isReturnStatement(secondStmt), true, 'Second statement should be ReturnStatement');
}

// Contract 4: inspectBlock extracts Block AST metadata including statementCount and validates type guards
{
  const returnStmt = createReturnStatement(createNumericLiteral('100'));
  const block = buildBlock([returnStmt], true);
  const info = inspectBlock(block);

  assert.strictEqual(info.isBlock, true, 'isBlock should be true');
  assert.strictEqual(info.kindName, 'Block', 'kindName should be Block');
  assert.strictEqual(info.statementCount, 1, 'statementCount should be 1');
  assert.strictEqual(info.multiLine, true, 'multiLine should be true');
  assert.strictEqual(Array.isArray(info.statements), true, 'statements should be an array');

  const emptyInfo = inspectBlock(buildEmptyBlock(false));
  assert.strictEqual(emptyInfo.statementCount, 0, 'empty block statementCount should be 0');
  assert.strictEqual(emptyInfo.multiLine, false, 'empty block multiLine should be false');

  assert.throws(
    () => inspectBlock(null),
    { name: 'TypeError' },
    'inspectBlock should throw TypeError for null input'
  );
  assert.throws(
    () => inspectBlock({ kind: 999 }),
    { name: 'TypeError' },
    'inspectBlock should throw TypeError for non-Block node'
  );
  assert.throws(
    () => buildBlock('invalid'),
    { name: 'TypeError' },
    'buildBlock should throw TypeError if statements is not an array'
  );
}

console.log('All pkg:npm/typescript@7.0.2 contracts passed successfully.');

Исходный сидер

аноним