diff options
| author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2019-10-06 21:37:45 +0200 | 
|---|---|---|
| committer | Dimitri Staessens <dimitri@ouroboros.rocks> | 2019-10-06 21:37:45 +0200 | 
| commit | 3c51c3be85bb0d1bdb87ea0d6632f1c256912f27 (patch) | |
| tree | c7ccc8279b12c4f7bdbbb4270d617e48f51722e4 /node_modules/y18n | |
| parent | 412c104bebc507bea9c94fd53b5bdc4b64cbfe31 (diff) | |
| download | website-3c51c3be85bb0d1bdb87ea0d6632f1c256912f27.tar.gz website-3c51c3be85bb0d1bdb87ea0d6632f1c256912f27.zip | |
build: Add some required modules for node
Diffstat (limited to 'node_modules/y18n')
| -rw-r--r-- | node_modules/y18n/LICENSE | 13 | ||||
| -rw-r--r-- | node_modules/y18n/README.md | 91 | ||||
| -rw-r--r-- | node_modules/y18n/index.js | 172 | ||||
| -rw-r--r-- | node_modules/y18n/package.json | 69 | 
4 files changed, 345 insertions, 0 deletions
| diff --git a/node_modules/y18n/LICENSE b/node_modules/y18n/LICENSE new file mode 100644 index 0000000..3c157f0 --- /dev/null +++ b/node_modules/y18n/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. diff --git a/node_modules/y18n/README.md b/node_modules/y18n/README.md new file mode 100644 index 0000000..9859458 --- /dev/null +++ b/node_modules/y18n/README.md @@ -0,0 +1,91 @@ +# y18n + +[![Build Status][travis-image]][travis-url] +[![Coverage Status][coveralls-image]][coveralls-url] +[![NPM version][npm-image]][npm-url] +[![js-standard-style][standard-image]][standard-url] + +The bare-bones internationalization library used by yargs. + +Inspired by [i18n](https://www.npmjs.com/package/i18n). + +## Examples + +_simple string translation:_ + +```js +var __ = require('y18n').__ + +console.log(__('my awesome string %s', 'foo')) +``` + +output: + +`my awesome string foo` + +_pluralization support:_ + +```js +var __n = require('y18n').__n + +console.log(__n('one fish %s', '%d fishes %s', 2, 'foo')) +``` + +output: + +`2 fishes foo` + +## JSON Language Files + +The JSON language files should be stored in a `./locales` folder. +File names correspond to locales, e.g., `en.json`, `pirate.json`. + +When strings are observed for the first time they will be +added to the JSON file corresponding to the current locale. + +## Methods + +### require('y18n')(config) + +Create an instance of y18n with the config provided, options include: + +* `directory`: the locale directory, default `./locales`. +* `updateFiles`: should newly observed strings be updated in file, default `true`. +* `locale`: what locale should be used. +* `fallbackToLanguage`: should fallback to a language-only file (e.g. `en.json`) +  be allowed if a file matching the locale does not exist (e.g. `en_US.json`), +  default `true`. + +### y18n.\_\_(str, arg, arg, arg) + +Print a localized string, `%s` will be replaced with `arg`s. + +### y18n.\_\_n(singularString, pluralString, count, arg, arg, arg) + +Print a localized string with appropriate pluralization. If `%d` is provided +in the string, the `count` will replace this placeholder. + +### y18n.setLocale(str) + +Set the current locale being used. + +### y18n.getLocale() + +What locale is currently being used? + +### y18n.updateLocale(obj) + +Update the current locale with the key value pairs in `obj`. + +## License + +ISC + +[travis-url]: https://travis-ci.org/yargs/y18n +[travis-image]: https://img.shields.io/travis/yargs/y18n.svg +[coveralls-url]: https://coveralls.io/github/yargs/y18n +[coveralls-image]: https://img.shields.io/coveralls/yargs/y18n.svg +[npm-url]: https://npmjs.org/package/y18n +[npm-image]: https://img.shields.io/npm/v/y18n.svg +[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg +[standard-url]: https://github.com/feross/standard diff --git a/node_modules/y18n/index.js b/node_modules/y18n/index.js new file mode 100644 index 0000000..91b159e --- /dev/null +++ b/node_modules/y18n/index.js @@ -0,0 +1,172 @@ +var fs = require('fs') +var path = require('path') +var util = require('util') + +function Y18N (opts) { +  // configurable options. +  opts = opts || {} +  this.directory = opts.directory || './locales' +  this.updateFiles = typeof opts.updateFiles === 'boolean' ? opts.updateFiles : true +  this.locale = opts.locale || 'en' +  this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true + +  // internal stuff. +  this.cache = {} +  this.writeQueue = [] +} + +Y18N.prototype.__ = function () { +  var args = Array.prototype.slice.call(arguments) +  var str = args.shift() +  var cb = function () {} // start with noop. + +  if (typeof args[args.length - 1] === 'function') cb = args.pop() +  cb = cb || function () {} // noop. + +  if (!this.cache[this.locale]) this._readLocaleFile() + +  // we've observed a new string, update the language file. +  if (!this.cache[this.locale][str] && this.updateFiles) { +    this.cache[this.locale][str] = str + +    // include the current directory and locale, +    // since these values could change before the +    // write is performed. +    this._enqueueWrite([this.directory, this.locale, cb]) +  } else { +    cb() +  } + +  return util.format.apply(util, [this.cache[this.locale][str] || str].concat(args)) +} + +Y18N.prototype._enqueueWrite = function (work) { +  this.writeQueue.push(work) +  if (this.writeQueue.length === 1) this._processWriteQueue() +} + +Y18N.prototype._processWriteQueue = function () { +  var _this = this +  var work = this.writeQueue[0] + +  // destructure the enqueued work. +  var directory = work[0] +  var locale = work[1] +  var cb = work[2] + +  var languageFile = this._resolveLocaleFile(directory, locale) +  var serializedLocale = JSON.stringify(this.cache[locale], null, 2) + +  fs.writeFile(languageFile, serializedLocale, 'utf-8', function (err) { +    _this.writeQueue.shift() +    if (_this.writeQueue.length > 0) _this._processWriteQueue() +    cb(err) +  }) +} + +Y18N.prototype._readLocaleFile = function () { +  var localeLookup = {} +  var languageFile = this._resolveLocaleFile(this.directory, this.locale) + +  try { +    localeLookup = JSON.parse(fs.readFileSync(languageFile, 'utf-8')) +  } catch (err) { +    if (err instanceof SyntaxError) { +      err.message = 'syntax error in ' + languageFile +    } + +    if (err.code === 'ENOENT') localeLookup = {} +    else throw err +  } + +  this.cache[this.locale] = localeLookup +} + +Y18N.prototype._resolveLocaleFile = function (directory, locale) { +  var file = path.resolve(directory, './', locale + '.json') +  if (this.fallbackToLanguage && !this._fileExistsSync(file) && ~locale.lastIndexOf('_')) { +    // attempt fallback to language only +    var languageFile = path.resolve(directory, './', locale.split('_')[0] + '.json') +    if (this._fileExistsSync(languageFile)) file = languageFile +  } +  return file +} + +// this only exists because fs.existsSync() "will be deprecated" +// see https://nodejs.org/api/fs.html#fs_fs_existssync_path +Y18N.prototype._fileExistsSync = function (file) { +  try { +    return fs.statSync(file).isFile() +  } catch (err) { +    return false +  } +} + +Y18N.prototype.__n = function () { +  var args = Array.prototype.slice.call(arguments) +  var singular = args.shift() +  var plural = args.shift() +  var quantity = args.shift() + +  var cb = function () {} // start with noop. +  if (typeof args[args.length - 1] === 'function') cb = args.pop() + +  if (!this.cache[this.locale]) this._readLocaleFile() + +  var str = quantity === 1 ? singular : plural +  if (this.cache[this.locale][singular]) { +    str = this.cache[this.locale][singular][quantity === 1 ? 'one' : 'other'] +  } + +  // we've observed a new string, update the language file. +  if (!this.cache[this.locale][singular] && this.updateFiles) { +    this.cache[this.locale][singular] = { +      one: singular, +      other: plural +    } + +    // include the current directory and locale, +    // since these values could change before the +    // write is performed. +    this._enqueueWrite([this.directory, this.locale, cb]) +  } else { +    cb() +  } + +  // if a %d placeholder is provided, add quantity +  // to the arguments expanded by util.format. +  var values = [str] +  if (~str.indexOf('%d')) values.push(quantity) + +  return util.format.apply(util, values.concat(args)) +} + +Y18N.prototype.setLocale = function (locale) { +  this.locale = locale +} + +Y18N.prototype.getLocale = function () { +  return this.locale +} + +Y18N.prototype.updateLocale = function (obj) { +  if (!this.cache[this.locale]) this._readLocaleFile() + +  for (var key in obj) { +    this.cache[this.locale][key] = obj[key] +  } +} + +module.exports = function (opts) { +  var y18n = new Y18N(opts) + +  // bind all functions to y18n, so that +  // they can be used in isolation. +  for (var key in y18n) { +    if (typeof y18n[key] === 'function') { +      y18n[key] = y18n[key].bind(y18n) +    } +  } + +  return y18n +} diff --git a/node_modules/y18n/package.json b/node_modules/y18n/package.json new file mode 100644 index 0000000..915671a --- /dev/null +++ b/node_modules/y18n/package.json @@ -0,0 +1,69 @@ +{ +  "_args": [ +    [ +      "y18n@3.2.1", +      "/home/dstaesse/git/website" +    ] +  ], +  "_development": true, +  "_from": "y18n@3.2.1", +  "_id": "y18n@3.2.1", +  "_inBundle": false, +  "_integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", +  "_location": "/y18n", +  "_phantomChildren": {}, +  "_requested": { +    "type": "version", +    "registry": true, +    "raw": "y18n@3.2.1", +    "name": "y18n", +    "escapedName": "y18n", +    "rawSpec": "3.2.1", +    "saveSpec": null, +    "fetchSpec": "3.2.1" +  }, +  "_requiredBy": [ +    "/yargs" +  ], +  "_resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", +  "_spec": "3.2.1", +  "_where": "/home/dstaesse/git/website", +  "author": { +    "name": "Ben Coe", +    "email": "ben@npmjs.com" +  }, +  "bugs": { +    "url": "https://github.com/yargs/y18n/issues" +  }, +  "description": "the bare-bones internationalization library used by yargs", +  "devDependencies": { +    "chai": "^3.4.1", +    "coveralls": "^2.11.6", +    "mocha": "^2.3.4", +    "nyc": "^6.1.1", +    "rimraf": "^2.5.0", +    "standard": "^5.4.1" +  }, +  "files": [ +    "index.js" +  ], +  "homepage": "https://github.com/yargs/y18n", +  "keywords": [ +    "i18n", +    "internationalization", +    "yargs" +  ], +  "license": "ISC", +  "main": "index.js", +  "name": "y18n", +  "repository": { +    "type": "git", +    "url": "git+ssh://git@github.com/yargs/y18n.git" +  }, +  "scripts": { +    "coverage": "nyc report --reporter=text-lcov | coveralls", +    "pretest": "standard", +    "test": "nyc mocha" +  }, +  "version": "3.2.1" +} | 
