massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-json / node_modules / vscode-nls / lib / main.js
diff --git a/.config/coc/extensions/node_modules/coc-json/node_modules/vscode-nls/lib/main.js b/.config/coc/extensions/node_modules/coc-json/node_modules/vscode-nls/lib/main.js
new file mode 100644 (file)
index 0000000..29d22de
--- /dev/null
@@ -0,0 +1,499 @@
+/* --------------------------------------------------------------------------------------------\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
+'use strict';\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+var path = require("path");\r
+var fs = require("fs");\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
+//# sourceMappingURL=main.js.map
\ No newline at end of file