-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-var path = __webpack_require__(3);\r
-var fs = __webpack_require__(80);\r
-var toString = Object.prototype.toString;\r
-function isDefined(value) {\r
- return typeof value !== 'undefined';\r
-}\r
-function isNumber(value) {\r
- return toString.call(value) === '[object Number]';\r
-}\r
-function isString(value) {\r
- return toString.call(value) === '[object String]';\r
-}\r
-function isBoolean(value) {\r
- return value === true || value === false;\r
-}\r
-function readJsonFileSync(filename) {\r
- return JSON.parse(fs.readFileSync(filename, 'utf8'));\r
-}\r
-var MessageFormat;\r
-(function (MessageFormat) {\r
- MessageFormat["file"] = "file";\r
- MessageFormat["bundle"] = "bundle";\r
- MessageFormat["both"] = "both";\r
-})(MessageFormat = exports.MessageFormat || (exports.MessageFormat = {}));\r
-var BundleFormat;\r
-(function (BundleFormat) {\r
- // the nls.bundle format\r
- BundleFormat["standalone"] = "standalone";\r
- BundleFormat["languagePack"] = "languagePack";\r
-})(BundleFormat = exports.BundleFormat || (exports.BundleFormat = {}));\r
-var LocalizeInfo;\r
-(function (LocalizeInfo) {\r
- function is(value) {\r
- var candidate = value;\r
- return candidate && isDefined(candidate.key) && isDefined(candidate.comment);\r
- }\r
- LocalizeInfo.is = is;\r
-})(LocalizeInfo || (LocalizeInfo = {}));\r
-var resolvedLanguage;\r
-var resolvedBundles;\r
-var options;\r
-var isPseudo;\r
-function initializeSettings() {\r
- options = { locale: undefined, language: undefined, languagePackSupport: false, cacheLanguageResolution: true, messageFormat: MessageFormat.bundle };\r
- if (isString(process.env.VSCODE_NLS_CONFIG)) {\r
- try {\r
- var vscodeOptions_1 = JSON.parse(process.env.VSCODE_NLS_CONFIG);\r
- var language = void 0;\r
- var locale = void 0;\r
- if (vscodeOptions_1.availableLanguages) {\r
- var value = vscodeOptions_1.availableLanguages['*'];\r
- if (isString(value)) {\r
- language = value;\r
- }\r
- }\r
- if (isString(vscodeOptions_1.locale)) {\r
- options.locale = vscodeOptions_1.locale.toLowerCase();\r
- }\r
- if (language === undefined) {\r
- options.language = options.locale;\r
- }\r
- else if (language !== 'en') {\r
- options.language = language;\r
- }\r
- if (isBoolean(vscodeOptions_1._languagePackSupport)) {\r
- options.languagePackSupport = vscodeOptions_1._languagePackSupport;\r
- }\r
- if (isString(vscodeOptions_1._cacheRoot)) {\r
- options.cacheRoot = vscodeOptions_1._cacheRoot;\r
- }\r
- if (isString(vscodeOptions_1._languagePackId)) {\r
- options.languagePackId = vscodeOptions_1._languagePackId;\r
- }\r
- if (isString(vscodeOptions_1._translationsConfigFile)) {\r
- options.translationsConfigFile = vscodeOptions_1._translationsConfigFile;\r
- try {\r
- options.translationsConfig = readJsonFileSync(options.translationsConfigFile);\r
- }\r
- catch (error) {\r
- // We can't read the translation config file. Mark the cache as corrupted.\r
- if (vscodeOptions_1._corruptedFile) {\r
- var dirname = path.dirname(vscodeOptions_1._corruptedFile);\r
- fs.exists(dirname, function (exists) {\r
- if (exists) {\r
- fs.writeFile(vscodeOptions_1._corruptedFile, 'corrupted', 'utf8', function (err) {\r
- console.error(err);\r
- });\r
- }\r
- });\r
- }\r
- }\r
- }\r
- }\r
- catch (_a) {\r
- // Do nothing.\r
- }\r
- }\r
- isPseudo = options.locale === 'pseudo';\r
- resolvedLanguage = undefined;\r
- resolvedBundles = Object.create(null);\r
-}\r
-initializeSettings();\r
-function supportsLanguagePack() {\r
- return options.languagePackSupport === true && options.cacheRoot !== undefined && options.languagePackId !== undefined && options.translationsConfigFile !== undefined\r
- && options.translationsConfig !== undefined;\r
-}\r
-function format(message, args) {\r
- var result;\r
- if (isPseudo) {\r
- // FF3B and FF3D is the Unicode zenkaku representation for [ and ]\r
- message = '\uFF3B' + message.replace(/[aouei]/g, '$&$&') + '\uFF3D';\r
- }\r
- if (args.length === 0) {\r
- result = message;\r
- }\r
- else {\r
- result = message.replace(/\{(\d+)\}/g, function (match, rest) {\r
- var index = rest[0];\r
- var arg = args[index];\r
- var replacement = match;\r
- if (typeof arg === 'string') {\r
- replacement = arg;\r
- }\r
- else if (typeof arg === 'number' || typeof arg === 'boolean' || arg === void 0 || arg === null) {\r
- replacement = String(arg);\r
- }\r
- return replacement;\r
- });\r
- }\r
- return result;\r
-}\r
-function createScopedLocalizeFunction(messages) {\r
- return function (key, message) {\r
- var args = [];\r
- for (var _i = 2; _i < arguments.length; _i++) {\r
- args[_i - 2] = arguments[_i];\r
- }\r
- if (isNumber(key)) {\r
- if (key >= messages.length) {\r
- console.error("Broken localize call found. Index out of bounds. Stacktrace is\n: " + new Error('').stack);\r
- return;\r
- }\r
- return format(messages[key], args);\r
- }\r
- else {\r
- if (isString(message)) {\r
- console.warn("Message " + message + " didn't get externalized correctly.");\r
- return format(message, args);\r
- }\r
- else {\r
- console.error("Broken localize call found. Stacktrace is\n: " + new Error('').stack);\r
- }\r
- }\r
- };\r
-}\r
-function localize(key, message) {\r
- var args = [];\r
- for (var _i = 2; _i < arguments.length; _i++) {\r
- args[_i - 2] = arguments[_i];\r
- }\r
- return format(message, args);\r
-}\r
-function resolveLanguage(file) {\r
- var resolvedLanguage;\r
- if (options.cacheLanguageResolution && resolvedLanguage) {\r
- resolvedLanguage = resolvedLanguage;\r
- }\r
- else {\r
- if (isPseudo || !options.language) {\r
- resolvedLanguage = '.nls.json';\r
- }\r
- else {\r
- var locale = options.language;\r
- while (locale) {\r
- var candidate = '.nls.' + locale + '.json';\r
- if (fs.existsSync(file + candidate)) {\r
- resolvedLanguage = candidate;\r
- break;\r
- }\r
- else {\r
- var index = locale.lastIndexOf('-');\r
- if (index > 0) {\r
- locale = locale.substring(0, index);\r
- }\r
- else {\r
- resolvedLanguage = '.nls.json';\r
- locale = null;\r
- }\r
- }\r
- }\r
- }\r
- if (options.cacheLanguageResolution) {\r
- resolvedLanguage = resolvedLanguage;\r
- }\r
- }\r
- return file + resolvedLanguage;\r
-}\r
-function findInTheBoxBundle(root) {\r
- var language = options.language;\r
- while (language) {\r
- var candidate = path.join(root, "nls.bundle." + language + ".json");\r
- if (fs.existsSync(candidate)) {\r
- return candidate;\r
- }\r
- else {\r
- var index = language.lastIndexOf('-');\r
- if (index > 0) {\r
- language = language.substring(0, index);\r
- }\r
- else {\r
- language = undefined;\r
- }\r
- }\r
- }\r
- // Test if we can reslove the default bundle.\r
- if (language === undefined) {\r
- var candidate = path.join(root, 'nls.bundle.json');\r
- if (fs.existsSync(candidate)) {\r
- return candidate;\r
- }\r
- }\r
- return undefined;\r
-}\r
-function mkdir(directory) {\r
- try {\r
- fs.mkdirSync(directory);\r
- }\r
- catch (err) {\r
- if (err.code === 'EEXIST') {\r
- return;\r
- }\r
- else if (err.code === 'ENOENT') {\r
- var parent = path.dirname(directory);\r
- if (parent !== directory) {\r
- mkdir(parent);\r
- fs.mkdirSync(directory);\r
- }\r
- }\r
- else {\r
- throw err;\r
- }\r
- }\r
-}\r
-function createDefaultNlsBundle(folder) {\r
- var metaData = readJsonFileSync(path.join(folder, 'nls.metadata.json'));\r
- var result = Object.create(null);\r
- for (var module_1 in metaData) {\r
- var entry = metaData[module_1];\r
- result[module_1] = entry.messages;\r
- }\r
- return result;\r
-}\r
-function createNLSBundle(header, metaDataPath) {\r
- var languagePackLocation = options.translationsConfig[header.id];\r
- if (!languagePackLocation) {\r
- return undefined;\r
- }\r
- var languagePack = readJsonFileSync(languagePackLocation).contents;\r
- var metaData = readJsonFileSync(path.join(metaDataPath, 'nls.metadata.json'));\r
- var result = Object.create(null);\r
- for (var module_2 in metaData) {\r
- var entry = metaData[module_2];\r
- var translations = languagePack[header.outDir + "/" + module_2];\r
- if (translations) {\r
- var resultMessages = [];\r
- for (var i = 0; i < entry.keys.length; i++) {\r
- var messageKey = entry.keys[i];\r
- var key = isString(messageKey) ? messageKey : messageKey.key;\r
- var translatedMessage = translations[key];\r
- if (translatedMessage === undefined) {\r
- translatedMessage = entry.messages[i];\r
- }\r
- resultMessages.push(translatedMessage);\r
- }\r
- result[module_2] = resultMessages;\r
- }\r
- else {\r
- result[module_2] = entry.messages;\r
- }\r
- }\r
- return result;\r
-}\r
-function touch(file) {\r
- var d = new Date();\r
- fs.utimes(file, d, d, function () {\r
- // Do nothing. Ignore\r
- });\r
-}\r
-function cacheBundle(key, bundle) {\r
- resolvedBundles[key] = bundle;\r
- return bundle;\r
-}\r
-function loadNlsBundleOrCreateFromI18n(header, bundlePath) {\r
- var result;\r
- var bundle = path.join(options.cacheRoot, header.id + "-" + header.hash + ".json");\r
- var useMemoryOnly = false;\r
- var writeBundle = false;\r
- try {\r
- result = JSON.parse(fs.readFileSync(bundle, { encoding: 'utf8', flag: 'r' }));\r
- touch(bundle);\r
- return result;\r
- }\r
- catch (err) {\r
- if (err.code === 'ENOENT') {\r
- writeBundle = true;\r
- }\r
- else if (err instanceof SyntaxError) {\r
- // We have a syntax error. So no valid JSON. Use\r
- console.log("Syntax error parsing message bundle: " + err.message + ".");\r
- fs.unlink(bundle, function (err) {\r
- if (err) {\r
- console.error("Deleting corrupted bundle " + bundle + " failed.");\r
- }\r
- });\r
- useMemoryOnly = true;\r
- }\r
- else {\r
- throw err;\r
- }\r
- }\r
- result = createNLSBundle(header, bundlePath);\r
- if (!result || useMemoryOnly) {\r
- return result;\r
- }\r
- if (writeBundle) {\r
- try {\r
- fs.writeFileSync(bundle, JSON.stringify(result), { encoding: 'utf8', flag: 'wx' });\r
- }\r
- catch (err) {\r
- if (err.code === 'EEXIST') {\r
- return result;\r
- }\r
- throw err;\r
- }\r
- }\r
- return result;\r
-}\r
-function loadDefaultNlsBundle(bundlePath) {\r
- try {\r
- return createDefaultNlsBundle(bundlePath);\r
- }\r
- catch (err) {\r
- console.log("Generating default bundle from meta data failed.", err);\r
- return undefined;\r
- }\r
-}\r
-function loadNlsBundle(header, bundlePath) {\r
- var result;\r
- // Core decided to use a language pack. Do the same in the extension\r
- if (supportsLanguagePack()) {\r
- try {\r
- result = loadNlsBundleOrCreateFromI18n(header, bundlePath);\r
- }\r
- catch (err) {\r
- console.log("Load or create bundle failed ", err);\r
- }\r
- }\r
- if (!result) {\r
- // No language pack found, but core is running in language pack mode\r
- // Don't try to use old in the box bundles since the might be stale\r
- // Fall right back to the default bundle.\r
- if (options.languagePackSupport) {\r
- return loadDefaultNlsBundle(bundlePath);\r
- }\r
- var candidate = findInTheBoxBundle(bundlePath);\r
- if (candidate) {\r
- try {\r
- return readJsonFileSync(candidate);\r
- }\r
- catch (err) {\r
- console.log("Loading in the box message bundle failed.", err);\r
- }\r
- }\r
- result = loadDefaultNlsBundle(bundlePath);\r
- }\r
- return result;\r
-}\r
-function tryFindMetaDataHeaderFile(file) {\r
- var result;\r
- var dirname = path.dirname(file);\r
- while (true) {\r
- result = path.join(dirname, 'nls.metadata.header.json');\r
- if (fs.existsSync(result)) {\r
- break;\r
- }\r
- var parent = path.dirname(dirname);\r
- if (parent === dirname) {\r
- result = undefined;\r
- break;\r
- }\r
- else {\r
- dirname = parent;\r
- }\r
- }\r
- return result;\r
-}\r
-function loadMessageBundle(file) {\r
- if (!file) {\r
- // No file. We are in dev mode. Return the default\r
- // localize function.\r
- return localize;\r
- }\r
- // Remove extension since we load json files.\r
- var ext = path.extname(file);\r
- if (ext) {\r
- file = file.substr(0, file.length - ext.length);\r
- }\r
- if (options.messageFormat === MessageFormat.both || options.messageFormat === MessageFormat.bundle) {\r
- var headerFile = tryFindMetaDataHeaderFile(file);\r
- if (headerFile) {\r
- var bundlePath = path.dirname(headerFile);\r
- var bundle = resolvedBundles[bundlePath];\r
- if (bundle === undefined) {\r
- try {\r
- var header = JSON.parse(fs.readFileSync(headerFile, 'utf8'));\r
- try {\r
- var nlsBundle = loadNlsBundle(header, bundlePath);\r
- bundle = cacheBundle(bundlePath, nlsBundle ? { header: header, nlsBundle: nlsBundle } : null);\r
- }\r
- catch (err) {\r
- console.error('Failed to load nls bundle', err);\r
- bundle = cacheBundle(bundlePath, null);\r
- }\r
- }\r
- catch (err) {\r
- console.error('Failed to read header file', err);\r
- bundle = cacheBundle(bundlePath, null);\r
- }\r
- }\r
- if (bundle) {\r
- var module_3 = file.substr(bundlePath.length + 1).replace(/\\/g, '/');\r
- var messages = bundle.nlsBundle[module_3];\r
- if (messages === undefined) {\r
- console.error("Messages for file " + file + " not found. See console for details.");\r
- return function () {\r
- return 'Messages not found.';\r
- };\r
- }\r
- return createScopedLocalizeFunction(messages);\r
- }\r
- }\r
- }\r
- if (options.messageFormat === MessageFormat.both || options.messageFormat === MessageFormat.file) {\r
- // Try to load a single file bundle\r
- try {\r
- var json = readJsonFileSync(resolveLanguage(file));\r
- if (Array.isArray(json)) {\r
- return createScopedLocalizeFunction(json);\r
- }\r
- else {\r
- if (isDefined(json.messages) && isDefined(json.keys)) {\r
- return createScopedLocalizeFunction(json.messages);\r
- }\r
- else {\r
- console.error("String bundle '" + file + "' uses an unsupported format.");\r
- return function () {\r
- return 'File bundle has unsupported format. See console for details';\r
- };\r
- }\r
- }\r
- }\r
- catch (err) {\r
- if (err.code !== 'ENOENT') {\r
- console.error('Failed to load single file bundle', err);\r
- }\r
- }\r
- }\r
- console.error("Failed to load message bundle for file " + file);\r
- return function () {\r
- return 'Failed to load message bundle. See console for details.';\r
- };\r
-}\r
-exports.loadMessageBundle = loadMessageBundle;\r
-function config(opts) {\r
- if (opts) {\r
- if (isString(opts.locale)) {\r
- options.locale = opts.locale.toLowerCase();\r
- options.language = options.locale;\r
- resolvedLanguage = undefined;\r
- resolvedBundles = Object.create(null);\r
- }\r
- if (opts.messageFormat !== undefined) {\r
- options.messageFormat = opts.messageFormat;\r
- }\r
- if (opts.bundleFormat === BundleFormat.standalone && options.languagePackSupport === true) {\r
- options.languagePackSupport = false;\r
- }\r
- }\r
- isPseudo = options.locale === 'pseudo';\r
- return loadMessageBundle;\r
-}\r
-exports.config = config;\r
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+/* --------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ * ------------------------------------------------------------------------------------------ */
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.config = exports.loadMessageBundle = void 0;
+var path = __webpack_require__(3);
+var fs = __webpack_require__(80);
+var ral_1 = __webpack_require__(95);
+var common_1 = __webpack_require__(96);
+var common_2 = __webpack_require__(96);
+Object.defineProperty(exports, "MessageFormat", ({ enumerable: true, get: function () { return common_2.MessageFormat; } }));
+Object.defineProperty(exports, "BundleFormat", ({ enumerable: true, get: function () { return common_2.BundleFormat; } }));
+var toString = Object.prototype.toString;
+function isNumber(value) {
+ return toString.call(value) === '[object Number]';
+}
+function isString(value) {
+ return toString.call(value) === '[object String]';
+}
+function isBoolean(value) {
+ return value === true || value === false;
+}
+function readJsonFileSync(filename) {
+ return JSON.parse(fs.readFileSync(filename, 'utf8'));
+}
+var resolvedBundles;
+var options;
+function initializeSettings() {
+ options = { locale: undefined, language: undefined, languagePackSupport: false, cacheLanguageResolution: true, messageFormat: common_1.MessageFormat.bundle };
+ if (isString(process.env.VSCODE_NLS_CONFIG)) {
+ try {
+ var vscodeOptions_1 = JSON.parse(process.env.VSCODE_NLS_CONFIG);
+ var language = void 0;
+ if (vscodeOptions_1.availableLanguages) {
+ var value = vscodeOptions_1.availableLanguages['*'];
+ if (isString(value)) {
+ language = value;
+ }
+ }
+ if (isString(vscodeOptions_1.locale)) {
+ options.locale = vscodeOptions_1.locale.toLowerCase();
+ }
+ if (language === undefined) {
+ options.language = options.locale;
+ }
+ else if (language !== 'en') {
+ options.language = language;
+ }
+ if (isBoolean(vscodeOptions_1._languagePackSupport)) {
+ options.languagePackSupport = vscodeOptions_1._languagePackSupport;
+ }
+ if (isString(vscodeOptions_1._cacheRoot)) {
+ options.cacheRoot = vscodeOptions_1._cacheRoot;
+ }
+ if (isString(vscodeOptions_1._languagePackId)) {
+ options.languagePackId = vscodeOptions_1._languagePackId;
+ }
+ if (isString(vscodeOptions_1._translationsConfigFile)) {
+ options.translationsConfigFile = vscodeOptions_1._translationsConfigFile;
+ try {
+ options.translationsConfig = readJsonFileSync(options.translationsConfigFile);
+ }
+ catch (error) {
+ // We can't read the translation config file. Mark the cache as corrupted.
+ if (vscodeOptions_1._corruptedFile) {
+ var dirname = path.dirname(vscodeOptions_1._corruptedFile);
+ fs.exists(dirname, function (exists) {
+ if (exists) {
+ fs.writeFile(vscodeOptions_1._corruptedFile, 'corrupted', 'utf8', function (err) {
+ console.error(err);
+ });
+ }
+ });
+ }
+ }
+ }
+ }
+ catch (_a) {
+ // Do nothing.
+ }
+ }
+ common_1.setPseudo(options.locale === 'pseudo');
+ resolvedBundles = Object.create(null);
+}
+initializeSettings();
+function supportsLanguagePack() {
+ return options.languagePackSupport === true && options.cacheRoot !== undefined && options.languagePackId !== undefined && options.translationsConfigFile !== undefined
+ && options.translationsConfig !== undefined;
+}
+function createScopedLocalizeFunction(messages) {
+ return function (key, message) {
+ var args = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ args[_i - 2] = arguments[_i];
+ }
+ if (isNumber(key)) {
+ if (key >= messages.length) {
+ console.error("Broken localize call found. Index out of bounds. Stacktrace is\n: " + new Error('').stack);
+ return;
+ }
+ return common_1.format(messages[key], args);
+ }
+ else {
+ if (isString(message)) {
+ console.warn("Message " + message + " didn't get externalized correctly.");
+ return common_1.format(message, args);
+ }
+ else {
+ console.error("Broken localize call found. Stacktrace is\n: " + new Error('').stack);
+ }
+ }
+ };
+}
+function resolveLanguage(file) {
+ var resolvedLanguage;
+ if (options.cacheLanguageResolution && resolvedLanguage) {
+ resolvedLanguage = resolvedLanguage;
+ }
+ else {
+ if (common_1.isPseudo || !options.language) {
+ resolvedLanguage = '.nls.json';
+ }
+ else {
+ var locale = options.language;
+ while (locale) {
+ var candidate = '.nls.' + locale + '.json';
+ if (fs.existsSync(file + candidate)) {
+ resolvedLanguage = candidate;
+ break;
+ }
+ else {
+ var index = locale.lastIndexOf('-');
+ if (index > 0) {
+ locale = locale.substring(0, index);
+ }
+ else {
+ resolvedLanguage = '.nls.json';
+ locale = null;
+ }
+ }
+ }
+ }
+ if (options.cacheLanguageResolution) {
+ resolvedLanguage = resolvedLanguage;
+ }
+ }
+ return file + resolvedLanguage;
+}
+function findInTheBoxBundle(root) {
+ var language = options.language;
+ while (language) {
+ var candidate = path.join(root, "nls.bundle." + language + ".json");
+ if (fs.existsSync(candidate)) {
+ return candidate;
+ }
+ else {
+ var index = language.lastIndexOf('-');
+ if (index > 0) {
+ language = language.substring(0, index);
+ }
+ else {
+ language = undefined;
+ }
+ }
+ }
+ // Test if we can reslove the default bundle.
+ if (language === undefined) {
+ var candidate = path.join(root, 'nls.bundle.json');
+ if (fs.existsSync(candidate)) {
+ return candidate;
+ }
+ }
+ return undefined;
+}
+function mkdir(directory) {
+ try {
+ fs.mkdirSync(directory);
+ }
+ catch (err) {
+ if (err.code === 'EEXIST') {
+ return;
+ }
+ else if (err.code === 'ENOENT') {
+ var parent = path.dirname(directory);
+ if (parent !== directory) {
+ mkdir(parent);
+ fs.mkdirSync(directory);
+ }
+ }
+ else {
+ throw err;
+ }
+ }
+}
+function createDefaultNlsBundle(folder) {
+ var metaData = readJsonFileSync(path.join(folder, 'nls.metadata.json'));
+ var result = Object.create(null);
+ for (var module_1 in metaData) {
+ var entry = metaData[module_1];
+ result[module_1] = entry.messages;
+ }
+ return result;
+}
+function createNLSBundle(header, metaDataPath) {
+ var languagePackLocation = options.translationsConfig[header.id];
+ if (!languagePackLocation) {
+ return undefined;
+ }
+ var languagePack = readJsonFileSync(languagePackLocation).contents;
+ var metaData = readJsonFileSync(path.join(metaDataPath, 'nls.metadata.json'));
+ var result = Object.create(null);
+ for (var module_2 in metaData) {
+ var entry = metaData[module_2];
+ var translations = languagePack[header.outDir + "/" + module_2];
+ if (translations) {
+ var resultMessages = [];
+ for (var i = 0; i < entry.keys.length; i++) {
+ var messageKey = entry.keys[i];
+ var key = isString(messageKey) ? messageKey : messageKey.key;
+ var translatedMessage = translations[key];
+ if (translatedMessage === undefined) {
+ translatedMessage = entry.messages[i];
+ }
+ resultMessages.push(translatedMessage);
+ }
+ result[module_2] = resultMessages;
+ }
+ else {
+ result[module_2] = entry.messages;
+ }
+ }
+ return result;
+}
+function touch(file) {
+ var d = new Date();
+ fs.utimes(file, d, d, function () {
+ // Do nothing. Ignore
+ });
+}
+function cacheBundle(key, bundle) {
+ resolvedBundles[key] = bundle;
+ return bundle;
+}
+function loadNlsBundleOrCreateFromI18n(header, bundlePath) {
+ var result;
+ var bundle = path.join(options.cacheRoot, header.id + "-" + header.hash + ".json");
+ var useMemoryOnly = false;
+ var writeBundle = 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, function (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;
+}
+function loadDefaultNlsBundle(bundlePath) {
+ try {
+ return createDefaultNlsBundle(bundlePath);
+ }
+ catch (err) {
+ console.log("Generating default bundle from meta data failed.", err);
+ return undefined;
+ }
+}
+function loadNlsBundle(header, bundlePath) {
+ var result;
+ // Core decided to use a language pack. Do the same in the extension
+ if (supportsLanguagePack()) {
+ try {
+ result = loadNlsBundleOrCreateFromI18n(header, bundlePath);
+ }
+ catch (err) {
+ console.log("Load or create bundle failed ", err);
+ }
+ }
+ if (!result) {
+ // No language pack found, but core is running in language pack mode
+ // Don't try to use old in the box bundles since the might be stale
+ // Fall right back to the default bundle.
+ if (options.languagePackSupport) {
+ return loadDefaultNlsBundle(bundlePath);
+ }
+ var candidate = findInTheBoxBundle(bundlePath);
+ if (candidate) {
+ try {
+ return readJsonFileSync(candidate);
+ }
+ catch (err) {
+ console.log("Loading in the box message bundle failed.", err);
+ }
+ }
+ result = loadDefaultNlsBundle(bundlePath);
+ }
+ return result;
+}
+function tryFindMetaDataHeaderFile(file) {
+ var result;
+ var dirname = path.dirname(file);
+ while (true) {
+ result = path.join(dirname, 'nls.metadata.header.json');
+ if (fs.existsSync(result)) {
+ break;
+ }
+ var parent = path.dirname(dirname);
+ if (parent === dirname) {
+ result = undefined;
+ break;
+ }
+ else {
+ dirname = parent;
+ }
+ }
+ return result;
+}
+function loadMessageBundle(file) {
+ if (!file) {
+ // No file. We are in dev mode. Return the default
+ // localize function.
+ return common_1.localize;
+ }
+ // Remove extension since we load json files.
+ var ext = path.extname(file);
+ if (ext) {
+ file = file.substr(0, file.length - ext.length);
+ }
+ if (options.messageFormat === common_1.MessageFormat.both || options.messageFormat === common_1.MessageFormat.bundle) {
+ var headerFile = tryFindMetaDataHeaderFile(file);
+ if (headerFile) {
+ var bundlePath = path.dirname(headerFile);
+ var bundle = resolvedBundles[bundlePath];
+ if (bundle === undefined) {
+ try {
+ var header = JSON.parse(fs.readFileSync(headerFile, 'utf8'));
+ try {
+ var nlsBundle = loadNlsBundle(header, bundlePath);
+ bundle = cacheBundle(bundlePath, nlsBundle ? { header: header, nlsBundle: nlsBundle } : null);
+ }
+ catch (err) {
+ console.error('Failed to load nls bundle', err);
+ bundle = cacheBundle(bundlePath, null);
+ }
+ }
+ catch (err) {
+ console.error('Failed to read header file', err);
+ bundle = cacheBundle(bundlePath, null);
+ }
+ }
+ if (bundle) {
+ var module_3 = file.substr(bundlePath.length + 1).replace(/\\/g, '/');
+ var messages = bundle.nlsBundle[module_3];
+ if (messages === undefined) {
+ console.error("Messages for file " + file + " not found. See console for details.");
+ return function () {
+ return 'Messages not found.';
+ };
+ }
+ return createScopedLocalizeFunction(messages);
+ }
+ }
+ }
+ if (options.messageFormat === common_1.MessageFormat.both || options.messageFormat === common_1.MessageFormat.file) {
+ // Try to load a single file bundle
+ try {
+ var json = readJsonFileSync(resolveLanguage(file));
+ if (Array.isArray(json)) {
+ return createScopedLocalizeFunction(json);
+ }
+ else {
+ if (common_1.isDefined(json.messages) && common_1.isDefined(json.keys)) {
+ return createScopedLocalizeFunction(json.messages);
+ }
+ else {
+ console.error("String bundle '" + file + "' uses an unsupported format.");
+ return function () {
+ return 'File bundle has unsupported format. See console for details';
+ };
+ }
+ }
+ }
+ catch (err) {
+ if (err.code !== 'ENOENT') {
+ console.error('Failed to load single file bundle', err);
+ }
+ }
+ }
+ console.error("Failed to load message bundle for file " + file);
+ return function () {
+ return 'Failed to load message bundle. See console for details.';
+ };
+}
+exports.loadMessageBundle = loadMessageBundle;
+function config(opts) {
+ if (opts) {
+ if (isString(opts.locale)) {
+ options.locale = opts.locale.toLowerCase();
+ options.language = options.locale;
+ resolvedBundles = Object.create(null);
+ }
+ if (opts.messageFormat !== undefined) {
+ options.messageFormat = opts.messageFormat;
+ }
+ if (opts.bundleFormat === common_1.BundleFormat.standalone && options.languagePackSupport === true) {
+ options.languagePackSupport = false;
+ }
+ }
+ common_1.setPseudo(options.locale === 'pseudo');
+ return loadMessageBundle;
+}
+exports.config = config;
+ral_1.default.install(Object.freeze({
+ loadMessageBundle: loadMessageBundle,
+ config: config
+}));