Socket
Socket
Sign inDemoInstall

@ladjs/i18n

Package Overview
Dependencies
Maintainers
3
Versions
55
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ladjs/i18n - npm Package Compare versions

Comparing version 0.1.2 to 0.2.0

53

lib/index.js

@@ -17,6 +17,13 @@ 'use strict';

var _require3 = require('country-language');
var _require3 = require('lodash');
const getLanguage = _require3.getLanguage;
const isEmpty = _require3.isEmpty,
sortBy = _require3.sortBy,
every = _require3.every,
isFunction = _require3.isFunction;
var _require4 = require('country-language');
const getLanguage = _require4.getLanguage;
const moment = require('moment');

@@ -26,3 +33,4 @@ const i18n = require('i18n');

const autoBind = require('auto-bind');
const _ = require('lodash');
const debug = require('debug')('ladjs:i18n');
const boolean = require('boolean');

@@ -42,5 +50,5 @@ // expose global

defaultLocale: 'en',
syncFiles: true,
autoReload: true,
updateFiles: true,
syncFiles: boolean(process.env.I18N_SYNC_FILES),
autoReload: boolean(process.env.I18N_AUTO_RELOAD),
updateFiles: boolean(process.env.I18N_UPDATE_FILES),
api: {

@@ -64,3 +72,3 @@ __: 't',

// validate locales against available ones
if (!_.every(this.config.locales, l => locales.includes(l))) throw new Error(`Invalid locales: ${this.config.locales.filter(str => !locales.includes(str)).join(', ')}`);
if (!every(this.config.locales, l => locales.includes(l))) throw new Error(`Invalid locales: ${this.config.locales.filter(str => !locales.includes(str)).join(', ')}`);

@@ -128,3 +136,9 @@ // inherit i18n object

locale = defaultLocale;
if (ctx.cookies.get(cookie) && locales.includes(ctx.cookies.get(cookie))) locale = ctx.cookies.get(cookie);else if (ctx.request.acceptsLanguages(locales)) locale = ctx.request.acceptsLanguages(locales);
if (ctx.cookies.get(cookie) && locales.includes(ctx.cookies.get(cookie))) {
locale = ctx.cookies.get(cookie);
debug('found locale via cookie using %s', locale);
} else if (ctx.request.acceptsLanguages(locales)) {
locale = ctx.request.acceptsLanguages(locales);
debug('found locale via Accept-Language header using %s', locale);
}
}

@@ -137,9 +151,9 @@

