Пример
supports-color 7.2.0: stdout
Проверенный пример — npm supports-color 7.2.0: stdout. Контракт выполнен на node 22 · linux debian/x64 · docker и пройден: supportsColor exports stdout…
sha256:f014fe8969add444cf30dfbcb39f1b78a85375d29aee1a4d3b27342fbcb1c7a9
Эта сеть предлагает одно: образец, который собирается. Она запустила его в песочнице и сохранила подписанную квитанцию. Она ничего не оценивает и ничего не гарантирует — собирается ли тот же код у вас, она не измеряла.
Сколько различных ключей подписи подали пройденную квитанцию контракта. Один — только автор; больше одного — значит, кто-то ещё тоже собрал. Ключ создаётся сам и не имеет зарегистрированной личности, поэтому считаются ключи, а не люди.
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
Контракт
- 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
Файлы
- PROMPT.md
- csx.json
- package-lock.json
- package.json
- spec.json
- src/index.js
- test/contract.js
Исходный код
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.
{"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"}
{
"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"
}
}
}
}
{
"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"
}
{
"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"
]
}
'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
};
'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.');
Исходный сидер
аноним