in packages/jest-haste-map/src/worker.ts [31:107]
export async function worker(data: WorkerMessage): Promise<WorkerMetadata> {
if (
data.hasteImplModulePath &&
data.hasteImplModulePath !== hasteImplModulePath
) {
if (hasteImpl) {
throw new Error('jest-haste-map: hasteImplModulePath changed');
}
hasteImplModulePath = data.hasteImplModulePath;
hasteImpl = require(hasteImplModulePath);
}
let content: string | undefined;
let dependencies: WorkerMetadata['dependencies'];
let id: WorkerMetadata['id'];
let module: WorkerMetadata['module'];
let sha1: WorkerMetadata['sha1'];
const {computeDependencies, computeSha1, rootDir, filePath} = data;
const getContent = (): string => {
if (content === undefined) {
content = fs.readFileSync(filePath, 'utf8');
}
return content;
};
if (filePath.endsWith(PACKAGE_JSON)) {
// Process a package.json that is returned as a PACKAGE type with its name.
try {
const fileData = JSON.parse(getContent());
if (fileData.name) {
const relativeFilePath = path.relative(rootDir, filePath);
id = fileData.name;
module = [relativeFilePath, H.PACKAGE];
}
} catch (err: any) {
throw new Error(`Cannot parse ${filePath} as JSON: ${err.message}`);
}
} else if (!blacklist.has(filePath.substring(filePath.lastIndexOf('.')))) {
// Process a random file that is returned as a MODULE.
if (hasteImpl) {
id = hasteImpl.getHasteName(filePath);
}
if (computeDependencies) {
const content = getContent();
const extractor = data.dependencyExtractor
? await requireOrImportModule<DependencyExtractor>(
data.dependencyExtractor,
false,
)
: defaultDependencyExtractor;
dependencies = Array.from(
extractor.extract(
content,
filePath,
defaultDependencyExtractor.extract,
),
);
}
if (id) {
const relativeFilePath = path.relative(rootDir, filePath);
module = [relativeFilePath, H.MODULE];
}
}
// If a SHA-1 is requested on update, compute it.
if (computeSha1) {
sha1 = sha1hex(getContent() || fs.readFileSync(filePath));
}
return {dependencies, id, module, sha1};
}