// if the locale was not available then redirect user
if (locale !== ctx.state.locale) return ctx.redirect(`/${ctx.state.locale}${ctx.pathWithoutLocale}${_.isEmpty(ctx.query) ? '' : `?${stringify(ctx.query)}`}`);
if (locale !== ctx.state.locale) return ctx.redirect(`/${ctx.state.locale}${ctx.pathWithoutLocale}${isEmpty(ctx.query) ? '' : `?${stringify(ctx.query)}`}`);
// available languages for a dropdown menu to change language
ctx.state.availableLanguages = _.sortBy(locales.map(locale => {
ctx.state.availableLanguages = sortBy(locales.map(locale => {
return {
locale,
url: `/${locale}${ctx.pathWithoutLocale}${_.isEmpty(ctx.query) ? '' : `?${stringify(ctx.query)}`}`,
url: `/${locale}${ctx.pathWithoutLocale}${isEmpty(ctx.query) ? '' : `?${stringify(ctx.query)}`}`,
name: getLanguage(locale).name[0]

@@ -169,2 +183,3 @@ };

return _asyncToGenerator(function* () {
debug('attempting to redirect');
// do not redirect static paths

@@ -183,14 +198,20 @@ if (extname(ctx.path) !== '') return next();

let redirect = `/${ctx.req.locale}${ctx.url}`;
if (!_.isEmpty(ctx.query)) redirect += `?${stringify(ctx.query)}`;
if (!isEmpty(ctx.query)) redirect += `?${stringify(ctx.query)}`;
debug('no valid locale found in URL, redirecting to %s', redirect);
return ctx.redirect(redirect);
}
debug('found valid language "%s"', locale);
// set the cookie for future requests
ctx.cookies.set(_this.config.cookie, locale, {
signed: true,
// Disable signed cookies in NODE_ENV=test
signed: process.env.NODE_ENV !== 'test',
expires: moment().add(1, 'year').toDate()
});
debug('set cookies for locale "%s"', locale);
// if the user is logged in, then save it as `last_locale`
if (_.isFunction(ctx.isAuthenticated) && ctx.isAuthenticated()) {
// if the user is logged in and ctx.isAuthenticated() exists,
// then save it as `last_locale`
if (isFunction(ctx.isAuthenticated) && ctx.isAuthenticated()) {
ctx.state.user.last_locale = locale;

@@ -210,2 +231,2 @@ try {

module.exports = I18N;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlIiwiZXh0bmFtZSIsInJlc29sdmUiLCJzdHJpbmdpZnkiLCJCb29tIiwicyIsImdldExhbmd1YWdlIiwibW9tZW50IiwiaTE4biIsImxvY2FsZXMiLCJhdXRvQmluZCIsIl8iLCJhcGkiLCJJMThOIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJPYmplY3QiLCJhc3NpZ24iLCJwaHJhc2VzIiwibG9nZ2VyIiwiY29uc29sZSIsImRpcmVjdG9yeSIsImNvb2tpZSIsImluZGVudCIsImRlZmF1bHRMb2NhbGUiLCJzeW5jRmlsZXMiLCJhdXRvUmVsb2FkIiwidXBkYXRlRmlsZXMiLCJfXyIsIl9fbiIsIl9fbCIsIl9faCIsIl9fbWYiLCJyZWdpc3RlciIsImxvZ0RlYnVnRm4iLCJkZWJ1ZyIsImxvZ1dhcm5GbiIsIndhcm4iLCJsb2dFcnJvckZuIiwiZXJyb3IiLCJldmVyeSIsImwiLCJpbmNsdWRlcyIsIkVycm9yIiwiZmlsdGVyIiwic3RyIiwiam9pbiIsImNvbmZpZ3VyZSIsInRyYW5zbGF0ZSIsImtleSIsImxvY2FsZSIsImFyZ3MiLCJrZXlzIiwiYXJndW1lbnRzIiwibWFwIiwic2xpY2UiLCJwaHJhc2UiLCJ0IiwibWlkZGxld2FyZSIsImN0eCIsIm5leHQiLCJpbml0IiwicmVxIiwic3RhdGUiLCJwYXRoIiwiZmluZCIsImluZGV4T2YiLCJwYXRoV2l0aG91dExvY2FsZSIsInN1YnN0cmluZyIsImxlbmd0aCIsImNvb2tpZXMiLCJnZXQiLCJyZXF1ZXN0IiwiYWNjZXB0c0xhbmd1YWdlcyIsInNldExvY2FsZSIsInJlZGlyZWN0IiwiaXNFbXB0eSIsInF1ZXJ5IiwiYXZhaWxhYmxlTGFuZ3VhZ2VzIiwic29ydEJ5IiwidXJsIiwibmFtZSIsImN1cnJlbnRMYW5ndWFnZSIsInRpdGxlaXplIiwibmF0aXZlTmFtZSIsInRocm93IiwiYmFkUmVxdWVzdCIsInNwbGl0IiwiaGFzTGFuZyIsInN0YXR1cyIsInNldCIsInNpZ25lZCIsImV4cGlyZXMiLCJhZGQiLCJ0b0RhdGUiLCJpc0Z1bmN0aW9uIiwiaXNBdXRoZW50aWNhdGVkIiwidXNlciIsImxhc3RfbG9jYWxlIiwic2F2ZSIsImVyciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7ZUFBNkJBLFFBQVEsTUFBUixDOztNQUFyQkMsTyxZQUFBQSxPO01BQVNDLE8sWUFBQUEsTzs7Z0JBQ0tGLFFBQVEsSUFBUixDOztNQUFkRyxTLGFBQUFBLFM7O0FBQ1IsTUFBTUMsT0FBT0osUUFBUSxNQUFSLENBQWI7QUFDQSxNQUFNSyxJQUFJTCxRQUFRLG1CQUFSLENBQVY7O2dCQUN3QkEsUUFBUSxrQkFBUixDOztNQUFoQk0sVyxhQUFBQSxXOztBQUNSLE1BQU1DLFNBQVNQLFFBQVEsUUFBUixDQUFmO0FBQ0EsTUFBTVEsT0FBT1IsUUFBUSxNQUFSLENBQWI7QUFDQSxNQUFNUyxVQUFVVCxRQUFRLGNBQVIsQ0FBaEI7QUFDQSxNQUFNVSxXQUFXVixRQUFRLFdBQVIsQ0FBakI7QUFDQSxNQUFNVyxJQUFJWCxRQUFRLFFBQVIsQ0FBVjs7QUFFQTtBQUNBUSxLQUFLSSxHQUFMLEdBQVcsRUFBWDs7QUFFQSxNQUFNQyxJQUFOLENBQVc7QUFDVEMsY0FBWUMsU0FBUyxFQUFyQixFQUF5QjtBQUN2QixTQUFLQSxNQUFMLEdBQWNDLE9BQU9DLE1BQVAsQ0FDWjtBQUNFQyxlQUFTLEVBRFg7QUFFRUMsY0FBUUMsT0FGVjtBQUdFQyxpQkFBV25CLFFBQVEsU0FBUixDQUhiO0FBSUVPLGVBQVMsQ0FBQyxJQUFELEVBQU8sSUFBUCxFQUFhLElBQWIsQ0FKWDtBQUtFYSxjQUFRLFFBTFY7QUFNRUMsY0FBUSxJQU5WO0FBT0VDLHFCQUFlLElBUGpCO0FBUUVDLGlCQUFXLElBUmI7QUFTRUMsa0JBQVksSUFUZDtBQVVFQyxtQkFBYSxJQVZmO0FBV0VmLFdBQUs7QUFDSGdCLFlBQUksR0FERDtBQUVIQyxhQUFLLElBRkY7QUFHSEMsYUFBSyxJQUhGO0FB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QUwsQ0FBWUksTUFBWixDQUFtQm9CLEtBQW5CLENBQXlCNkQsR0FBekI7QUFDRDtBQUNGOztBQUVELGFBQU94QyxNQUFQO0FBcEN3QjtBQXFDekI7QUE5TFE7O0FBaU1YeUMsT0FBT0MsT0FBUCxHQUFpQnpGLElBQWpCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyBleHRuYW1lLCByZXNvbHZlIH0gPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgncXMnKTtcbmNvbnN0IEJvb20gPSByZXF1aXJlKCdib29tJyk7XG5jb25zdCBzID0gcmVxdWlyZSgndW5kZXJzY29yZS5zdHJpbmcnKTtcbmNvbnN0IHsgZ2V0TGFuZ3VhZ2UgfSA9IHJlcXVpcmUoJ2NvdW50cnktbGFuZ3VhZ2UnKTtcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xuY29uc3QgaTE4biA9IHJlcXVpcmUoJ2kxOG4nKTtcbmNvbnN0IGxvY2FsZXMgPSByZXF1aXJlKCdpMThuLWxvY2FsZXMnKTtcbmNvbnN0IGF1dG9CaW5kID0gcmVxdWlyZSgnYXV0by1iaW5kJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5cbi8vIGV4cG9zZSBnbG9iYWxcbmkxOG4uYXBpID0ge307XG5cbmNsYXNzIEkxOE4ge1xuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgcGhyYXNlczoge30sXG4gICAgICAgIGxvZ2dlcjogY29uc29sZSxcbiAgICAgICAgZGlyZWN0b3J5OiByZXNvbHZlKCdsb2NhbGVzJyksXG4gICAgICAgIGxvY2FsZXM6IFsnZW4nLCAnZXMnLCAnemgnXSxcbiAgICAgICAgY29va2llOiAnbG9jYWxlJyxcbiAgICAgICAgaW5kZW50OiAnICAnLFxuICAgICAgICBkZWZhdWx0TG9jYWxlOiAnZW4nLFxuICAgICAgICBzeW5jRmlsZXM6IHRydWUsXG4gICAgICAgIGF1dG9SZWxvYWQ6IHRydWUsXG4gICAgICAgIHVwZGF0ZUZpbGVzOiB0cnVlLFxuICAgICAgICBhcGk6IHtcbiAgICAgICAgICBfXzogJ3QnLFxuICAgICAgICAgIF9fbjogJ3RuJyxcbiAgICAgICAgICBfX2w6ICd0bCcsXG4gICAgICAgICAgX19oOiAndGgnLFxuICAgICAgICAgIF9fbWY6ICd0bWYnXG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyOiBpMThuLmFwaVxuICAgICAgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG5cbiAgICBjb25zdCB7IGxvZ2dlciB9ID0gdGhpcy5jb25maWc7XG5cbiAgICB0aGlzLmNvbmZpZy5sb2dEZWJ1Z0ZuID0gbG9nZ2VyLmRlYnVnO1xuICAgIHRoaXMuY29uZmlnLmxvZ1dhcm5GbiA9IGxvZ2dlci53YXJuO1xuICAgIHRoaXMuY29uZmlnLmxvZ0Vycm9yRm4gPSBsb2dnZXIuZXJyb3I7XG5cbiAgICAvLyB2YWxpZGF0ZSBsb2NhbGVzIGFnYWluc3QgYXZhaWxhYmxlIG9uZXNcbiAgICBpZiAoIV8uZXZlcnkodGhpcy5jb25maWcubG9jYWxlcywgbCA9PiBsb2NhbGVzLmluY2x1ZGVzKGwpKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgbG9jYWxlczogJHt0aGlzLmNvbmZpZy5sb2NhbGVzXG4gICAgICAgICAgLmZpbHRlcihzdHIgPT4gIWxvY2FsZXMuaW5jbHVkZXMoc3RyKSlcbiAgICAgICAgICAuam9pbignLCAnKX1gXG4gICAgICApO1xuXG4gICAgLy8gaW5oZXJpdCBpMThuIG9iamVjdFxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgaTE4bik7XG5cbiAgICAvLyBjb25maWd1cmUgaTE4blxuICAgIHRoaXMuY29uZmlndXJlKHRoaXMuY29uZmlnKTtcblxuICAgIGF1dG9CaW5kKHRoaXMpO1xuICB9XG5cbiAgdHJhbnNsYXRlKGtleSwgbG9jYWxlKSB7XG4gICAgY29uc3QgeyBsb2dnZXIsIHBocmFzZXMgfSA9IHRoaXMuY29uZmlnO1xuICAgIGxldCBhcmdzID0gT2JqZWN0LmtleXMoYXJndW1lbnRzKVxuICAgICAgLm1hcChrZXkgPT4gYXJndW1lbnRzW2tleV0pXG4gICAgICAuc2xpY2UoMik7XG4gICAgaWYgKHR5cGVvZiBhcmdzID09PSAndW5kZWZpbmVkJykgYXJncyA9IFtdO1xuICAgIGNvbnN0IHBocmFzZSA9IHBocmFzZXNba2V5XTtcbiAgICBpZiAodHlwZW9mIHBocmFzZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGxvZ2dlci53YXJuKGB0cmFuc2xhdGlvbiBrZXkgbWlzc2luZzogJHtrZXl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFyZ3MgPSBbeyBwaHJhc2UsIGxvY2FsZSB9LCAuLi5hcmdzXTtcbiAgICByZXR1cm4gaTE4bi5hcGkudCguLi5hcmdzKTtcbiAgfVxuXG4gIG1pZGRsZXdhcmUoY3R4LCBuZXh0KSB7XG4gICAgY29uc3QgeyBsb2NhbGVzLCBkZWZhdWx0TG9jYWxlLCBwaHJhc2VzLCBjb29raWUgfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgLy8gZXhwb3NlIGFwaSBtZXRob2RzIHRvIGBjdHgucmVxYCBhbmQgYGN0eC5zdGF0ZWBcbiAgICBpMThuLmluaXQoY3R4LnJlcSwgY3R4LnN0YXRlKTtcblxuICAgIC8vIGV4cG9zZSBhIGhlbHBlciBmdW5jdGlvbiB0byBgY3R4LnN0YXRlLmxgXG4gICAgLy8gd2hpY2ggcHJlZml4ZXMgYSBsaW5rL3BhdGggd2l0aCB0aGUgbG9jYWxlXG4gICAgY3R4LnN0YXRlLmwgPSAocGF0aCA9ICcnKSA9PiB7XG4gICAgICByZXR1cm4gYC8ke2N0eC5zdGF0ZS5sb2NhbGV9JHtwYXRofWA7XG4gICAgfTtcblxuICAgIC8vIG92ZXJyaWRlIHRoZSBleGlzdGluZyBsb2NhbGUgZGV0ZWN0aW9uIHdpdGggb3VyIG93blxuICAgIC8vIGluIG9yZGVyIG9mIHByaW9yaXR5OlxuICAgIC8vXG4gICAgLy8gMS4gY2hlY2sgdGhlIFVSTCwgaWYgPT09IGAvZGVgIG9yIHN0YXJ0cyB3aXRoIGAvZGUvYCB0aGVuIGxvY2FsZSBpcyBgZGVgXG4gICAgLy8gMi4gY2hlY2sgdGhlIGNvb2tpZVxuICAgIC8vIDMuIGNoZWNrIEFjY2VwdC1MYW5ndWFnZSBsYXN0XG4gICAgLy9cbiAgICAvLyBhbHNvIHdlIG5lZWQgdG8gZXhwb3NlIGBjdHgucGF0aFdpdGhvdXRMb2NhbGVgXG4gICAgLy8gYXMgdGhlIHBhdGggd2l0aG91dCBsb2NhbGVcblxuICAgIGxldCBsb2NhbGUgPSBsb2NhbGVzLmZpbmQobCA9PiB7XG4gICAgICByZXR1cm4gYC8ke2x9YCA9PT0gY3R4LnBhdGggfHwgY3R4LnBhdGguaW5kZXhPZihgLyR7bH0vYCkgPT09IDA7XG4gICAgfSk7XG5cbiAgICBjdHgucGF0aFdpdGhvdXRMb2NhbGUgPSBsb2NhbGVcbiAgICAgID8gY3R4LnBhdGguc3Vic3RyaW5nKGAvJHtsb2NhbGV9YC5sZW5ndGgpXG4gICAgICA6IGN0eC5wYXRoO1xuICAgIGlmIChjdHgucGF0aFdpdGhvdXRMb2NhbGUgPT09ICcnKSBjdHgucGF0aFdpdGhvdXRMb2NhbGUgPSAnLyc7XG5cbiAgICBpZiAoIWxvY2FsZSkge1xuICAgICAgbG9jYWxlID0gZGVmYXVsdExvY2FsZTtcbiAgICAgIGlmIChjdHguY29va2llcy5nZXQoY29va2llKSAmJiBsb2NhbGVzLmluY2x1ZGVzKGN0eC5jb29raWVzLmdldChjb29raWUpKSlcbiAgICAgICAgbG9jYWxlID0gY3R4LmNvb2tpZXMuZ2V0KGNvb2tpZSk7XG4gICAgICBlbHNlIGlmIChjdHgucmVxdWVzdC5hY2NlcHRzTGFuZ3VhZ2VzKGxvY2FsZXMpKVxuICAgICAgICBsb2NhbGUgPSBjdHgucmVxdWVzdC5hY2NlcHRzTGFuZ3VhZ2VzKGxvY2FsZXMpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbG9jYWxlIHByb3Blcmx5XG4gICAgaTE4bi5zZXRMb2NhbGUoW2N0eC5yZXEsIGN0eC5zdGF0ZV0sIGxvY2FsZSk7XG4gICAgY3R4LmxvY2FsZSA9IGN0eC5yZXEubG9jYWxlO1xuXG4gICAgLy8gaWYgdGhlIGxvY2FsZSB3YXMgbm90IGF2YWlsYWJsZSB0aGVuIHJlZGlyZWN0IHVzZXJcbiAgICBpZiAobG9jYWxlICE9PSBjdHguc3RhdGUubG9jYWxlKVxuICAgICAgcmV0dXJuIGN0eC5yZWRpcmVjdChcbiAgICAgICAgYC8ke2N0eC5zdGF0ZS5sb2NhbGV9JHtjdHgucGF0aFdpdGhvdXRMb2NhbGV9JHtfLmlzRW1wdHkoY3R4LnF1ZXJ5KVxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6IGA/JHtzdHJpbmdpZnkoY3R4LnF1ZXJ5KX1gfWBcbiAgICAgICk7XG5cbiAgICAvLyBhdmFpbGFibGUgbGFuZ3VhZ2VzIGZvciBhIGRyb3Bkb3duIG1lbnUgdG8gY2hhbmdlIGxhbmd1YWdlXG4gICAgY3R4LnN0YXRlLmF2YWlsYWJsZUxhbmd1YWdlcyA9IF8uc29ydEJ5KFxuICAgICAgbG9jYWxlcy5tYXAobG9jYWxlID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgdXJsOiBgLyR7bG9jYWxlfSR7Y3R4LnBhdGhXaXRob3V0TG9jYWxlfSR7Xy5pc0VtcHR5KGN0eC5xdWVyeSlcbiAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgIDogYD8ke3N0cmluZ2lmeShjdHgucXVlcnkpfWB9YCxcbiAgICAgICAgICBuYW1lOiBnZXRMYW5ndWFnZShsb2NhbGUpLm5hbWVbMF1cbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgJ25hbWUnXG4gICAgKTtcblxuICAgIC8vIGdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBsb2NhbGUncyBsYW5ndWFnZSBpbiBuYXRpdmUgbGFuZ3VhZ2VcbiAgICBjdHguc3RhdGUuY3VycmVudExhbmd1YWdlID0gcy50aXRsZWl6ZShcbiAgICAgIGdldExhbmd1YWdlKGN0eC5yZXEubG9jYWxlKS5uYXRpdmVOYW1lWzBdXG4gICAgKTtcblxuICAgIC8vIGJpbmQgYGN0eC50cmFuc2xhdGVgIGFzIGEgaGVscGVyIGZ1bmNcbiAgICAvLyBzbyB5b3UgY2FuIHBhc3MgYGN0eC50cmFuc2xhdGUoJ1NPTUVfS0VZX0lOX0NPTkZJRycpO2AgYW5kIGl0IHdpbGwgbG9va3VwXG4gICAgLy8gYHBocmFzZXNbJ1NPTUVUSElORyddYCB0byBnZXQgYSBzcGVjaWZpYyBhbmQgY29uc3RhbnQgbWVzc2FnZVxuICAgIC8vIGFuZCB0aGVuIGl0IHdpbGwgY2FsbCBgdGAgdG8gdHJhbnNsYXRlIGl0IHRvIHRoZSB1c2VyJ3MgbG9jYWxlXG4gICAgY3R4LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgYXJndW1lbnRzWzBdICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlb2YgcGhyYXNlc1thcmd1bWVudHNbMF1dICE9PSAnc3RyaW5nJ1xuICAgICAgKVxuICAgICAgICByZXR1cm4gY3R4LnRocm93KFxuICAgICAgICAgIEJvb20uYmFkUmVxdWVzdCgnVHJhbnNsYXRpb24gZm9yIHlvdXIgbG9jYWxlIGZhaWxlZCwgdHJ5IGFnYWluJylcbiAgICAgICAgKTtcbiAgICAgIGFyZ3VtZW50c1swXSA9IHBocmFzZXNbYXJndW1lbnRzWzBdXTtcbiAgICAgIHJldHVybiBjdHgucmVxLnQoLi4uYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZGlyZWN0KGN0eCwgbmV4dCkge1xuICAgIC8vIGRvIG5vdCByZWRpcmVjdCBzdGF0aWMgcGF0aHNcbiAgICBpZiAoZXh0bmFtZShjdHgucGF0aCkgIT09ICcnKSByZXR1cm4gbmV4dCgpO1xuXG4gICAgLy8gaW5zcGlyZWQgYnkgbm9kZWpzLm9yZyBsYW5ndWFnZSBzdXBwb3J0XG4gICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZWpzLm9yZy9jb21taXQvZDZjZGQ5NDJhOGZjMGZmZmNmNjg3OWVjYTEyNDI5NWU5NTk5MWJiYyNkaWZmLTc4YzEyZjVhZGMxODQ4ZDEzYjFjNmYwNzA1NWQ5OTZlUjU5PlxuICAgIGNvbnN0IGxvY2FsZSA9IGN0eC51cmwuc3BsaXQoJy8nKVsxXS5zcGxpdCgnPycpWzBdO1xuICAgIGNvbnN0IGhhc0xhbmcgPSB0aGlzLmNvbmZpZy5sb2NhbGVzLmluY2x1ZGVzKGxvY2FsZSk7XG5cbiAgICAvLyBpZiB0aGUgVVJMIGRpZCBub3QgaGF2ZSBhIHZhbGlkIGxhbmd1YWdlIGZvdW5kXG4gICAgLy8gdGhlbiByZWRpcmVjdCB0aGUgdXNlciB0byB0aGVpciBkZXRlY3RlZCBsb2NhbGVcbiAgICBpZiAoIWhhc0xhbmcpIHtcbiAgICAgIGN0eC5zdGF0dXMgPSAzMDI7XG4gICAgICBsZXQgcmVkaXJlY3QgPSBgLyR7Y3R4LnJlcS5sb2NhbGV9JHtjdHgudXJsfWA7XG4gICAgICBpZiAoIV8uaXNFbXB0eShjdHgucXVlcnkpKSByZWRpcmVjdCArPSBgPyR7c3RyaW5naWZ5KGN0eC5xdWVyeSl9YDtcbiAgICAgIHJldHVybiBjdHgucmVkaXJlY3QocmVkaXJlY3QpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgY29va2llIGZvciBmdXR1cmUgcmVxdWVzdHNcbiAgICBjdHguY29va2llcy5zZXQodGhpcy5jb25maWcuY29va2llLCBsb2NhbGUsIHtcbiAgICAgIHNpZ25lZDogdHJ1ZSxcbiAgICAgIGV4cGlyZXM6IG1vbWVudCgpXG4gICAgICAgIC5hZGQoMSwgJ3llYXInKVxuICAgICAgICAudG9EYXRlKClcbiAgICB9KTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbiwgdGhlbiBzYXZlIGl0IGFzIGBsYXN0X2xvY2FsZWBcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGN0eC5pc0F1dGhlbnRpY2F0ZWQpICYmIGN0eC5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgY3R4LnN0YXRlLnVzZXIubGFzdF9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdHguc3RhdGUudXNlci5zYXZlKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmVycm9yKGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEkxOE47XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlIiwiZXh0bmFtZSIsInJlc29sdmUiLCJzdHJpbmdpZnkiLCJCb29tIiwicyIsImlzRW1wdHkiLCJzb3J0QnkiLCJldmVyeSIsImlzRnVuY3Rpb24iLCJnZXRMYW5ndWFnZSIsIm1vbWVudCIsImkxOG4iLCJsb2NhbGVzIiwiYXV0b0JpbmQiLCJkZWJ1ZyIsImJvb2xlYW4iLCJhcGkiLCJJMThOIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJPYmplY3QiLCJhc3NpZ24iLCJwaHJhc2VzIiwibG9nZ2VyIiwiY29uc29sZSIsImRpcmVjdG9yeSIsImNvb2tpZSIsImluZGVudCIsImRlZmF1bHRMb2NhbGUiLCJzeW5jRmlsZXMiLCJwcm9jZXNzIiwiZW52IiwiSTE4Tl9TWU5DX0ZJTEVTIiwiYXV0b1JlbG9hZCIsIkkxOE5fQVVUT19SRUxPQUQiLCJ1cGRhdGVGaWxlcyIsIkkxOE5fVVBEQVRFX0ZJTEVTIiwiX18iLCJfX24iLCJfX2wiLCJfX2giLCJfX21mIiwicmVnaXN0ZXIiLCJsb2dEZWJ1Z0ZuIiwibG9nV2FybkZuIiwid2FybiIsImxvZ0Vycm9yRm4iLCJlcnJvciIsImwiLCJpbmNsdWRlcyIsIkVycm9yIiwiZmlsdGVyIiwic3RyIiwiam9pbiIsImNvbmZpZ3VyZSIsInRyYW5zbGF0ZSIsImtleSIsImxvY2FsZSIsImFyZ3MiLCJrZXlzIiwiYXJndW1lbnRzIiwibWFwIiwic2xpY2UiLCJwaHJhc2UiLCJ0IiwibWlkZGxld2FyZSIsImN0eCIsIm5leHQiLCJpbml0IiwicmVxIiwic3RhdGUiLCJwYXRoIiwiZmluZCIsImluZGV4T2YiLCJwYXRoV2l0aG91dExvY2FsZSIsInN1YnN0cmluZyIsImxlbmd0aCIsImNvb2tpZXMiLCJnZXQiLCJyZXF1ZXN0IiwiYWNjZXB0c0xhbmd1YWdlcyIsInNldExvY2FsZSIsInJlZGlyZWN0IiwicXVlcnkiLCJhdmFpbGFibGVMYW5ndWFnZXMiLCJ1cmwiLCJuYW1lIiwiY3VycmVudExhbmd1YWdlIiwidGl0bGVpemUiLCJuYXRpdmVOYW1lIiwidGhyb3ciLCJiYWRSZXF1ZXN0Iiwic3BsaXQiLCJoYXNMYW5nIiwic3RhdHVzIiwic2V0Iiwic2lnbmVkIiwiTk9ERV9FTlYiLCJleHBpcmVzIiwiYWRkIiwidG9EYXRlIiwiaXNBdXRoZW50aWNhdGVkIiwidXNlciIsImxhc3RfbG9jYWxlIiwic2F2ZSIsImVyciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7ZUFBNkJBLFFBQVEsTUFBUixDOztNQUFyQkMsTyxZQUFBQSxPO01BQVNDLE8sWUFBQUEsTzs7Z0JBQ0tGLFFBQVEsSUFBUixDOztNQUFkRyxTLGFBQUFBLFM7O0FBQ1IsTUFBTUMsT0FBT0osUUFBUSxNQUFSLENBQWI7QUFDQSxNQUFNSyxJQUFJTCxRQUFRLG1CQUFSLENBQVY7O2dCQUMrQ0EsUUFBUSxRQUFSLEM7O01BQXZDTSxPLGFBQUFBLE87TUFBU0MsTSxhQUFBQSxNO01BQVFDLEssYUFBQUEsSztNQUFPQyxVLGFBQUFBLFU7O2dCQUNSVCxRQUFRLGtCQUFSLEM7O01BQWhCVSxXLGFBQUFBLFc7O0FBQ1IsTUFBTUMsU0FBU1gsUUFBUSxRQUFSLENBQWY7QUFDQSxNQUFNWSxPQUFPWixRQUFRLE1BQVIsQ0FBYjtBQUNBLE1BQU1hLFVBQVViLFFBQVEsY0FBUixDQUFoQjtBQUNBLE1BQU1jLFdBQVdkLFFBQVEsV0FBUixDQUFqQjtBQUNBLE1BQU1lLFFBQVFmLFFBQVEsT0FBUixFQUFpQixZQUFqQixDQUFkO0FBQ0EsTUFBTWdCLFVBQVVoQixRQUFRLFNBQVIsQ0FBaEI7O0FBRUE7QUFDQVksS0FBS0ssR0FBTCxHQUFXLEVBQVg7O0FBRUEsTUFBTUMsSUFBTixDQUFXO0FBQ1RDLGNBQVlDLFNBQVMsRUFBckIsRUFBeUI7QUFDdkIsU0FBS0EsTUFBTCxHQUFjQyxPQUFPQyxNQUFQLENBQ1o7QUFDRUMsZUFBUyxFQURYO0FBRUVDLGNBQVFDLE9BRlY7QUFHRUMsaUJBQVd4QixR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OztBQUVBO0FBQ0FTLFVBQUlXLE9BQUosQ0FBWWtCLEdBQVosQ0FBZ0IsTUFBSzVFLE1BQUwsQ0FBWU8sTUFBNUIsRUFBb0MrQixNQUFwQyxFQUE0QztBQUMxQztBQUNBdUMsZ0JBQVFsRSxRQUFRQyxHQUFSLENBQVlrRSxRQUFaLEtBQXlCLE1BRlM7QUFHMUNDLGlCQUFTeEYsU0FDTnlGLEdBRE0sQ0FDRixDQURFLEVBQ0MsTUFERCxFQUVOQyxNQUZNO0FBSGlDLE9BQTVDO0FBT0F0RixZQUFNLDZCQUFOLEVBQXFDMkMsTUFBckM7O0FBRUE7QUFDQTtBQUNBLFVBQUlqRCxXQUFXMEQsSUFBSW1DLGVBQWYsS0FBbUNuQyxJQUFJbUMsZUFBSixFQUF2QyxFQUE4RDtBQUM1RG5DLFlBQUlJLEtBQUosQ0FBVWdDLElBQVYsQ0FBZUMsV0FBZixHQUE2QjlDLE1BQTdCO0FBQ0EsWUFBSTtBQUNGLGdCQUFNUyxJQUFJSSxLQUFKLENBQVVnQyxJQUFWLENBQWVFLElBQWYsRUFBTjtBQUNELFNBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVk7QUFDWixnQkFBS3RGLE1BQUwsQ0FBWUksTUFBWixDQUFtQndCLEtBQW5CLENBQXlCMEQsR0FBekI7QUFDRDtBQUNGOztBQUVELGFBQU90QyxNQUFQO0FBM0N3QjtBQTRDekI7QUEzTVE7O0FBOE1YdUMsT0FBT0MsT0FBUCxHQUFpQjFGLElBQWpCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyBleHRuYW1lLCByZXNvbHZlIH0gPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgncXMnKTtcbmNvbnN0IEJvb20gPSByZXF1aXJlKCdib29tJyk7XG5jb25zdCBzID0gcmVxdWlyZSgndW5kZXJzY29yZS5zdHJpbmcnKTtcbmNvbnN0IHsgaXNFbXB0eSwgc29ydEJ5LCBldmVyeSwgaXNGdW5jdGlvbiB9ID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCB7IGdldExhbmd1YWdlIH0gPSByZXF1aXJlKCdjb3VudHJ5LWxhbmd1YWdlJyk7XG5jb25zdCBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcbmNvbnN0IGkxOG4gPSByZXF1aXJlKCdpMThuJyk7XG5jb25zdCBsb2NhbGVzID0gcmVxdWlyZSgnaTE4bi1sb2NhbGVzJyk7XG5jb25zdCBhdXRvQmluZCA9IHJlcXVpcmUoJ2F1dG8tYmluZCcpO1xuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdsYWRqczppMThuJyk7XG5jb25zdCBib29sZWFuID0gcmVxdWlyZSgnYm9vbGVhbicpO1xuXG4vLyBleHBvc2UgZ2xvYmFsXG5pMThuLmFwaSA9IHt9O1xuXG5jbGFzcyBJMThOIHtcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIHBocmFzZXM6IHt9LFxuICAgICAgICBsb2dnZXI6IGNvbnNvbGUsXG4gICAgICAgIGRpcmVjdG9yeTogcmVzb2x2ZSgnbG9jYWxlcycpLFxuICAgICAgICBsb2NhbGVzOiBbJ2VuJywgJ2VzJywgJ3poJ10sXG4gICAgICAgIGNvb2tpZTogJ2xvY2FsZScsXG4gICAgICAgIGluZGVudDogJyAgJyxcbiAgICAgICAgZGVmYXVsdExvY2FsZTogJ2VuJyxcbiAgICAgICAgc3luY0ZpbGVzOiBib29sZWFuKHByb2Nlc3MuZW52LkkxOE5fU1lOQ19GSUxFUyksXG4gICAgICAgIGF1dG9SZWxvYWQ6IGJvb2xlYW4ocHJvY2Vzcy5lbnYuSTE4Tl9BVVRPX1JFTE9BRCksXG4gICAgICAgIHVwZGF0ZUZpbGVzOiBib29sZWFuKHByb2Nlc3MuZW52LkkxOE5fVVBEQVRFX0ZJTEVTKSxcbiAgICAgICAgYXBpOiB7XG4gICAgICAgICAgX186ICd0JyxcbiAgICAgICAgICBfX246ICd0bicsXG4gICAgICAgICAgX19sOiAndGwnLFxuICAgICAgICAgIF9faDogJ3RoJyxcbiAgICAgICAgICBfX21mOiAndG1mJ1xuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlcjogaTE4bi5hcGlcbiAgICAgIH0sXG4gICAgICBjb25maWdcbiAgICApO1xuXG4gICAgY29uc3QgeyBsb2dnZXIgfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgdGhpcy5jb25maWcubG9nRGVidWdGbiA9IGxvZ2dlci5kZWJ1ZztcbiAgICB0aGlzLmNvbmZpZy5sb2dXYXJuRm4gPSBsb2dnZXIud2FybjtcbiAgICB0aGlzLmNvbmZpZy5sb2dFcnJvckZuID0gbG9nZ2VyLmVycm9yO1xuXG4gICAgLy8gdmFsaWRhdGUgbG9jYWxlcyBhZ2FpbnN0IGF2YWlsYWJsZSBvbmVzXG4gICAgaWYgKCFldmVyeSh0aGlzLmNvbmZpZy5sb2NhbGVzLCBsID0+IGxvY2FsZXMuaW5jbHVkZXMobCkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBsb2NhbGVzOiAke3RoaXMuY29uZmlnLmxvY2FsZXNcbiAgICAgICAgICAuZmlsdGVyKHN0ciA9PiAhbG9jYWxlcy5pbmNsdWRlcyhzdHIpKVxuICAgICAgICAgIC5qb2luKCcsICcpfWBcbiAgICAgICk7XG5cbiAgICAvLyBpbmhlcml0IGkxOG4gb2JqZWN0XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpMThuKTtcblxuICAgIC8vIGNvbmZpZ3VyZSBpMThuXG4gICAgdGhpcy5jb25maWd1cmUodGhpcy5jb25maWcpO1xuXG4gICAgYXV0b0JpbmQodGhpcyk7XG4gIH1cblxuICB0cmFuc2xhdGUoa2V5LCBsb2NhbGUpIHtcbiAgICBjb25zdCB7IGxvZ2dlciwgcGhyYXNlcyB9ID0gdGhpcy5jb25maWc7XG4gICAgbGV0IGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpXG4gICAgICAubWFwKGtleSA9PiBhcmd1bWVudHNba2V5XSlcbiAgICAgIC5zbGljZSgyKTtcbiAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICd1bmRlZmluZWQnKSBhcmdzID0gW107XG4gICAgY29uc3QgcGhyYXNlID0gcGhyYXNlc1trZXldO1xuICAgIGlmICh0eXBlb2YgcGhyYXNlICE9PSAnc3RyaW5nJykge1xuICAgICAgbG9nZ2VyLndhcm4oYHRyYW5zbGF0aW9uIGtleSBtaXNzaW5nOiAke2tleX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJncyA9IFt7IHBocmFzZSwgbG9jYWxlIH0sIC4uLmFyZ3NdO1xuICAgIHJldHVybiBpMThuLmFwaS50KC4uLmFyZ3MpO1xuICB9XG5cbiAgbWlkZGxld2FyZShjdHgsIG5leHQpIHtcbiAgICBjb25zdCB7IGxvY2FsZXMsIGRlZmF1bHRMb2NhbGUsIHBocmFzZXMsIGNvb2tpZSB9ID0gdGhpcy5jb25maWc7XG5cbiAgICAvLyBleHBvc2UgYXBpIG1ldGhvZHMgdG8gYGN0eC5yZXFgIGFuZCBgY3R4LnN0YXRlYFxuICAgIGkxOG4uaW5pdChjdHgucmVxLCBjdHguc3RhdGUpO1xuXG4gICAgLy8gZXhwb3NlIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGBjdHguc3RhdGUubGBcbiAgICAvLyB3aGljaCBwcmVmaXhlcyBhIGxpbmsvcGF0aCB3aXRoIHRoZSBsb2NhbGVcbiAgICBjdHguc3RhdGUubCA9IChwYXRoID0gJycpID0+IHtcbiAgICAgIHJldHVybiBgLyR7Y3R4LnN0YXRlLmxvY2FsZX0ke3BhdGh9YDtcbiAgICB9O1xuXG4gICAgLy8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIGxvY2FsZSBkZXRlY3Rpb24gd2l0aCBvdXIgb3duXG4gICAgLy8gaW4gb3JkZXIgb2YgcHJpb3JpdHk6XG4gICAgLy9cbiAgICAvLyAxLiBjaGVjayB0aGUgVVJMLCBpZiA9PT0gYC9kZWAgb3Igc3RhcnRzIHdpdGggYC9kZS9gIHRoZW4gbG9jYWxlIGlzIGBkZWBcbiAgICAvLyAyLiBjaGVjayB0aGUgY29va2llXG4gICAgLy8gMy4gY2hlY2sgQWNjZXB0LUxhbmd1YWdlIGxhc3RcbiAgICAvL1xuICAgIC8vIGFsc28gd2UgbmVlZCB0byBleHBvc2UgYGN0eC5wYXRoV2l0aG91dExvY2FsZWBcbiAgICAvLyBhcyB0aGUgcGF0aCB3aXRob3V0IGxvY2FsZVxuXG4gICAgbGV0IGxvY2FsZSA9IGxvY2FsZXMuZmluZChsID0+IHtcbiAgICAgIHJldHVybiBgLyR7bH1gID09PSBjdHgucGF0aCB8fCBjdHgucGF0aC5pbmRleE9mKGAvJHtsfS9gKSA9PT0gMDtcbiAgICB9KTtcblxuICAgIGN0eC5wYXRoV2l0aG91dExvY2FsZSA9IGxvY2FsZVxuICAgICAgPyBjdHgucGF0aC5zdWJzdHJpbmcoYC8ke2xvY2FsZX1gLmxlbmd0aClcbiAgICAgIDogY3R4LnBhdGg7XG4gICAgaWYgKGN0eC5wYXRoV2l0aG91dExvY2FsZSA9PT0gJycpIGN0eC5wYXRoV2l0aG91dExvY2FsZSA9ICcvJztcblxuICAgIGlmICghbG9jYWxlKSB7XG4gICAgICBsb2NhbGUgPSBkZWZhdWx0TG9jYWxlO1xuICAgICAgaWYgKFxuICAgICAgICBjdHguY29va2llcy5nZXQoY29va2llKSAmJlxuICAgICAgICBsb2NhbGVzLmluY2x1ZGVzKGN0eC5jb29raWVzLmdldChjb29raWUpKVxuICAgICAgKSB7XG4gICAgICAgIGxvY2FsZSA9IGN0eC5jb29raWVzLmdldChjb29raWUpO1xuICAgICAgICBkZWJ1ZygnZm91bmQgbG9jYWxlIHZpYSBjb29raWUgdXNpbmcgJXMnLCBsb2NhbGUpO1xuICAgICAgfSBlbHNlIGlmIChjdHgucmVxdWVzdC5hY2NlcHRzTGFuZ3VhZ2VzKGxvY2FsZXMpKSB7XG4gICAgICAgIGxvY2FsZSA9IGN0eC5yZXF1ZXN0LmFjY2VwdHNMYW5ndWFnZXMobG9jYWxlcyk7XG4gICAgICAgIGRlYnVnKCdmb3VuZCBsb2NhbGUgdmlhIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgdXNpbmcgJXMnLCBsb2NhbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbG9jYWxlIHByb3Blcmx5XG4gICAgaTE4bi5zZXRMb2NhbGUoW2N0eC5yZXEsIGN0eC5zdGF0ZV0sIGxvY2FsZSk7XG4gICAgY3R4LmxvY2FsZSA9IGN0eC5yZXEubG9jYWxlO1xuXG4gICAgLy8gaWYgdGhlIGxvY2FsZSB3YXMgbm90IGF2YWlsYWJsZSB0aGVuIHJlZGlyZWN0IHVzZXJcbiAgICBpZiAobG9jYWxlICE9PSBjdHguc3RhdGUubG9jYWxlKVxuICAgICAgcmV0dXJuIGN0eC5yZWRpcmVjdChcbiAgICAgICAgYC8ke2N0eC5zdGF0ZS5sb2NhbGV9JHtjdHgucGF0aFdpdGhvdXRMb2NhbGV9JHtpc0VtcHR5KGN0eC5xdWVyeSlcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiBgPyR7c3RyaW5naWZ5KGN0eC5xdWVyeSl9YH1gXG4gICAgICApO1xuXG4gICAgLy8gYXZhaWxhYmxlIGxhbmd1YWdlcyBmb3IgYSBkcm9wZG93biBtZW51IHRvIGNoYW5nZSBsYW5ndWFnZVxuICAgIGN0eC5zdGF0ZS5hdmFpbGFibGVMYW5ndWFnZXMgPSBzb3J0QnkoXG4gICAgICBsb2NhbGVzLm1hcChsb2NhbGUgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICB1cmw6IGAvJHtsb2NhbGV9JHtjdHgucGF0aFdpdGhvdXRMb2NhbGV9JHtpc0VtcHR5KGN0eC5xdWVyeSlcbiAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgIDogYD8ke3N0cmluZ2lmeShjdHgucXVlcnkpfWB9YCxcbiAgICAgICAgICBuYW1lOiBnZXRMYW5ndWFnZShsb2NhbGUpLm5hbWVbMF1cbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgJ25hbWUnXG4gICAgKTtcblxuICAgIC8vIGdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBsb2NhbGUncyBsYW5ndWFnZSBpbiBuYXRpdmUgbGFuZ3VhZ2VcbiAgICBjdHguc3RhdGUuY3VycmVudExhbmd1YWdlID0gcy50aXRsZWl6ZShcbiAgICAgIGdldExhbmd1YWdlKGN0eC5yZXEubG9jYWxlKS5uYXRpdmVOYW1lWzBdXG4gICAgKTtcblxuICAgIC8vIGJpbmQgYGN0eC50cmFuc2xhdGVgIGFzIGEgaGVscGVyIGZ1bmNcbiAgICAvLyBzbyB5b3UgY2FuIHBhc3MgYGN0eC50cmFuc2xhdGUoJ1NPTUVfS0VZX0lOX0NPTkZJRycpO2AgYW5kIGl0IHdpbGwgbG9va3VwXG4gICAgLy8gYHBocmFzZXNbJ1NPTUVUSElORyddYCB0byBnZXQgYSBzcGVjaWZpYyBhbmQgY29uc3RhbnQgbWVzc2FnZVxuICAgIC8vIGFuZCB0aGVuIGl0IHdpbGwgY2FsbCBgdGAgdG8gdHJhbnNsYXRlIGl0IHRvIHRoZSB1c2VyJ3MgbG9jYWxlXG4gICAgY3R4LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgYXJndW1lbnRzWzBdICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlb2YgcGhyYXNlc1thcmd1bWVudHNbMF1dICE9PSAnc3RyaW5nJ1xuICAgICAgKVxuICAgICAgICByZXR1cm4gY3R4LnRocm93KFxuICAgICAgICAgIEJvb20uYmFkUmVxdWVzdCgnVHJhbnNsYXRpb24gZm9yIHlvdXIgbG9jYWxlIGZhaWxlZCwgdHJ5IGFnYWluJylcbiAgICAgICAgKTtcbiAgICAgIGFyZ3VtZW50c1swXSA9IHBocmFzZXNbYXJndW1lbnRzWzBdXTtcbiAgICAgIHJldHVybiBjdHgucmVxLnQoLi4uYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZGlyZWN0KGN0eCwgbmV4dCkge1xuICAgIGRlYnVnKCdhdHRlbXB0aW5nIHRvIHJlZGlyZWN0Jyk7XG4gICAgLy8gZG8gbm90IHJlZGlyZWN0IHN0YXRpYyBwYXRoc1xuICAgIGlmIChleHRuYW1lKGN0eC5wYXRoKSAhPT0gJycpIHJldHVybiBuZXh0KCk7XG5cbiAgICAvLyBpbnNwaXJlZCBieSBub2RlanMub3JnIGxhbmd1YWdlIHN1cHBvcnRcbiAgICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlanMub3JnL2NvbW1pdC9kNmNkZDk0MmE4ZmMwZmZmY2Y2ODc5ZWNhMTI0Mjk1ZTk1OTkxYmJjI2RpZmYtNzhjMTJmNWFkYzE4NDhkMTNiMWM2ZjA3MDU1ZDk5NmVSNTk+XG4gICAgY29uc3QgbG9jYWxlID0gY3R4LnVybC5zcGxpdCgnLycpWzFdLnNwbGl0KCc/JylbMF07XG4gICAgY29uc3QgaGFzTGFuZyA9IHRoaXMuY29uZmlnLmxvY2FsZXMuaW5jbHVkZXMobG9jYWxlKTtcblxuICAgIC8vIGlmIHRoZSBVUkwgZGlkIG5vdCBoYXZlIGEgdmFsaWQgbGFuZ3VhZ2UgZm91bmRcbiAgICAvLyB0aGVuIHJlZGlyZWN0IHRoZSB1c2VyIHRvIHRoZWlyIGRldGVjdGVkIGxvY2FsZVxuICAgIGlmICghaGFzTGFuZykge1xuICAgICAgY3R4LnN0YXR1cyA9IDMwMjtcbiAgICAgIGxldCByZWRpcmVjdCA9IGAvJHtjdHgucmVxLmxvY2FsZX0ke2N0eC51cmx9YDtcbiAgICAgIGlmICghaXNFbXB0eShjdHgucXVlcnkpKSByZWRpcmVjdCArPSBgPyR7c3RyaW5naWZ5KGN0eC5xdWVyeSl9YDtcbiAgICAgIGRlYnVnKCdubyB2YWxpZCBsb2NhbGUgZm91bmQgaW4gVVJMLCByZWRpcmVjdGluZyB0byAlcycsIHJlZGlyZWN0KTtcbiAgICAgIHJldHVybiBjdHgucmVkaXJlY3QocmVkaXJlY3QpO1xuICAgIH1cblxuICAgIGRlYnVnKCdmb3VuZCB2YWxpZCBsYW5ndWFnZSBcIiVzXCInLCBsb2NhbGUpO1xuXG4gICAgLy8gc2V0IHRoZSBjb29raWUgZm9yIGZ1dHVyZSByZXF1ZXN0c1xuICAgIGN0eC5jb29raWVzLnNldCh0aGlzLmNvbmZpZy5jb29raWUsIGxvY2FsZSwge1xuICAgICAgLy8gRGlzYWJsZSBzaWduZWQgY29va2llcyBpbiBOT0RFX0VOVj10ZXN0XG4gICAgICBzaWduZWQ6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcsXG4gICAgICBleHBpcmVzOiBtb21lbnQoKVxuICAgICAgICAuYWRkKDEsICd5ZWFyJylcbiAgICAgICAgLnRvRGF0ZSgpXG4gICAgfSk7XG4gICAgZGVidWcoJ3NldCBjb29raWVzIGZvciBsb2NhbGUgXCIlc1wiJywgbG9jYWxlKTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbiBhbmQgY3R4LmlzQXV0aGVudGljYXRlZCgpIGV4aXN0cyxcbiAgICAvLyB0aGVuIHNhdmUgaXQgYXMgYGxhc3RfbG9jYWxlYFxuICAgIGlmIChpc0Z1bmN0aW9uKGN0eC5pc0F1dGhlbnRpY2F0ZWQpICYmIGN0eC5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgY3R4LnN0YXRlLnVzZXIubGFzdF9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdHguc3RhdGUudXNlci5zYXZlKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmVycm9yKGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEkxOE47XG4iXX0=

@@ -1,1 +0,3 @@

{}
{
"hello": "hello"
}

@@ -1,1 +0,3 @@

{}
{
"hello": "hello"
}

@@ -1,1 +0,3 @@

{}
{
"hello": "hello"
}
{
"name": "@ladjs/i18n",
"description": "i18n wrapper and Koa middleware for Lad",
"version": "0.1.2",
"version": "0.2.0",
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com/)",

@@ -15,3 +15,4 @@ "bugs": {

"auto-bind": "^1.1.0",
"boom": "^7.1.1",
"boolean": "^0.1.3",
"boom": "5.2.0",
"country-language": "^0.1.7",

@@ -31,2 +32,3 @@ "i18n": "^0.8.3",

"cross-env": "^5.0.5",
"debug": "^3.1.0",
"eslint": "^4.5.0",

@@ -36,2 +38,4 @@ "eslint-config-prettier": "^2.3.0",

"husky": "^0.14.3",
"koa": "^2.4.1",
"koa-generic-session": "^2.0.0",
"lint-staged": "^6.0.0",

@@ -42,2 +46,4 @@ "nyc": "^11.1.0",

"remark-preset-github": "^0.0.7",
"sinon": "^4.1.3",
"supertest": "^3.0.0",
"xo": "^0.19.0"

@@ -44,0 +50,0 @@ },

@@ -112,5 +112,8 @@ # [**@ladjs/i18n**](https://github.com/ladjs/i18n)

defaultLocale: 'en',
syncFiles: true,
autoReload: true,
updateFiles: true,
// uses truthy `process.env.I18N_SYNC_FILES`
syncFiles: false,
// uses truthy `process.env.I18N_AUTO_RELOAD`
autoReload: false,
// uses truthy `process.env.I18N_UPDATE_FILES`
updateFiles: false,
api: {

@@ -117,0 +120,0 @@ __: 't',

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc