function loadNlsBundleOrCreateFromI18n()

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;
}