CodeSampleX

示例

supports-color 7.2.0: stdout

已验证示例 — npm supports-color 7.2.0: stdout. contract 在 node 22 · linux debian/x64 · docker 上运行并通过: supportsColor exports stdout stream color support property…

sha256:f014fe8969add444cf30dfbcb39f1b78a85375d29aee1a4d3b27342fbcb1c7a9

本网络只提供一件事:能构建的样本。它在沙箱中运行并保留签名回执。它不评级、不担保——同样的代码能否在你的环境构建,它没有测量过。 提交了通过的契约回执的不同签名密钥数量。为 1 表示只有作者;大于 1 表示还有其他人构建过。密钥是自行生成的,背后没有注册身份,因此计的是密钥而非人。 MIT-0

执行证据

声明的环境与签名的运行分开呈现,你可以看到这个样本究竟运行了什么、在哪里运行。

证据依据
签名契约通过
验证回执
1
构建过它的签名密钥
1
声明的环境 node 22.23 linux 24 · ubuntu · glibc 2.39 x64 node 22.23 javascript npm 10

验证运行环境

环境 契约 阶段 运行日期
node 22 · linux debian/x64 · docker ed25519:c1973797be207ac4 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · node-typescript@1node:22@sha256:8a34c4ab3ea2…
2026-09-05

案例

HOW
目标
verify supports-color.stdout in pkg:npm/supports-color@7.2.0
包
符号
  • supports-color.stdout
环境
node 22.23.2
创建时间
2026-09-05T21:18:26Z

契约

  1. supportsColor exports stdout stream color support property and supportsColor function
  2. supportsColor.stdout returns false or color support object with level and flags
  3. supportsColor.stdout respects FORCE_COLOR levels 0 through 3 and boolean values
  4. supportsColor.supportsColor returns false for non-TTY stream when FORCE_COLOR is unset
  5. supportsColor.supportsColor detects truecolor support when COLORTERM is set to truecolor
  6. supportsColor.supportsColor detects 256 color support when TERM is set to xterm-256color
  7. supportsColor.supportsColor suppresses color when TERM is set to dumb
  8. getStdoutColorSupport and hasStdoutColorLevel helper functions correctly evaluate color level

文件

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

下载源代码构件 (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 supports-color.stdout in pkg:npm/supports-color@7.2.0
Kind: HOW

Use EXACTLY these public packages and versions:
  - pkg:npm/supports-color@7.2.0
Demonstrate these symbols/APIs:
  - supports-color.stdout

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:f240a7918a2e749a66d241913851bc6aba99d1bf8e0853e14a17d7e5f76f7cc5","contract":["supportsColor exports stdout stream color support property and supportsColor function","supportsColor.stdout returns false or color support object with level and flags","supportsColor.stdout respects FORCE_COLOR levels 0 through 3 and boolean values","supportsColor.supportsColor returns false for non-TTY stream when FORCE_COLOR is unset","supportsColor.supportsColor detects truecolor support when COLORTERM is set to truecolor","supportsColor.supportsColor detects 256 color support when TERM is set to xterm-256color","supportsColor.supportsColor suppresses color when TERM is set to dumb","getStdoutColorSupport and hasStdoutColorLevel helper functions correctly evaluate color level"],"goal":"verify supports-color.stdout in pkg:npm/supports-color@7.2.0","kind":"HOW","packages":["pkg:npm/supports-color@7.2.0"],"schemaVersion":1,"symbols":["supports-color.stdout"]},"contractCommand":["node","test/contract.js"],"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/supports-color@7.2.0"],"schemaVersion":1,"subject":"pkg:npm/supports-color@7.2.0","symbols":["supports-color.stdout"],"verifierAdapter":"node-typescript@1"}
package-lock.json
{
  "name": "sample-supports-color-stdout",
  "version": "1.0.0",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "name": "sample-supports-color-stdout",
      "version": "1.0.0",
      "license": "MIT-0",
      "dependencies": {
        "supports-color": "7.2.0"
      }
    },
    "node_modules/has-flag": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
      "license": "MIT",
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/supports-color": {
      "version": "7.2.0",
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
      "license": "MIT",
      "dependencies": {
        "has-flag": "^4.0.0"
      },
      "engines": {
        "node": ">=8"
      }
    }
  }
}
package.json
{
  "name": "sample-supports-color-stdout",
  "version": "1.0.0",
  "description": "verify supports-color.stdout in pkg:npm/supports-color@7.2.0",
  "main": "src/index.js",
  "scripts": {
    "test": "node test/contract.js"
  },
  "dependencies": {
    "supports-color": "7.2.0"
  },
  "license": "MIT-0"
}
spec.json
{
  "schemaVersion": 1,
  "goal": "verify supports-color.stdout in pkg:npm/supports-color@7.2.0",
  "kind": "HOW",
  "packages": [
    "pkg:npm/supports-color@7.2.0"
  ],
  "symbols": [
    "supports-color.stdout"
  ]
}
src/index.js
'use strict';

