CodeSampleX

Пример

detect-libc 2.1.2: Detect libc family and version using detect-libc v2 async vs sync functions, handling null on non-Linux platforms, and avoiding v1 string property access traps

Проверенный пример — npm detect-libc 2.1.2: Detect libc family and version using detect-libc v2 async vs sync functions, handling null on non-Linux platforms…

sha256:2424a244c14ab1f598d8241df3fe92c8b5160b5093cd701a32276e1e9c7dc91f

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

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

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

Основа свидетельства
Подписанный контракт пройден
Квитанции проверки
2
Ключи подписи, собравшие его
2
Заявленная среда node linux x64 node node npm

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

Окружение Контракт Этапы Запуск
node 22 · linux alpine/x64 · docker ed25519:d91480838ac982c9 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · node-typescript@1
2026-08-16
node 22 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · node-typescript@1
2026-08-18

Кейс

HOW
Цель
Detect libc family and version using detect-libc v2 async vs sync functions, handling null on non-Linux platforms, and avoiding v1 string property access traps
Пакеты
Символы
  • detect-libc.GLIBC
  • detect-libc.MUSL
  • detect-libc.family
  • detect-libc.familySync
  • detect-libc.isNonGlibcLinux
  • detect-libc.isNonGlibcLinuxSync
  • detect-libc.version
  • detect-libc.versionSync
Окружение
node
Создан
2026-08-16T06:22:10Z

Контракт

  1. assert detect-libc exports GLIBC and MUSL as lowercase string constants 'glibc' and 'musl'
  2. assert family, version, and isNonGlibcLinux are AsyncFunctions in v2 returning Promises, while familySync, versionSync, and isNonGlibcLinuxSync provide synchronous detection
  3. assert accessing detectLibc.family as a string property (v1 pattern) fails because typeof family is function, making equality comparisons with GLIBC or MUSL false
  4. assert evaluating detectLibc.isNonGlibcLinux as a boolean property (v1 pattern) is always truthy in JS, causing glibc Linux systems to mistakenly execute non-glibc code paths
  5. assert invoking detectLibc.family() without await returns a Promise instance, evaluating to false when compared against string constants and producing '[object Promise]' in template strings
  6. assert familySync() and versionSync() return null on non-Linux platforms (win32, darwin), rather than empty strings, 'unknown', or throwing, and isNonGlibcLinuxSync() returns false
  7. assert on Linux platforms, familySync() returns 'glibc', 'musl', or null, with isNonGlibcLinuxSync() returning true for musl and false for glibc
  8. assert exact parity between synchronous and asynchronous APIs where familySync() === await family(), versionSync() === await version(), and isNonGlibcLinuxSync() === await isNonGlibcLinux()
  9. assert the legacy v1 property method was removed in v2 and is undefined
  10. assert internal ELF interpreter parsing extracts PT_INTERP program headers from 64-bit ELF binaries to identify ld-musl- as MUSL and ld-linux- as GLIBC

Файлы

  • NOTES.md
  • csx.json
  • package-lock.json
  • package.json
  • src/detect.mjs
  • test/contract.mjs

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

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

csx-seed