NodeSecure 숨겨진 기능: mama
Source: Dev.to
Hello 👋
저는 NodeSecure 프로젝트의 잘 알려지지 않은 부분들을 조명하는 짧은 기사 시리즈를 시작합니다. 목표는 새로운 기여자들이 프로젝트를 구동하는 백엔드 구성 요소들을 보다 명확히 이해하도록 돕는 것입니다.
Chapter 1: mama
Mama는 ManifestManager의 약자입니다. 이 패키지는 npm 매니페스트(package.json 파일)를 관리하고 로드하도록 설계되었습니다(간단히 말해).
내부적으로는 @nodesecure/npm-types를 사용해 정확하고 최신의 타입(런타임 관련 필드 포함)을 제공합니다. 해당 패키지는 다른 기사에서 자세히 다룰 예정입니다.
import { ManifestManager } from "@nodesecure/mama";
// asynchronous version
const mama = await ManifestManager.fromPackageJSON(process.cwd());
console.log(mama.document);
이 패키지는 Scanner 모노레포의 백엔드 구성 요소 전반에서 사용되는 다양한 유틸리티를 제공합니다.
Integrity
읽기 전용 getter integrity를 사용하면 해시를 손쉽게 추출할 수 있습니다.
console.log(mama.integrity);
Scanner는 이를 이용해 tarball 안의 package.json이 레지스트리에 업로드된 파일과 일치하는지 확인합니다(일명 manifest confusion).
해시 대상이 되는 속성은 다음과 같습니다:
{
"name",
"version",
"dependencies",
"license": "license ?? \"NONE\"",
"scripts"
}
불일치가 감지되면 도구는 CLI UI에 전역 경고로 표시합니다:

Module type
Antfu가 만든 최신 node-modules-inspector 도구에서 영감을 받아 동일한 모듈 타입 감지를 재구현했습니다:
// "dts" | "faux" | "dual" | "esm" | "cjs"
console.log(mama.moduleType);
Entry files
mama는 Node.js exports 필드(또는 레거시 main 같은 필드)를 사용해 진입 파일을 재귀적으로 추출할 수 있습니다. API는 지연 로딩이며 IterableIterator를 반환합니다:
console.log([...mama.getEntryFiles()]);
이 API는 tarball 패키지에서 JS‑X‑Ray의 EntryFilesAnalyser와 함께 사용됩니다.
async scanFiles(): Promise {
const location = this.manifest.location;
const [composition, spdx] = await Promise.all([
getTarballComposition(location),
conformance.extractLicenses(location)
]);
const code = await new SourceCodeScanner(this.manifest).iterate({
manifest: [...this.manifest.getEntryFiles()]
.flatMap(filterJavaScriptFiles()),
javascript: composition.files
.flatMap(filterJavaScriptFiles())
});
return {
conformance: spdx,
composition,
code
};
}
Author
NPM author 필드(존재하는 경우)를 파싱해 Contact 인터페이스를 반환합니다:
interface Contact {
email?: string;
url?: string;
name: string;
}
예를 들어 John Doe는 다음과 같이 반환됩니다:
{
"name": "John Doe",
"email": "john.doe@gmail.com"
}
Others
이 모듈은 매니페스트를 읽고 관리하는 데 도움이 되는 추가 유틸리티도 제공합니다. 예를 들면:
- 패키지 스펙 파싱(스코프/조직, 패키지 이름, semver 범위 포함)
- 로컬 lockfile 감지
The end
전체 모듈 문서는 여기에서 확인할 수 있습니다.
읽어 주셔서 감사합니다.