const supportsColor = require('supports-color');

/**
 * Get stdout color support details.
 *
 * @returns {object|boolean} Object with level and color flags, or false if unsupported.
 */
function getStdoutColorSupport() {
  return supportsColor.stdout;
}

/**
 * Check if stdout supports a specific color level.
 *
 * @param {number} minLevel - Minimum color level required (1: basic, 2: 256, 3: 16m).
 * @returns {boolean} True if stdout supports at least the specified color level.
 */
function hasStdoutColorLevel(minLevel) {
  if (!supportsColor.stdout) {
    return false;
  }
  return supportsColor.stdout.level >= minLevel;
}

/**
 * Query color support for a specific stream.
 *
 * @param {object} stream - Stream object with isTTY property.
 * @returns {object|boolean} Object with level and color flags, or false if unsupported.
 */
function getStreamColorSupport(stream) {
  return supportsColor.supportsColor(stream);
}

module.exports = {
  supportsColor,
  getStdoutColorSupport,
  hasStdoutColorLevel,
  getStreamColorSupport
};
test/contract.js
'use strict';

const assert = require('assert');
const supportsColor = require('supports-color');
const {
  getStdoutColorSupport,
  hasStdoutColorLevel,
  getStreamColorSupport
} = require('../src/index');

// Helper to load supports-color with modified process.env
function loadSupportsColorWithEnv(envUpdates) {
  const saved = {};
  for (const k of Object.keys(envUpdates)) {
    saved[k] = process.env[k];
    if (envUpdates[k] === undefined) {
      delete process.env[k];
    } else {
      process.env[k] = envUpdates[k];
    }
  }

  delete require.cache[require.resolve('supports-color')];
  const mod = require('supports-color');

  for (const k of Object.keys(envUpdates)) {
    if (saved[k] === undefined) {
      delete process.env[k];
    } else {
      process.env[k] = saved[k];
    }
  }

  return mod;
}

// 1. supportsColor exports stdout stream color support property and supportsColor function
{
  assert.strictEqual(typeof supportsColor, 'object');
  assert.strictEqual(typeof supportsColor.supportsColor, 'function');
  assert.ok(supportsColor.stdout === false || typeof supportsColor.stdout === 'object');
  assert.strictEqual(getStdoutColorSupport(), supportsColor.stdout);
  assert.strictEqual(typeof hasStdoutColorLevel, 'function');
  assert.strictEqual(typeof getStreamColorSupport, 'function');
}

// 2. supportsColor.stdout returns false or color support object with level and flags
{
  const stdout = supportsColor.stdout;
  if (stdout !== false) {
    assert.strictEqual(typeof stdout.level, 'number');
    assert.strictEqual(typeof stdout.hasBasic, 'boolean');
    assert.strictEqual(typeof stdout.has256, 'boolean');
    assert.strictEqual(typeof stdout.has16m, 'boolean');
    assert.strictEqual(stdout.hasBasic, true);
    assert.strictEqual(stdout.has256, stdout.level >= 2);
    assert.strictEqual(stdout.has16m, stdout.level >= 3);
  }
}

// 3. supportsColor.stdout respects FORCE_COLOR levels 0 through 3 and boolean values
{
  // Level 0 / false
  const sc0 = loadSupportsColorWithEnv({ FORCE_COLOR: '0' });
  assert.strictEqual(sc0.stdout, false);

  const scFalse = loadSupportsColorWithEnv({ FORCE_COLOR: 'false' });
  assert.strictEqual(scFalse.stdout, false);

  // Level 1 / true
  const sc1 = loadSupportsColorWithEnv({ FORCE_COLOR: '1' });
  assert.deepStrictEqual(sc1.stdout, {
    level: 1,
    hasBasic: true,
    has256: false,
    has16m: false
  });

  const scTrue = loadSupportsColorWithEnv({ FORCE_COLOR: 'true' });
  assert.deepStrictEqual(scTrue.stdout, {
    level: 1,
    hasBasic: true,
    has256: false,
    has16m: false
  });

  // Level 2 / 256 colors
  const sc2 = loadSupportsColorWithEnv({ FORCE_COLOR: '2' });
  assert.deepStrictEqual(sc2.stdout, {
    level: 2,
    hasBasic: true,
    has256: true,
    has16m: false
  });

  // Level 3 / 16m colors
  const sc3 = loadSupportsColorWithEnv({ FORCE_COLOR: '3' });
  assert.deepStrictEqual(sc3.stdout, {
    level: 3,
    hasBasic: true,
    has256: true,
    has16m: true
  });
}

