in src/node/main.ts [275:319]
function loadNlsBundleOrCreateFromI18n(header: MetadataHeader, bundlePath: string): NlsBundle | undefined {
let result: NlsBundle;
let bundle = path.join(options.cacheRoot, `${header.id}-${header.hash}.json`);
let useMemoryOnly: boolean = false;
let writeBundle: boolean = false;
try {
result = JSON.parse(fs.readFileSync(bundle, { encoding: 'utf8', flag: 'r' }));
touch(bundle);
return result;
} catch (err) {
if (err.code === 'ENOENT') {
writeBundle = true;
} else if (err instanceof SyntaxError) {
// We have a syntax error. So no valid JSON. Use
console.log(`Syntax error parsing message bundle: ${err.message}.`);
fs.unlink(bundle, (err) => {
if (err) {
console.error(`Deleting corrupted bundle ${bundle} failed.`);
}
});
useMemoryOnly = true;
} else {
throw err;
}
}
result = createNLSBundle(header, bundlePath);
if (!result || useMemoryOnly) {
return result;
}
if (writeBundle) {
try {
fs.writeFileSync(bundle, JSON.stringify(result), { encoding: 'utf8', flag: 'wx' });
} catch (err) {
if (err.code === 'EEXIST') {
return result;
}
throw err;
}
}
return result;
}