// 4. supportsColor.supportsColor returns false for non-TTY stream when FORCE_COLOR is unset
{
  const savedForceColor = process.env.FORCE_COLOR;
  delete process.env.FORCE_COLOR;
  delete require.cache[require.resolve('supports-color')];
  const scFresh = require('supports-color');

  const nonTtyStream = { isTTY: false };
  assert.strictEqual(scFresh.supportsColor(nonTtyStream), false);
  assert.strictEqual(getStreamColorSupport(nonTtyStream), false);

  if (savedForceColor !== undefined) {
    process.env.FORCE_COLOR = savedForceColor;
  }
}

// 5. supportsColor.supportsColor detects truecolor support when COLORTERM is set to truecolor
{
  const savedEnv = {
    FORCE_COLOR: process.env.FORCE_COLOR,
    TERM: process.env.TERM,
    COLORTERM: process.env.COLORTERM,
    CI: process.env.CI
  };

  delete process.env.FORCE_COLOR;
  delete process.env.CI;
  process.env.TERM = 'xterm-256color';
  process.env.COLORTERM = 'truecolor';

  delete require.cache[require.resolve('supports-color')];
  const scTruecolor = require('supports-color');
  const ttyStream = { isTTY: true };

  assert.deepStrictEqual(scTruecolor.supportsColor(ttyStream), {
    level: 3,
    hasBasic: true,
    has256: true,
    has16m: true
  });

  // Restore env
  for (const [k, v] of Object.entries(savedEnv)) {
    if (v === undefined) delete process.env[k];
    else process.env[k] = v;
  }
}

// 6. supportsColor.supportsColor detects 256 color support when TERM is set to xterm-256color
{
  const savedEnv = {
    FORCE_COLOR: process.env.FORCE_COLOR,
    TERM: process.env.TERM,
    COLORTERM: process.env.COLORTERM,
    CI: process.env.CI
  };

  delete process.env.FORCE_COLOR;
  delete process.env.CI;
  delete process.env.COLORTERM;
  process.env.TERM = 'xterm-256color';

  delete require.cache[require.resolve('supports-color')];
  const sc256 = require('supports-color');
  const ttyStream = { isTTY: true };

  assert.deepStrictEqual(sc256.supportsColor(ttyStream), {
    level: 2,
    hasBasic: true,
    has256: true,
    has16m: false
  });

  // Restore env
  for (const [k, v] of Object.entries(savedEnv)) {
    if (v === undefined) delete process.env[k];
    else process.env[k] = v;
  }
}

// 7. supportsColor.supportsColor suppresses color when TERM is set to dumb
{
  const savedEnv = {
    FORCE_COLOR: process.env.FORCE_COLOR,
    TERM: process.env.TERM,
    COLORTERM: process.env.COLORTERM
  };

  delete process.env.FORCE_COLOR;
  delete process.env.COLORTERM;
  process.env.TERM = 'dumb';

  delete require.cache[require.resolve('supports-color')];
  const scDumb = require('supports-color');
  const ttyStream = { isTTY: true };

  assert.strictEqual(scDumb.supportsColor(ttyStream), false);

  // Restore env
  for (const [k, v] of Object.entries(savedEnv)) {
    if (v === undefined) delete process.env[k];
    else process.env[k] = v;
  }
}

// 8. getStdoutColorSupport and hasStdoutColorLevel helper functions correctly evaluate color level
{
  const stdout = supportsColor.stdout;
  if (stdout) {
    assert.strictEqual(hasStdoutColorLevel(1), stdout.level >= 1);
    assert.strictEqual(hasStdoutColorLevel(2), stdout.level >= 2);
    assert.strictEqual(hasStdoutColorLevel(3), stdout.level >= 3);
  } else {
    assert.strictEqual(hasStdoutColorLevel(1), false);
    assert.strictEqual(hasStdoutColorLevel(2), false);
    assert.strictEqual(hasStdoutColorLevel(3), false);
  }
}

console.log('supports-color.stdout contract verification passed.');

原始种子者

匿名