lxy il y a 2 ans
Parent
commit
dbfac8f913
100 fichiers modifiés avec 8642 ajouts et 0 suppressions
  1. 21 0
      RNCode/node_modules/object.hasown/LICENSE
  2. 51 0
      RNCode/node_modules/object.hasown/README.md
  3. 3 0
      RNCode/node_modules/object.hasown/auto.js
  4. 11 0
      RNCode/node_modules/object.hasown/implementation.js
  5. 18 0
      RNCode/node_modules/object.hasown/index.js
  6. 9 0
      RNCode/node_modules/object.hasown/index.mjs
  7. 88 0
      RNCode/node_modules/object.hasown/package.json
  8. 7 0
      RNCode/node_modules/object.hasown/polyfill.js
  9. 14 0
      RNCode/node_modules/object.hasown/shim.js
  10. 20 0
      RNCode/node_modules/object.hasown/test/implementation.js
  11. 11 0
      RNCode/node_modules/object.hasown/test/index.js
  12. 24 0
      RNCode/node_modules/object.hasown/test/index.mjs
  13. 36 0
      RNCode/node_modules/object.hasown/test/shimmed.js
  14. 36 0
      RNCode/node_modules/object.hasown/test/tests.js
  15. 21 0
      RNCode/node_modules/object.pick/LICENSE
  16. 76 0
      RNCode/node_modules/object.pick/README.md
  17. 35 0
      RNCode/node_modules/object.pick/index.js
  18. 60 0
      RNCode/node_modules/object.pick/package.json
  19. 20 0
      RNCode/node_modules/object.values/.editorconfig
  20. 11 0
      RNCode/node_modules/object.values/.eslintrc
  21. 9 0
      RNCode/node_modules/object.values/.nycrc
  22. 172 0
      RNCode/node_modules/object.values/CHANGELOG.md
  23. 22 0
      RNCode/node_modules/object.values/LICENSE
  24. 58 0
      RNCode/node_modules/object.values/README.md
  25. 3 0
      RNCode/node_modules/object.values/auto.js
  26. 18 0
      RNCode/node_modules/object.values/implementation.js
  27. 18 0
      RNCode/node_modules/object.values/index.js
  28. 98 0
      RNCode/node_modules/object.values/package.json
  29. 7 0
      RNCode/node_modules/object.values/polyfill.js
  30. 14 0
      RNCode/node_modules/object.values/shim.js
  31. 11 0
      RNCode/node_modules/object.values/test/.eslintrc
  32. 20 0
      RNCode/node_modules/object.values/test/implementation.js
  33. 17 0
      RNCode/node_modules/object.values/test/index.js
  34. 35 0
      RNCode/node_modules/object.values/test/shimmed.js
  35. 82 0
      RNCode/node_modules/object.values/test/tests.js
  36. 98 0
      RNCode/node_modules/on-finished/HISTORY.md
  37. 23 0
      RNCode/node_modules/on-finished/LICENSE
  38. 162 0
      RNCode/node_modules/on-finished/README.md
  39. 234 0
      RNCode/node_modules/on-finished/index.js
  40. 39 0
      RNCode/node_modules/on-finished/package.json
  41. 21 0
      RNCode/node_modules/on-headers/HISTORY.md
  42. 22 0
      RNCode/node_modules/on-headers/LICENSE
  43. 81 0
      RNCode/node_modules/on-headers/README.md
  44. 132 0
      RNCode/node_modules/on-headers/index.js
  45. 42 0
      RNCode/node_modules/on-headers/package.json
  46. 15 0
      RNCode/node_modules/once/LICENSE
  47. 79 0
      RNCode/node_modules/once/README.md
  48. 42 0
      RNCode/node_modules/once/once.js
  49. 33 0
      RNCode/node_modules/once/package.json
  50. 64 0
      RNCode/node_modules/onetime/index.d.ts
  51. 44 0
      RNCode/node_modules/onetime/index.js
  52. 9 0
      RNCode/node_modules/onetime/license
  53. 43 0
      RNCode/node_modules/onetime/package.json
  54. 94 0
      RNCode/node_modules/onetime/readme.md
  55. 70 0
      RNCode/node_modules/open/index.d.ts
  56. 134 0
      RNCode/node_modules/open/index.js
  57. 9 0
      RNCode/node_modules/open/license
  58. 58 0
      RNCode/node_modules/open/package.json
  59. 113 0
      RNCode/node_modules/open/readme.md
  60. 1066 0
      RNCode/node_modules/open/xdg-open
  61. 59 0
      RNCode/node_modules/optionator/CHANGELOG.md
  62. 22 0
      RNCode/node_modules/optionator/LICENSE
  63. 238 0
      RNCode/node_modules/optionator/README.md
  64. 260 0
      RNCode/node_modules/optionator/lib/help.js
  65. 465 0
      RNCode/node_modules/optionator/lib/index.js
  66. 54 0
      RNCode/node_modules/optionator/lib/util.js
  67. 108 0
      RNCode/node_modules/optionator/node_modules/prelude-ls/CHANGELOG.md
  68. 22 0
      RNCode/node_modules/optionator/node_modules/prelude-ls/LICENSE
  69. 15 0
      RNCode/node_modules/optionator/node_modules/prelude-ls/README.md
  70. 69 0
      RNCode/node_modules/optionator/node_modules/prelude-ls/lib/Func.js
  71. 716 0
      RNCode/node_modules/optionator/node_modules/prelude-ls/lib/List.js
  72. 130 0
      RNCode/node_modules/optionator/node_modules/prelude-ls/lib/Num.js
  73. 154 0
      RNCode/node_modules/optionator/node_modules/prelude-ls/lib/Obj.js
  74. 92 0
      RNCode/node_modules/optionator/node_modules/prelude-ls/lib/Str.js
  75. 178 0
      RNCode/node_modules/optionator/node_modules/prelude-ls/lib/index.js
  76. 46 0
      RNCode/node_modules/optionator/node_modules/prelude-ls/package.json
  77. 22 0
      RNCode/node_modules/optionator/node_modules/type-check/LICENSE
  78. 210 0
      RNCode/node_modules/optionator/node_modules/type-check/README.md
  79. 128 0
      RNCode/node_modules/optionator/node_modules/type-check/lib/check.js
  80. 16 0
      RNCode/node_modules/optionator/node_modules/type-check/lib/index.js
  81. 198 0
      RNCode/node_modules/optionator/node_modules/type-check/lib/parse-type.js
  82. 39 0
      RNCode/node_modules/optionator/node_modules/type-check/package.json
  83. 43 0
      RNCode/node_modules/optionator/package.json
  84. 7 0
      RNCode/node_modules/options/.npmignore
  85. 12 0
      RNCode/node_modules/options/Makefile
  86. 69 0
      RNCode/node_modules/options/README.md
  87. 86 0
      RNCode/node_modules/options/lib/options.js
  88. 21 0
      RNCode/node_modules/options/package.json
  89. 257 0
      RNCode/node_modules/ora/index.d.ts
  90. 246 0
      RNCode/node_modules/ora/index.js
  91. 9 0
      RNCode/node_modules/ora/license
  92. 14 0
      RNCode/node_modules/ora/node_modules/ansi-regex/index.js
  93. 9 0
      RNCode/node_modules/ora/node_modules/ansi-regex/license
  94. 53 0
      RNCode/node_modules/ora/node_modules/ansi-regex/package.json
  95. 87 0
      RNCode/node_modules/ora/node_modules/ansi-regex/readme.md
  96. 165 0
      RNCode/node_modules/ora/node_modules/ansi-styles/index.js
  97. 9 0
      RNCode/node_modules/ora/node_modules/ansi-styles/license
  98. 56 0
      RNCode/node_modules/ora/node_modules/ansi-styles/package.json
  99. 147 0
      RNCode/node_modules/ora/node_modules/ansi-styles/readme.md
  100. 228 0
      RNCode/node_modules/ora/node_modules/chalk/index.js

+ 21 - 0
RNCode/node_modules/object.hasown/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Glen Mailer, Jordan Harband, and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 51 - 0
RNCode/node_modules/object.hasown/README.md

@@ -0,0 +1,51 @@
+# object.hasown <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
+
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+An ES spec-compliant `Object.hasOwn` shim. Invoke its "shim" method to shim `Object.hasOwn` if it is unavailable or noncompliant.
+
+This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the [spec](https://tc39.es/proposal-accessible-object-hasownproperty/).
+
+Most common usage:
+```js
+var assert = require('assert');
+var hasOwn = require('object.hasown');
+
+var obj = { a: 1, b: 2 };
+
+assert(hasOwn(obj, 'a'));
+assert(hasOwn(obj, 'b'));
+assert('toString' in obj && !hasOwn(obj, 'toString'));
+
+if (!Object.hasOwn) {
+	hasOwn.shim();
+}
+
+assert.deepEqual(Object.hasOwn(obj, 'a'), hasOwn(obj, 'a'));
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[package-url]: https://npmjs.com/package/object.hasown
+[npm-version-svg]: https://versionbadg.es/es-shims/Object.hasOwn.svg
+[deps-svg]: https://david-dm.org/es-shims/Object.hasOwn.svg
+[deps-url]: https://david-dm.org/es-shims/Object.hasOwn
+[dev-deps-svg]: https://david-dm.org/es-shims/Object.hasOwn/dev-status.svg
+[dev-deps-url]: https://david-dm.org/es-shims/Object.hasOwn#info=devDependencies
+[npm-badge-png]: https://nodei.co/npm/object.hasown.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/object.hasown.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/object.hasown.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=object.hasown
+[codecov-image]: https://codecov.io/gh/es-shims/Object.hasOwn/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/es-shims/Object.hasOwn/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/Object.hasOwn
+[actions-url]: https://github.com/es-shims/Object.hasOwn/actions

+ 3 - 0
RNCode/node_modules/object.hasown/auto.js

@@ -0,0 +1,3 @@
+'use strict';
+
+require('./shim')();

+ 11 - 0
RNCode/node_modules/object.hasown/implementation.js

@@ -0,0 +1,11 @@
+'use strict';
+
+var ToObject = require('es-abstract/2022/ToObject');
+var ToPropertyKey = require('es-abstract/2022/ToPropertyKey');
+var HasOwnProperty = require('es-abstract/2022/HasOwnProperty');
+
+module.exports = function hasOwn(O, P) {
+	var obj = ToObject(O);
+	var key = ToPropertyKey(P);
+	return HasOwnProperty(obj, key);
+};

+ 18 - 0
RNCode/node_modules/object.hasown/index.js

@@ -0,0 +1,18 @@
+'use strict';
+
+var define = require('define-properties');
+var callBind = require('call-bind');
+
+var implementation = require('./implementation');
+var getPolyfill = require('./polyfill');
+var shim = require('./shim');
+
+var polyfill = callBind(getPolyfill(), null);
+
+define(polyfill, {
+	getPolyfill: getPolyfill,
+	implementation: implementation,
+	shim: shim
+});
+
+module.exports = polyfill;

+ 9 - 0
RNCode/node_modules/object.hasown/index.mjs

@@ -0,0 +1,9 @@
+import callBind from 'call-bind';
+
+import getPolyfill from 'object.hasown/polyfill';
+
+export default callBind(getPolyfill(), null);
+
+export { default as getPolyfill } from 'object.hasown/polyfill';
+export { default as implementation } from 'object.hasown/implementation';
+export { default as shim } from 'object.hasown/shim';

+ 88 - 0
RNCode/node_modules/object.hasown/package.json

@@ -0,0 +1,88 @@
+{
+	"name": "object.hasown",
+	"version": "1.1.2",
+	"description": "ES spec-compliant shim for Object.hasOwn",
+	"main": "index.js",
+	"exports": {
+		".": [
+			{
+				"import": "./index.mjs",
+				"require": "./index.js",
+				"default": "./index.js"
+			},
+			"./index.js"
+		],
+		"./auto": "./auto.js",
+		"./polyfill": "./polyfill.js",
+		"./implementation": "./implementation.js",
+		"./shim": "./shim.js",
+		"./package.json": "./package.json"
+	},
+	"scripts": {
+		"prepack": "npmignore --auto --commentLines=autogenerated",
+		"prepublish": "not-in-publish || npm run prepublishOnly",
+		"prepublishOnly": "safe-publish-latest",
+		"lint": "eslint --ext=js,mjs .",
+		"postlint": "es-shim-api --bound",
+		"pretest": "npm run lint",
+		"tests-only": "nyc tape 'test/**/*.js'",
+		"tests-esm": "nyc node test/index.mjs",
+		"test": "npm run tests-only && npm run tests-esm",
+		"posttest": "aud --production",
+		"version": "auto-changelog && git add CHANGELOG.md",
+		"postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+	},
+	"repository": {
+		"type": "git",
+		"url": "https://github.com/es-shims/Object.hasOwn.git"
+	},
+	"keywords": [
+		"Object",
+		"hasOwn",
+		"polyfill",
+		"shim",
+		"es-shim API"
+	],
+	"author": "Jordan Harband <ljharb@gmail.com>",
+	"funding": {
+		"url": "https://github.com/sponsors/ljharb"
+	},
+	"license": "MIT",
+	"bugs": {
+		"url": "https://github.com/es-shims/Object.hasOwn/issues"
+	},
+	"homepage": "https://github.com/es-shims/Object.hasOwn",
+	"dependencies": {
+		"define-properties": "^1.1.4",
+		"es-abstract": "^1.20.4"
+	},
+	"devDependencies": {
+		"@es-shims/api": "^2.2.3",
+		"@ljharb/eslint-config": "^21.0.0",
+		"aud": "^2.0.1",
+		"auto-changelog": "^2.4.0",
+		"call-bind": "^1.0.2",
+		"eslint": "=8.8.0",
+		"functions-have-names": "^1.2.3",
+		"has-strict-mode": "^1.0.1",
+		"has-symbols": "^1.0.3",
+		"in-publish": "^2.0.1",
+		"npmignore": "^0.3.0",
+		"nyc": "^10.3.2",
+		"safe-publish-latest": "^2.0.0",
+		"tape": "^5.6.1"
+	},
+	"auto-changelog": {
+		"output": "CHANGELOG.md",
+		"template": "keepachangelog",
+		"unreleased": false,
+		"commitLimit": false,
+		"backfillLimit": false,
+		"hideCredit": true
+	},
+	"publishConfig": {
+		"ignore": [
+			".github/workflows"
+		]
+	}
+}

+ 7 - 0
RNCode/node_modules/object.hasown/polyfill.js

@@ -0,0 +1,7 @@
+'use strict';
+
+var implementation = require('./implementation');
+
+module.exports = function getPolyfill() {
+	return Object.hasOwn || implementation;
+};

+ 14 - 0
RNCode/node_modules/object.hasown/shim.js

@@ -0,0 +1,14 @@
+'use strict';
+
+var getPolyfill = require('./polyfill');
+var define = require('define-properties');
+
+module.exports = function shimObjectHasOwn() {
+	var polyfill = getPolyfill();
+	define(
+		Object,
+		{ hasOwn: polyfill },
+		{ hasOwn: function () { return Object.hasOwn !== polyfill; } }
+	);
+	return polyfill;
+};

+ 20 - 0
RNCode/node_modules/object.hasown/test/implementation.js

@@ -0,0 +1,20 @@
+'use strict';
+
+var hasOwn = require('../implementation');
+var callBind = require('call-bind');
+var test = require('tape');
+var hasStrictMode = require('has-strict-mode')();
+var runTests = require('./tests');
+
+test('as a function', function (t) {
+	t.test('bad array/this value', { skip: !hasStrictMode }, function (st) {
+		/* eslint no-useless-call: 0 */
+		st['throws'](function () { hasOwn.call(undefined); }, TypeError, 'undefined is not an object');
+		st['throws'](function () { hasOwn.call(null); }, TypeError, 'null is not an object');
+		st.end();
+	});
+
+	runTests(callBind(hasOwn, Object), t);
+
+	t.end();
+});

+ 11 - 0
RNCode/node_modules/object.hasown/test/index.js

@@ -0,0 +1,11 @@
+'use strict';
+
+var index = require('../');
+var test = require('tape');
+var runTests = require('./tests');
+
+test('as a function', function (t) {
+	runTests(index, t);
+
+	t.end();
+});

+ 24 - 0
RNCode/node_modules/object.hasown/test/index.mjs

@@ -0,0 +1,24 @@
+import index, * as Module from 'object.hasown';
+import test from 'tape';
+import runTests from './tests.js';
+
+test('as a function', (t) => {
+	runTests(index, t);
+
+	t.end();
+});
+
+test('named exports', async (t) => {
+	t.deepEqual(
+		Object.keys(Module).sort(),
+		['default', 'shim', 'getPolyfill', 'implementation'].sort(),
+		'has expected named exports',
+	);
+
+	const { shim, getPolyfill, implementation } = Module;
+	t.equal((await import('object.hasown/shim')).default, shim, 'shim named export matches deep export');
+	t.equal((await import('object.hasown/implementation')).default, implementation, 'implementation named export matches deep export');
+	t.equal((await import('object.hasown/polyfill')).default, getPolyfill, 'getPolyfill named export matches deep export');
+
+	t.end();
+});

+ 36 - 0
RNCode/node_modules/object.hasown/test/shimmed.js

@@ -0,0 +1,36 @@
+'use strict';
+
+require('../auto');
+
+var test = require('tape');
+var defineProperties = require('define-properties');
+var callBind = require('call-bind');
+
+var isEnumerable = Object.prototype.propertyIsEnumerable;
+var functionsHaveNames = require('functions-have-names')();
+var hasStrictMode = require('has-strict-mode')();
+
+var runTests = require('./tests');
+
+test('shimmed', function (t) {
+	t.equal(Object.hasOwn.length, 2, 'Relect.hasOwn has a length of 2');
+	t.test('Function name', { skip: !functionsHaveNames }, function (st) {
+		st.equal(Object.hasOwn.name, 'hasOwn', 'Object.hasOwn has name "hasOwn"');
+		st.end();
+	});
+
+	t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) {
+		et.equal(false, isEnumerable.call(Object, 'hasOwn'), 'Object.hasOwn is not enumerable');
+		et.end();
+	});
+
+	t.test('bad array/this value', { skip: !hasStrictMode }, function (st) {
+		st['throws'](function () { return Object.hasOwn.call(undefined); }, TypeError, 'undefined is not an object');
+		st['throws'](function () { return Object.hasOwn.call(null); }, TypeError, 'null is not an object');
+		st.end();
+	});
+
+	runTests(callBind(Object.hasOwn, Object), t);
+
+	t.end();
+});

+ 36 - 0
RNCode/node_modules/object.hasown/test/tests.js

@@ -0,0 +1,36 @@
+'use strict';
+
+var hasSymbols = require('has-symbols')();
+
+module.exports = function runTests(hasOwn, t) {
+	var badPropertyKey = { toString: function () { throw new SyntaxError('nope'); } };
+
+	t['throws'](
+		function () { hasOwn(null, badPropertyKey); },
+		TypeError,
+		'checks ToObject first'
+	);
+
+	t['throws'](
+		function () { hasOwn({}, badPropertyKey); },
+		SyntaxError,
+		'checks ToPropertyKey next'
+	);
+
+	var obj = { a: 1 };
+	t.equal('toString' in obj, true, 'object literal has non-own toString');
+	t.equal(hasOwn(obj, 'toString'), false, 'toString is not an own property');
+	t.equal(hasOwn(obj, 'a'), true, 'own property is recognized');
+
+	t.equal(hasOwn([], 'length'), true, 'non-enumerable own property is recognized');
+
+	t.test('Symbols', { skip: !hasSymbols }, function (st) {
+		var o = {};
+		o[Symbol.iterator] = true;
+		st.equal(hasOwn(o, Symbol.iterator), true, 'own symbol is recognized');
+
+		st.equal(hasOwn(Array.prototype, Symbol.iterator), true, 'built-in own symbol is recognized');
+
+		st.end();
+	});
+};

+ 21 - 0
RNCode/node_modules/object.pick/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 76 - 0
RNCode/node_modules/object.pick/README.md

@@ -0,0 +1,76 @@
+# object.pick [![NPM version](https://img.shields.io/npm/v/object.pick.svg?style=flat)](https://www.npmjs.com/package/object.pick) [![NPM monthly downloads](https://img.shields.io/npm/dm/object.pick.svg?style=flat)](https://npmjs.org/package/object.pick)  [![NPM total downloads](https://img.shields.io/npm/dt/object.pick.svg?style=flat)](https://npmjs.org/package/object.pick) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/object.pick.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/object.pick)
+
+> Returns a filtered copy of an object with only the specified keys, similar to `_.pick` from lodash / underscore.
+
+You might also be interested in [object.omit](https://github.com/jonschlinkert/object.omit).
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save object.pick
+```
+
+## benchmarks
+
+This is the [fastest implementation](http://jsperf.com/pick-props) I tested. Pull requests welcome!
+
+## Usage
+
+```js
+var pick = require('object.pick');
+
+pick({a: 'a', b: 'b'}, 'a')
+//=> {a: 'a'}
+
+pick({a: 'a', b: 'b', c: 'c'}, ['a', 'b'])
+//=> {a: 'a', b: 'b'}
+```
+
+## About
+
+### Related projects
+
+* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.")
+* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.")
+* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep "Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone.")
+* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/object.pick/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 27, 2016._

+ 35 - 0
RNCode/node_modules/object.pick/index.js

@@ -0,0 +1,35 @@
+/*!
+ * object.pick <https://github.com/jonschlinkert/object.pick>
+ *
+ * Copyright (c) 2014-2015 Jon Schlinkert, contributors.
+ * Licensed under the MIT License
+ */
+
+'use strict';
+
+var isObject = require('isobject');
+
+module.exports = function pick(obj, keys) {
+  if (!isObject(obj) && typeof obj !== 'function') {
+    return {};
+  }
+
+  var res = {};
+  if (typeof keys === 'string') {
+    if (keys in obj) {
+      res[keys] = obj[keys];
+    }
+    return res;
+  }
+
+  var len = keys.length;
+  var idx = -1;
+
+  while (++idx < len) {
+    var key = keys[idx];
+    if (key in obj) {
+      res[key] = obj[key];
+    }
+  }
+  return res;
+};

+ 60 - 0
RNCode/node_modules/object.pick/package.json

@@ -0,0 +1,60 @@
+{
+  "name": "object.pick",
+  "description": "Returns a filtered copy of an object with only the specified keys, similar to `_.pick` from lodash / underscore.",
+  "version": "1.3.0",
+  "homepage": "https://github.com/jonschlinkert/object.pick",
+  "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+  "repository": "jonschlinkert/object.pick",
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/object.pick/issues"
+  },
+  "license": "MIT",
+  "files": [
+    "index.js"
+  ],
+  "main": "index.js",
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "dependencies": {
+    "isobject": "^3.0.1"
+  },
+  "devDependencies": {
+    "gulp-format-md": "^1.0.0",
+    "mocha": "^3.1.2",
+    "vinyl": "^2.0.0"
+  },
+  "keywords": [
+    "object",
+    "pick"
+  ],
+  "verb": {
+    "run": true,
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "related": {
+      "list": [
+        "extend-shallow",
+        "get-value",
+        "mixin-deep",
+        "set-value"
+      ],
+      "highlight": "object.omit"
+    },
+    "reflinks": [
+      "verb"
+    ],
+    "lint": {
+      "reflinks": true
+    }
+  }
+}

+ 20 - 0
RNCode/node_modules/object.values/.editorconfig

@@ -0,0 +1,20 @@
+root = true
+
+[*]
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+max_line_length = 150
+
+[CHANGELOG.md]
+indent_style = space
+indent_size = 2
+
+[*.json]
+max_line_length = off
+
+[Makefile]
+max_line_length = off

+ 11 - 0
RNCode/node_modules/object.values/.eslintrc

@@ -0,0 +1,11 @@
+{
+	"root": true,
+
+	"extends": "@ljharb",
+
+	"rules": {
+		"id-length": 0,
+		"new-cap": [2, { "capIsNewExceptions": ["RequireObjectCoercible"] }],
+		"no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"],
+	},
+}

+ 9 - 0
RNCode/node_modules/object.values/.nycrc

@@ -0,0 +1,9 @@
+{
+	"all": true,
+	"check-coverage": false,
+	"reporter": ["text-summary", "text", "html", "json"],
+	"exclude": [
+		"coverage",
+		"test"
+	]
+}

+ 172 - 0
RNCode/node_modules/object.values/CHANGELOG.md

@@ -0,0 +1,172 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [v1.1.6](https://github.com/ljharb/Object.values/compare/v1.1.5...v1.1.6) - 2022-11-06
+
+### Commits
+
+- [actions] reuse common workflows [`4072b71`](https://github.com/ljharb/Object.values/commit/4072b716b4ed42cbd3f3f008ea6a53a374f31bf6)
+- [meta] use `npmignore` to autogenerate an npmignore file [`6881278`](https://github.com/ljharb/Object.values/commit/688127818288a7ab3232aa45ab9271c678a702d5)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `@es-shims/api`, `array.prototype.map`, `safe-publish-latest`, `tape` [`28c21e6`](https://github.com/ljharb/Object.values/commit/28c21e6c67420b8a1c466321dce35e883b6e4e52)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `array.prototype.map`, `aud`, `auto-changelog`, `functions-have-names`, `tape` [`0e78caa`](https://github.com/ljharb/Object.values/commit/0e78caadf9d6fae70712ea8d5953517d6b3d9bdb)
+- [actions] update rebase action to use reusable workflow [`6f37c60`](https://github.com/ljharb/Object.values/commit/6f37c60053cfe4bcdd44ddf0f29296fe3c312c1b)
+- [actions] update codecov uploader [`d7c5f30`](https://github.com/ljharb/Object.values/commit/d7c5f3019ccdba81f0afea189e95d5996ea9dd95)
+- [Deps] update `define-properties`, `es-abstract` [`911ca0e`](https://github.com/ljharb/Object.values/commit/911ca0ee81f38cd1541c1c7ec7c29ec9904d11d5)
+
+## [v1.1.5](https://github.com/ljharb/Object.values/compare/v1.1.4...v1.1.5) - 2021-10-03
+
+### Commits
+
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `@es-shims/api`, `tape` [`c397925`](https://github.com/ljharb/Object.values/commit/c3979252140c24514aeebf3d452b422528e36349)
+- [Deps] update `es-abstract` [`f98d0da`](https://github.com/ljharb/Object.values/commit/f98d0da2035bf8396b2544f2e2ac02aec766d36f)
+- [Robustness] use a call-bound `Array.prototype.push` [`72a3213`](https://github.com/ljharb/Object.values/commit/72a32138e91a9a7b3a828fa1f8f02fe361097c51)
+- [meta] npmignore coverage output [`3b0433f`](https://github.com/ljharb/Object.values/commit/3b0433fe3025cb079b0de2373a0a9cfd2e0777b5)
+
+## [v1.1.4](https://github.com/ljharb/Object.values/compare/v1.1.3...v1.1.4) - 2021-05-26
+
+### Commits
+
+- [meta] add `auto-changelog` [`01ee3ac`](https://github.com/ljharb/Object.values/commit/01ee3acb5c767559ce37a3b24bbd30253eae280c)
+- [actions] use `node/install` instead of `node/run`; use `codecov` action [`f403cba`](https://github.com/ljharb/Object.values/commit/f403cba8852664d82bbf744cd36ad019742a14b5)
+- [readme] add actions and codecov badges [`bee5cd2`](https://github.com/ljharb/Object.values/commit/bee5cd21770c9dffa874a2d18d728cf8478e3e7d)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`; switch `array-map` for `array.prototype.map` [`8c49dbe`](https://github.com/ljharb/Object.values/commit/8c49dbeed8e3312081d88848abe6bb04383d46ae)
+- [Refactor] `propertyIsEnumerable` checks own-ness; remove `has` [`3cb48cf`](https://github.com/ljharb/Object.values/commit/3cb48cf8655504fee0d226036e9582be0fd3fbb0)
+- [actions] update workflows [`eb1d757`](https://github.com/ljharb/Object.values/commit/eb1d7574489b86d5d276cf58e3faf77271d0a6f7)
+- [Dev Deps] update `eslint`, `tape` [`0abdb2d`](https://github.com/ljharb/Object.values/commit/0abdb2d576aba1074075c1fb25de01ef943aaa77)
+- [Tests] increase coverage [`8ca19a3`](https://github.com/ljharb/Object.values/commit/8ca19a3472a9e7883de91d4623fbbce978a0c535)
+- [meta] use `prepublishOnly` script for npm 7+ [`88998c8`](https://github.com/ljharb/Object.values/commit/88998c80f21c0aaf7a640ad14caa7b9c08aa1e7c)
+- [Deps] update `es-abstract` [`12515ab`](https://github.com/ljharb/Object.values/commit/12515ab54f055c42904caaadecce8d13edd673d8)
+- [Deps] update `es-abstract` [`3083ce7`](https://github.com/ljharb/Object.values/commit/3083ce7cd7263cb2570d894947c5d6a4f64feffa)
+- [meta] gitignore coverage output [`7aef22b`](https://github.com/ljharb/Object.values/commit/7aef22b2c623b756a3302c6df2265b69b1bb3e10)
+
+## [v1.1.3](https://github.com/ljharb/Object.values/compare/v1.1.2...v1.1.3) - 2021-02-22
+
+### Commits
+
+- [meta] do not publish github action workflow files [`208c71c`](https://github.com/ljharb/Object.values/commit/208c71c6b34125317ea7784cd05f72c2c511fdfb)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `functions-have-names`, `has-strict-mode`, `tape` [`88849ab`](https://github.com/ljharb/Object.values/commit/88849abd1607d5e80cd4252246ad3d9d0876c431)
+- [readme] remove travis badge [`0a9a67f`](https://github.com/ljharb/Object.values/commit/0a9a67f3f33fd82a8c45db6ec0059996c19b54cd)
+- [actions] update workflows [`4ecb890`](https://github.com/ljharb/Object.values/commit/4ecb8909b6b5dead0a5ce65489f71c626a569826)
+- [Deps] update `call-bind`, `es-abstract` [`28845c7`](https://github.com/ljharb/Object.values/commit/28845c737b5aa665344c39bcf87799484891fe47)
+
+## [v1.1.2](https://github.com/ljharb/Object.values/compare/v1.1.1...v1.1.2) - 2020-11-26
+
+### Commits
+
+- [Tests] migrate tests to Github Actions [`6ab9d79`](https://github.com/ljharb/Object.values/commit/6ab9d798482ad84fbcb874b085820b6830d0d4e3)
+- [Tests] add `implementation` test; run `es-shim-api` in postlint; use `tape` runner [`65667b7`](https://github.com/ljharb/Object.values/commit/65667b7b346a13f91ce6e541871a7687ff4673a4)
+- [Tests] run `nyc` on all tests [`b83f36c`](https://github.com/ljharb/Object.values/commit/b83f36ce151a31a78f7e0b763a0b3a118be76256)
+- [actions] add "Allow Edits" workflow [`44c7de1`](https://github.com/ljharb/Object.values/commit/44c7de155a409bda38215c32ce616eb33b0cf1cf)
+- [Deps] update `es-abstract`; use `call-bind` where applicable [`35f88b0`](https://github.com/ljharb/Object.values/commit/35f88b0f8c7243238058640518446d09f3abe319)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `functions-have-names`; add `safe-publish-latest` [`2495030`](https://github.com/ljharb/Object.values/commit/2495030adccb3f3af615395f364950d76390517d)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1cc1742`](https://github.com/ljharb/Object.values/commit/1cc17421906a8afa3d2ece4ebb745c6b501cba0e)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`; add `aud` [`f42bc75`](https://github.com/ljharb/Object.values/commit/f42bc75fc7c3a61a09eb0a2e5b4ae003f92d0023)
+- [Fix] do not mutate the native function when present [`ea2a273`](https://github.com/ljharb/Object.values/commit/ea2a273cbd8f60f91cf9bb6528b8d5d1cae25f47)
+- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`5040d09`](https://github.com/ljharb/Object.values/commit/5040d09bee5c3ea77694f76ff95c6d4b09bf4a0c)
+- [Tests] only audit prod deps [`2803c92`](https://github.com/ljharb/Object.values/commit/2803c924114308f261e4c38dfc81706458046e7b)
+- [Deps] update `es-abstract` [`d15d0e5`](https://github.com/ljharb/Object.values/commit/d15d0e5e0ac5342588aa558477e56a075b4b130f)
+- [Dev Deps] update `tape` [`e83fe3a`](https://github.com/ljharb/Object.values/commit/e83fe3a4c38dc678866cd0905445d59ea7c58b5b)
+- [Deps] update `es-abstract` [`cfab489`](https://github.com/ljharb/Object.values/commit/cfab48956d88dbf4a2659672c648465ca0cc3fc8)
+
+## [v1.1.1](https://github.com/ljharb/Object.values/compare/v1.1.0...v1.1.1) - 2019-12-12
+
+### Commits
+
+- [Tests] use shared travis-ci configs [`2a82dea`](https://github.com/ljharb/Object.values/commit/2a82dea7bbde9773c0fbae64f7a70f9236effd86)
+- [Tests] up to `node` `v12.7`, `v11.15`, `v10.16`, `v8.16`, `v6.17`; use `nvm install-latest-npm` [`58a4209`](https://github.com/ljharb/Object.values/commit/58a420950f906d62b9b62b6ad5881216f7585be2)
+- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`80080cd`](https://github.com/ljharb/Object.values/commit/80080cdd93f8dbceb3383864e4d18f8cbb4947c0)
+- [actions] add automatic rebasing / merge commit blocking [`e8a9297`](https://github.com/ljharb/Object.values/commit/e8a92975258fd674a2c00380f7ee7c2adb6ee009)
+- [Refactor] use split-up `es-abstract` (85% bundle size decrease) [`a8ac36f`](https://github.com/ljharb/Object.values/commit/a8ac36fcad70e86a42d08cf0163f7b23945a3f45)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `functions-have-names` [`c74ad8a`](https://github.com/ljharb/Object.values/commit/c74ad8adcb78173f8e9cec541366c21307587de4)
+- [Dev Deps] update `object-keys`, `tape`, `eslint` [`10adf18`](https://github.com/ljharb/Object.values/commit/10adf18de8784be02de042b7c8eec5dd911f4f1a)
+- [meta] add `funding` field [`110dbca`](https://github.com/ljharb/Object.values/commit/110dbca51bc0413bab11fe56dabc5d0a373415a7)
+- [Tests] use `functions-have-names` [`40746e5`](https://github.com/ljharb/Object.values/commit/40746e5311298d61385e3e316e3f0bc2956d9053)
+- [Deps] update `es-abstract` [`9b7c99b`](https://github.com/ljharb/Object.values/commit/9b7c99b9881a3af022ec002cedd72a9aa64f34d2)
+
+## [v1.1.0](https://github.com/ljharb/Object.values/compare/v1.0.4...v1.1.0) - 2019-01-01
+
+### Commits
+
+- [Tests] remove `jscs` [`a9d5f94`](https://github.com/ljharb/Object.values/commit/a9d5f94000ae6efb44cd964dcdfa5b986596392f)
+- [Tests] up to `node` `v11.1`, `v10.13`, `v9.11`, `v8.12`, `v7.10`, `v6.14`, `v4.9`; use `nvm install-latest-npm` [`103a907`](https://github.com/ljharb/Object.values/commit/103a907829c29fabf16e880b178341d3b6832e32)
+- [Tests] up to `node` `v7.4`, `v4.7`; improve test matrix [`66caa4a`](https://github.com/ljharb/Object.values/commit/66caa4a74e08de777c1b00185f796e609704bb83)
+- [Tests] up to `node` `v11.6`, `v10.15`, `v8.15`, `v6.16` [`81de647`](https://github.com/ljharb/Object.values/commit/81de647b1eede60d69f49cf4ccbf970e3224528e)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `nsp`, `tape` [`13c5dd1`](https://github.com/ljharb/Object.values/commit/13c5dd1fa7762cf509deafde12b14fe65e6c0c17)
+- [Dev Deps] add missing `object-keys` dev dep [`7cbc7f3`](https://github.com/ljharb/Object.values/commit/7cbc7f38ac6b13738af8b42b62d0c89c5dce6bc6)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape` [`1bf1dbe`](https://github.com/ljharb/Object.values/commit/1bf1dbe0b1fa1c646ef2c6c1bc3a14f5d4045f92)
+- [Deps] update `define-properties`, `es-abstract`, `function-bind`, `has` [`faa4051`](https://github.com/ljharb/Object.values/commit/faa40515ff43662e3f381147a902e978cf250bdc)
+- [Tests] use `npm audit` instead of `nsp` [`428fb50`](https://github.com/ljharb/Object.values/commit/428fb50c79cc0ef1e62fc053dc959a8848b0d190)
+- Only apps should have lockfiles [`f35eb85`](https://github.com/ljharb/Object.values/commit/f35eb8520052bb4dd27ccfd4a399c6011c2ec157)
+- [New] add `auto` entry point [`ed730e3`](https://github.com/ljharb/Object.values/commit/ed730e3b2508e4d89691b57d00fc63eebce7130e)
+
+## [v1.0.4](https://github.com/ljharb/Object.values/compare/v1.0.3...v1.0.4) - 2016-12-04
+
+### Commits
+
+- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `@es-shims/api` [`b0db351`](https://github.com/ljharb/Object.values/commit/b0db351280cfebad008eedff99556cead33a2f37)
+- [Tests] up to `node` `v7.2`, `v6.9`, `v4.6`; improve test matrix. [`89362d3`](https://github.com/ljharb/Object.values/commit/89362d30ccee1a27f8d85c114adb14937b4ca7d0)
+- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` [`883dce4`](https://github.com/ljharb/Object.values/commit/883dce455bcab08a045561554055003c3f06a917)
+- [Dev Deps] update `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` [`67e83b8`](https://github.com/ljharb/Object.values/commit/67e83b8a84ff77f29c99b924760256e05e358dd8)
+- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` [`2c1c6c7`](https://github.com/ljharb/Object.values/commit/2c1c6c759725418806d079abf828fd16b3df0aba)
+- [Dev Deps] update `jscs`, `nsp`, `eslint`, `@es-shims/api` [`d878ea6`](https://github.com/ljharb/Object.values/commit/d878ea62dc98952e62136de5a42a8caab2a66e84)
+- [Tests] up to `node` `v5.6`, `v4.3` [`f37757e`](https://github.com/ljharb/Object.values/commit/f37757e78526e060d7fe2a7ba11414690bbbaa98)
+- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` [`348a2a3`](https://github.com/ljharb/Object.values/commit/348a2a386b791fe090a08b7f33111d531277a3ab)
+- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` [`b1e915e`](https://github.com/ljharb/Object.values/commit/b1e915ed9b35bdb9bb2b7ea35cdd5c78e62636d9)
+- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` [`015b78d`](https://github.com/ljharb/Object.values/commit/015b78db57c4cc46d06b1b4f04f4ea2fdb35fc0c)
+- [Tests] up to `node` `v5.9`, `v4.4` [`b33686e`](https://github.com/ljharb/Object.values/commit/b33686ea45a842c84e5186416fb52be31a60cc7e)
+- [Dev Deps] update `jscs` [`0a44aa3`](https://github.com/ljharb/Object.values/commit/0a44aa30ab2fd5fe4a15070237c700172e517b3f)
+- [Docs] update to reflect ES2017 inclusion. [`c01085b`](https://github.com/ljharb/Object.values/commit/c01085b134408bffadafa060bd1585a61674dd57)
+- [Tests] use pretest/posttest for linting/security. [`8f9c6c7`](https://github.com/ljharb/Object.values/commit/8f9c6c7104d5694aaf266a6e6d12a92b9731a709)
+- [Tests] fix npm upgrades on older nodes [`68c195f`](https://github.com/ljharb/Object.values/commit/68c195fe88677667002e5102c4efcfcc7bef059b)
+- [Tests] up to `node` `v6.2` [`48fac8d`](https://github.com/ljharb/Object.values/commit/48fac8de7265142acb1554b28a29322baf53be20)
+- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` [`471a794`](https://github.com/ljharb/Object.values/commit/471a7940a7dff28a6544c6c253b90daa60ff3c65)
+- [Deps] update `es-abstract` [`7e644f1`](https://github.com/ljharb/Object.values/commit/7e644f1bb7c6db533ed137d88de7856e7b9c55b1)
+- [Deps] update `es-abstract` [`1856267`](https://github.com/ljharb/Object.values/commit/18562676e8aa606a47116753c323dd28619dea50)
+- [Tests] on `node` `v5.12` [`8a4e0c0`](https://github.com/ljharb/Object.values/commit/8a4e0c03415fb67fc2ac420eba6ece5b660cbfe7)
+- [Tests] on `node` `v5.10` [`aaeb1a7`](https://github.com/ljharb/Object.values/commit/aaeb1a7a176eca1e69f4df7a8979f0ba40b12c29)
+- [Deps] update `function-bind` [`14d2e88`](https://github.com/ljharb/Object.values/commit/14d2e88045d8f92877e9a31f31a2b624267de54f)
+- [Deps] update `es-abstract` [`63e46a9`](https://github.com/ljharb/Object.values/commit/63e46a9efd3081872e92ec94a2ed6dbaae3c615a)
+- [Deps] update `es-abstract` [`7c40db6`](https://github.com/ljharb/Object.values/commit/7c40db6381bad3232be3e1c24ef79839b6edaba7)
+- [Deps] update `define-properties` [`0a86270`](https://github.com/ljharb/Object.values/commit/0a86270bda6478c4e08045b1fb3f2eb72b2207cd)
+- [Tests] on `node` `v4.2` [`8ee831d`](https://github.com/ljharb/Object.values/commit/8ee831dae76ef522d6acaae9869a1a7b465361a4)
+- [Tests] on `node` `v5.0` [`b9c88c7`](https://github.com/ljharb/Object.values/commit/b9c88c74f2cbb280cfc1c88064c9cd514b4876ae)
+
+## [v1.0.3](https://github.com/ljharb/Object.values/compare/v1.0.2...v1.0.3) - 2015-10-06
+
+### Commits
+
+- Add test case to cover non-enumerable keys made enumerable by a previous getter. [`9d61739`](https://github.com/ljharb/Object.values/commit/9d617395f0ec81cbdcbc50a46e4489c95253f80b)
+- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config` [`cf6dff8`](https://github.com/ljharb/Object.values/commit/cf6dff84131cef953498988249c5306c71c1fe9f)
+- [Dev Deps] update `jscs`, `eslint` [`f439029`](https://github.com/ljharb/Object.values/commit/f439029b228e0dab0542caa63e1d032889d53705)
+- [Deps] update `es-abstract` [`6879994`](https://github.com/ljharb/Object.values/commit/6879994fec305490b5550d25ce390e4b64c74fe0)
+
+## [v1.0.2](https://github.com/ljharb/Object.values/compare/v1.0.1...v1.0.2) - 2015-09-25
+
+### Fixed
+
+- Not-yet-visited keys deleted on a [[Get]] must not show up in the output [`#1`](https://github.com/ljharb/Object.values/issues/1)
+
+## [v1.0.1](https://github.com/ljharb/Object.values/compare/v1.0.0...v1.0.1) - 2015-09-21
+
+### Commits
+
+- [Tests] on `io.js` `v3.3`, up to `node` `v4.1` [`27aac5f`](https://github.com/ljharb/Object.values/commit/27aac5f80c05f66d584056931b63eed637059621)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`83cde5c`](https://github.com/ljharb/Object.values/commit/83cde5c685db366f769d738bc30f7a6d273bcc3a)
+- Add es-shim API keyword [`2c6b885`](https://github.com/ljharb/Object.values/commit/2c6b88550c155b4f9a7c6ece609b8d97d77b2942)
+- [Docs] update version badge URL [`626bf99`](https://github.com/ljharb/Object.values/commit/626bf991d9b0f5720819537698918b295c6ea0d0)
+
+## v1.0.0 - 2015-09-02
+
+### Commits
+
+- Dotfiles [`5251629`](https://github.com/ljharb/Object.values/commit/5251629c47404fa0dec7b6d230eda10da0f47eea)
+- Tests [`b02e54e`](https://github.com/ljharb/Object.values/commit/b02e54ef157c56117b390cb1db95f7d48163a838)
+- package.json [`7b84f4e`](https://github.com/ljharb/Object.values/commit/7b84f4e839f75b227a5233325f064900a6032f9a)
+- Read me [`31e115b`](https://github.com/ljharb/Object.values/commit/31e115b31af2eabf4db518343310f2bb42e7fa04)
+- Initial commit [`01271a5`](https://github.com/ljharb/Object.values/commit/01271a51976524c62bac00d8af9af3ede72831dd)
+- Implementation. [`9a0c315`](https://github.com/ljharb/Object.values/commit/9a0c31554899f411d31d3b8343c754eb2c19842e)
+- Clarifying tests that only Symbol *properties* are omitted. [`16b3abb`](https://github.com/ljharb/Object.values/commit/16b3abb7c15790cb63e9b2b842b75fdc4210ad69)

+ 22 - 0
RNCode/node_modules/object.values/LICENSE

@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+

+ 58 - 0
RNCode/node_modules/object.values/README.md

@@ -0,0 +1,58 @@
+# object.values <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
+
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+An ES2017 spec-compliant `Object.values` shim. Invoke its "shim" method to shim `Object.values` if it is unavailable or noncompliant.
+
+This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the [spec](https://tc39.github.io/ecma262/#sec-object.values).
+
+Most common usage:
+```js
+var assert = require('assert');
+var values = require('object.values');
+
+var obj = { a: 1, b: 2, c: 3 };
+var expected = [1, 2, 3];
+
+if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') {
+	// for environments with Symbol support
+	var sym = Symbol();
+	obj[sym] = 4;
+	obj.d = sym;
+	expected.push(sym);
+}
+
+assert.deepEqual(values(obj), expected);
+
+if (!Object.values) {
+	values.shim();
+}
+
+assert.deepEqual(Object.values(obj), expected);
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[package-url]: https://npmjs.com/package/object.values
+[npm-version-svg]: https://versionbadg.es/es-shims/Object.values.svg
+[deps-svg]: https://david-dm.org/es-shims/Object.values.svg
+[deps-url]: https://david-dm.org/es-shims/Object.values
+[dev-deps-svg]: https://david-dm.org/es-shims/Object.values/dev-status.svg
+[dev-deps-url]: https://david-dm.org/es-shims/Object.values#info=devDependencies
+[npm-badge-png]: https://nodei.co/npm/object.values.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/object.values.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/object.values.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=object.values
+[codecov-image]: https://codecov.io/gh/es-shims/Object.values/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/es-shims/Object.values/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/Object.values
+[actions-url]: https://github.com/es-shims/Object.values/actions

+ 3 - 0
RNCode/node_modules/object.values/auto.js

@@ -0,0 +1,3 @@
+'use strict';
+
+require('./shim')();

+ 18 - 0
RNCode/node_modules/object.values/implementation.js

@@ -0,0 +1,18 @@
+'use strict';
+
+var RequireObjectCoercible = require('es-abstract/2022/RequireObjectCoercible');
+var callBound = require('call-bind/callBound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+var $push = callBound('Array.prototype.push');
+
+module.exports = function values(O) {
+	var obj = RequireObjectCoercible(O);
+	var vals = [];
+	for (var key in obj) {
+		if ($isEnumerable(obj, key)) { // checks own-ness as well
+			$push(vals, obj[key]);
+		}
+	}
+	return vals;
+};

+ 18 - 0
RNCode/node_modules/object.values/index.js

@@ -0,0 +1,18 @@
+'use strict';
+
+var define = require('define-properties');
+var callBind = require('call-bind');
+
+var implementation = require('./implementation');
+var getPolyfill = require('./polyfill');
+var shim = require('./shim');
+
+var polyfill = callBind(getPolyfill(), Object);
+
+define(polyfill, {
+	getPolyfill: getPolyfill,
+	implementation: implementation,
+	shim: shim
+});
+
+module.exports = polyfill;

+ 98 - 0
RNCode/node_modules/object.values/package.json

@@ -0,0 +1,98 @@
+{
+	"name": "object.values",
+	"version": "1.1.6",
+	"author": "Jordan Harband <ljharb@gmail.com>",
+	"funding": {
+		"url": "https://github.com/sponsors/ljharb"
+	},
+	"description": "ES2017 spec-compliant Object.values shim.",
+	"license": "MIT",
+	"main": "index.js",
+	"scripts": {
+		"prepack": "npmignore --auto --commentLines=autogenerated",
+		"prepublish": "not-in-publish || npm run prepublishOnly",
+		"prepublishOnly": "safe-publish-latest",
+		"pretest": "npm run lint",
+		"test": "npm run tests-only",
+		"posttest": "aud --production",
+		"tests-only": "nyc tape 'test/**/*.js'",
+		"lint": "eslint --ext=js,mjs .",
+		"postlint": "es-shim-api --bound",
+		"version": "auto-changelog && git add CHANGELOG.md",
+		"postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+	},
+	"repository": {
+		"type": "git",
+		"url": "git://github.com/es-shims/Object.values.git"
+	},
+	"keywords": [
+		"Object.values",
+		"Object.keys",
+		"Object.entries",
+		"values",
+		"ES7",
+		"ES8",
+		"ES2017",
+		"shim",
+		"object",
+		"keys",
+		"entries",
+		"polyfill",
+		"es-shim API"
+	],
+	"dependencies": {
+		"call-bind": "^1.0.2",
+		"define-properties": "^1.1.4",
+		"es-abstract": "^1.20.4"
+	},
+	"devDependencies": {
+		"@es-shims/api": "^2.2.3",
+		"@ljharb/eslint-config": "^21.0.0",
+		"array.prototype.map": "^1.0.5",
+		"aud": "^2.0.1",
+		"auto-changelog": "^2.4.0",
+		"eslint": "=8.8.0",
+		"functions-have-names": "^1.2.3",
+		"has-strict-mode": "^1.0.1",
+		"in-publish": "^2.0.1",
+		"npmignore": "^0.3.0",
+		"nyc": "^10.3.2",
+		"object-keys": "^1.1.1",
+		"safe-publish-latest": "^2.0.0",
+		"tape": "^5.6.1"
+	},
+	"testling": {
+		"files": "test/index.js",
+		"browsers": [
+			"iexplore/9.0..latest",
+			"firefox/4.0..6.0",
+			"firefox/15.0..latest",
+			"firefox/nightly",
+			"chrome/4.0..10.0",
+			"chrome/20.0..latest",
+			"chrome/canary",
+			"opera/11.6..latest",
+			"opera/next",
+			"safari/5.0..latest",
+			"ipad/6.0..latest",
+			"iphone/6.0..latest",
+			"android-browser/4.2"
+		]
+	},
+	"engines": {
+		"node": ">= 0.4"
+	},
+	"auto-changelog": {
+		"output": "CHANGELOG.md",
+		"template": "keepachangelog",
+		"unreleased": false,
+		"commitLimit": false,
+		"backfillLimit": false,
+		"hideCredit": true
+	},
+	"publishConfig": {
+		"ignore": [
+			".github/workflows"
+		]
+	}
+}

+ 7 - 0
RNCode/node_modules/object.values/polyfill.js

@@ -0,0 +1,7 @@
+'use strict';
+
+var implementation = require('./implementation');
+
+module.exports = function getPolyfill() {
+	return typeof Object.values === 'function' ? Object.values : implementation;
+};

+ 14 - 0
RNCode/node_modules/object.values/shim.js

@@ -0,0 +1,14 @@
+'use strict';
+
+var getPolyfill = require('./polyfill');
+var define = require('define-properties');
+
+module.exports = function shimValues() {
+	var polyfill = getPolyfill();
+	define(Object, { values: polyfill }, {
+		values: function testValues() {
+			return Object.values !== polyfill;
+		}
+	});
+	return polyfill;
+};

+ 11 - 0
RNCode/node_modules/object.values/test/.eslintrc

@@ -0,0 +1,11 @@
+{
+	"rules": {
+		"array-bracket-newline": 0,
+		"max-lines-per-function": 0,
+		"max-nested-callbacks": [2, 3],
+		"max-statements": [2, 12],
+		"max-statements-per-line": [2, { "max": 2 }],
+		"no-invalid-this": [1],
+		"object-curly-newline": 0,
+	}
+}

+ 20 - 0
RNCode/node_modules/object.values/test/implementation.js

@@ -0,0 +1,20 @@
+'use strict';
+
+var implementation = require('../implementation');
+var callBind = require('call-bind');
+var test = require('tape');
+var hasStrictMode = require('has-strict-mode')();
+var runTests = require('./tests');
+
+test('as a function', function (t) {
+	t.test('bad array/this value', { skip: !hasStrictMode }, function (st) {
+		/* eslint no-useless-call: 0 */
+		st['throws'](function () { implementation.call(undefined); }, TypeError, 'undefined is not an object');
+		st['throws'](function () { implementation.call(null); }, TypeError, 'null is not an object');
+		st.end();
+	});
+
+	runTests(callBind(implementation, Object), t);
+
+	t.end();
+});

+ 17 - 0
RNCode/node_modules/object.values/test/index.js

@@ -0,0 +1,17 @@
+'use strict';
+
+var values = require('../');
+var test = require('tape');
+var runTests = require('./tests');
+
+test('as a function', function (t) {
+	t.test('bad array/this value', function (st) {
+		st['throws'](function () { values(undefined); }, TypeError, 'undefined is not an object');
+		st['throws'](function () { values(null); }, TypeError, 'null is not an object');
+		st.end();
+	});
+
+	runTests(values, t);
+
+	t.end();
+});

+ 35 - 0
RNCode/node_modules/object.values/test/shimmed.js

@@ -0,0 +1,35 @@
+'use strict';
+
+require('../auto');
+
+var test = require('tape');
+var defineProperties = require('define-properties');
+var isEnumerable = Object.prototype.propertyIsEnumerable;
+var functionsHaveNames = require('functions-have-names')();
+
+var runTests = require('./tests');
+
+test('shimmed', function (t) {
+	t.equal(Object.values.length, 1, 'Object.values has a length of 1');
+	t.test('Function name', { skip: !functionsHaveNames }, function (st) {
+		st.equal(Object.values.name, 'values', 'Object.values has name "values"');
+		st.end();
+	});
+
+	t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) {
+		et.equal(false, isEnumerable.call(Object, 'values'), 'Object.values is not enumerable');
+		et.end();
+	});
+
+	var supportsStrictMode = (function () { return typeof this === 'undefined'; }());
+
+	t.test('bad object value', { skip: !supportsStrictMode }, function (st) {
+		st['throws'](function () { return Object.values(undefined); }, TypeError, 'undefined is not an object');
+		st['throws'](function () { return Object.values(null); }, TypeError, 'null is not an object');
+		st.end();
+	});
+
+	runTests(Object.values, t);
+
+	t.end();
+});

+ 82 - 0
RNCode/node_modules/object.values/test/tests.js

@@ -0,0 +1,82 @@
+'use strict';
+
+var keys = require('object-keys');
+var map = require('array.prototype.map');
+var define = require('define-properties');
+
+var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
+
+module.exports = function (values, t) {
+	var a = {};
+	var b = {};
+	var c = {};
+	var obj = { a: a, b: b, c: c };
+
+	t.deepEqual(values(obj), [a, b, c], 'basic support');
+	t.deepEqual(values({ a: a, b: a, c: c }), [a, a, c], 'duplicate values are included');
+
+	t.test('values are in the same order as keys', function (st) {
+		var object = { a: a, b: b };
+		object[0] = 3;
+		object.c = c;
+		object[1] = 4;
+		delete object[0];
+		var objKeys = keys(object);
+		var objValues = map(objKeys, function (key) {
+			return object[key];
+		});
+		st.deepEqual(values(object), objValues, 'values match key order');
+		st.end();
+	});
+
+	t.test('non-enumerable properties are omitted', { skip: !Object.defineProperty }, function (st) {
+		var object = { a: a, b: b };
+		Object.defineProperty(object, 'c', { enumerable: false, value: c });
+		st.deepEqual(values(object), [a, b], 'non-enumerable property‘s value is omitted');
+		st.end();
+	});
+
+	t.test('inherited properties are omitted', function (st) {
+		var F = function G() {};
+		F.prototype.a = a;
+		var f = new F();
+		f.b = b;
+		st.deepEqual(values(f), [b], 'only own properties are included');
+		st.end();
+	});
+
+	t.test('Symbol properties are omitted', { skip: !hasSymbols }, function (st) {
+		var object = { a: a, b: b, c: c };
+		var enumSym = Symbol('enum');
+		var nonEnumSym = Symbol('non enum');
+		object[enumSym] = enumSym;
+		object.d = enumSym;
+		Object.defineProperty(object, nonEnumSym, { enumerable: false, value: nonEnumSym });
+		st.deepEqual(values(object), [a, b, c, enumSym], 'symbol properties are omitted');
+		st.end();
+	});
+
+	t.test('not-yet-visited keys deleted on [[Get]] must not show up in output', { skip: !define.supportsDescriptors }, function (st) {
+		var o = { a: 1, b: 2, c: 3 };
+		Object.defineProperty(o, 'a', {
+			get: function () {
+				delete this.b;
+				return 1;
+			}
+		});
+		st.deepEqual(values(o), [1, 3], 'when "b" is deleted prior to being visited, it should not show up');
+		st.end();
+	});
+
+	t.test('not-yet-visited keys made non-enumerable on [[Get]] must not show up in output', { skip: !define.supportsDescriptors }, function (st) {
+		var o = { a: 'A', b: 'B' };
+		Object.defineProperty(o, 'a', {
+			get: function () {
+				Object.defineProperty(o, 'b', { enumerable: false });
+				return 'A';
+			}
+		});
+		st.deepEqual(values(o), ['A'], 'when "b" is made non-enumerable prior to being visited, it should not show up');
+		st.end();
+	});
+};

+ 98 - 0
RNCode/node_modules/on-finished/HISTORY.md

@@ -0,0 +1,98 @@
+2.4.1 / 2022-02-22
+==================
+
+  * Fix error on early async hooks implementations
+
+2.4.0 / 2022-02-21
+==================
+
+  * Prevent loss of async hooks context
+
+2.3.0 / 2015-05-26
+==================
+
+  * Add defined behavior for HTTP `CONNECT` requests
+  * Add defined behavior for HTTP `Upgrade` requests
+  * deps: ee-first@1.1.1
+
+2.2.1 / 2015-04-22
+==================
+
+  * Fix `isFinished(req)` when data buffered
+
+2.2.0 / 2014-12-22
+==================
+
+  * Add message object to callback arguments
+
+2.1.1 / 2014-10-22
+==================
+
+  * Fix handling of pipelined requests
+
+2.1.0 / 2014-08-16
+==================
+
+  * Check if `socket` is detached
+  * Return `undefined` for `isFinished` if state unknown
+
+2.0.0 / 2014-08-16
+==================
+
+  * Add `isFinished` function
+  * Move to `jshttp` organization
+  * Remove support for plain socket argument
+  * Rename to `on-finished`
+  * Support both `req` and `res` as arguments
+  * deps: ee-first@1.0.5
+
+1.2.2 / 2014-06-10
+==================
+
+  * Reduce listeners added to emitters
+    - avoids "event emitter leak" warnings when used multiple times on same request
+
+1.2.1 / 2014-06-08
+==================
+
+  * Fix returned value when already finished
+
+1.2.0 / 2014-06-05
+==================
+
+  * Call callback when called on already-finished socket
+
+1.1.4 / 2014-05-27
+==================
+
+  * Support node.js 0.8
+
+1.1.3 / 2014-04-30
+==================
+
+  * Make sure errors passed as instanceof `Error`
+
+1.1.2 / 2014-04-18
+==================
+
+  * Default the `socket` to passed-in object
+
+1.1.1 / 2014-01-16
+==================
+
+  * Rename module to `finished`
+
+1.1.0 / 2013-12-25
+==================
+
+  * Call callback when called on already-errored socket
+
+1.0.1 / 2013-12-20
+==================
+
+  * Actually pass the error to the callback
+
+1.0.0 / 2013-12-20
+==================
+
+  * Initial release

+ 23 - 0
RNCode/node_modules/on-finished/LICENSE

@@ -0,0 +1,23 @@
+(The MIT License)
+
+Copyright (c) 2013 Jonathan Ong <me@jongleberry.com>
+Copyright (c) 2014 Douglas Christopher Wilson <doug@somethingdoug.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 162 - 0
RNCode/node_modules/on-finished/README.md

@@ -0,0 +1,162 @@
+# on-finished
+
+[![NPM Version][npm-version-image]][npm-url]
+[![NPM Downloads][npm-downloads-image]][npm-url]
+[![Node.js Version][node-image]][node-url]
+[![Build Status][ci-image]][ci-url]
+[![Coverage Status][coveralls-image]][coveralls-url]
+
+Execute a callback when a HTTP request closes, finishes, or errors.
+
+## Install
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install on-finished
+```
+
+## API
+
+```js
+var onFinished = require('on-finished')
+```
+
+### onFinished(res, listener)
+
+Attach a listener to listen for the response to finish. The listener will
+be invoked only once when the response finished. If the response finished
+to an error, the first argument will contain the error. If the response
+has already finished, the listener will be invoked.
+
+Listening to the end of a response would be used to close things associated
+with the response, like open files.
+
+Listener is invoked as `listener(err, res)`.
+
+<!-- eslint-disable handle-callback-err -->
+
+```js
+onFinished(res, function (err, res) {
+  // clean up open fds, etc.
+  // err contains the error if request error'd
+})
+```
+
+### onFinished(req, listener)
+
+Attach a listener to listen for the request to finish. The listener will
+be invoked only once when the request finished. If the request finished
+to an error, the first argument will contain the error. If the request
+has already finished, the listener will be invoked.
+
+Listening to the end of a request would be used to know when to continue
+after reading the data.
+
+Listener is invoked as `listener(err, req)`.
+
+<!-- eslint-disable handle-callback-err -->
+
+```js
+var data = ''
+
+req.setEncoding('utf8')
+req.on('data', function (str) {
+  data += str
+})
+
+onFinished(req, function (err, req) {
+  // data is read unless there is err
+})
+```
+
+### onFinished.isFinished(res)
+
+Determine if `res` is already finished. This would be useful to check and
+not even start certain operations if the response has already finished.
+
+### onFinished.isFinished(req)
+
+Determine if `req` is already finished. This would be useful to check and
+not even start certain operations if the request has already finished.
+
+## Special Node.js requests
+
+### HTTP CONNECT method
+
+The meaning of the `CONNECT` method from RFC 7231, section 4.3.6:
+
+> The CONNECT method requests that the recipient establish a tunnel to
+> the destination origin server identified by the request-target and,
+> if successful, thereafter restrict its behavior to blind forwarding
+> of packets, in both directions, until the tunnel is closed.  Tunnels
+> are commonly used to create an end-to-end virtual connection, through
+> one or more proxies, which can then be secured using TLS (Transport
+> Layer Security, [RFC5246]).
+
+In Node.js, these request objects come from the `'connect'` event on
+the HTTP server.
+
+When this module is used on a HTTP `CONNECT` request, the request is
+considered "finished" immediately, **due to limitations in the Node.js
+interface**. This means if the `CONNECT` request contains a request entity,
+the request will be considered "finished" even before it has been read.
+
+There is no such thing as a response object to a `CONNECT` request in
+Node.js, so there is no support for one.
+
+### HTTP Upgrade request
+
+The meaning of the `Upgrade` header from RFC 7230, section 6.1:
+
+> The "Upgrade" header field is intended to provide a simple mechanism
+> for transitioning from HTTP/1.1 to some other protocol on the same
+> connection.
+
+In Node.js, these request objects come from the `'upgrade'` event on
+the HTTP server.
+
+When this module is used on a HTTP request with an `Upgrade` header, the
+request is considered "finished" immediately, **due to limitations in the
+Node.js interface**. This means if the `Upgrade` request contains a request
+entity, the request will be considered "finished" even before it has been
+read.
+
+There is no such thing as a response object to a `Upgrade` request in
+Node.js, so there is no support for one.
+
+## Example
+
+The following code ensures that file descriptors are always closed
+once the response finishes.
+
+```js
+var destroy = require('destroy')
+var fs = require('fs')
+var http = require('http')
+var onFinished = require('on-finished')
+
+http.createServer(function onRequest (req, res) {
+  var stream = fs.createReadStream('package.json')
+  stream.pipe(res)
+  onFinished(res, function () {
+    destroy(stream)
+  })
+})
+```
+
+## License
+
+[MIT](LICENSE)
+
+[ci-image]: https://badgen.net/github/checks/jshttp/on-finished/master?label=ci
+[ci-url]: https://github.com/jshttp/on-finished/actions/workflows/ci.yml
+[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/on-finished/master
+[coveralls-url]: https://coveralls.io/r/jshttp/on-finished?branch=master
+[node-image]: https://badgen.net/npm/node/on-finished
+[node-url]: https://nodejs.org/en/download
+[npm-downloads-image]: https://badgen.net/npm/dm/on-finished
+[npm-url]: https://npmjs.org/package/on-finished
+[npm-version-image]: https://badgen.net/npm/v/on-finished

+ 234 - 0
RNCode/node_modules/on-finished/index.js

@@ -0,0 +1,234 @@
+/*!
+ * on-finished
+ * Copyright(c) 2013 Jonathan Ong
+ * Copyright(c) 2014 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = onFinished
+module.exports.isFinished = isFinished
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var asyncHooks = tryRequireAsyncHooks()
+var first = require('ee-first')
+
+/**
+ * Variables.
+ * @private
+ */
+
+/* istanbul ignore next */
+var defer = typeof setImmediate === 'function'
+  ? setImmediate
+  : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }
+
+/**
+ * Invoke callback when the response has finished, useful for
+ * cleaning up resources afterwards.
+ *
+ * @param {object} msg
+ * @param {function} listener
+ * @return {object}
+ * @public
+ */
+
+function onFinished (msg, listener) {
+  if (isFinished(msg) !== false) {
+    defer(listener, null, msg)
+    return msg
+  }
+
+  // attach the listener to the message
+  attachListener(msg, wrap(listener))
+
+  return msg
+}
+
+/**
+ * Determine if message is already finished.
+ *
+ * @param {object} msg
+ * @return {boolean}
+ * @public
+ */
+
+function isFinished (msg) {
+  var socket = msg.socket
+
+  if (typeof msg.finished === 'boolean') {
+    // OutgoingMessage
+    return Boolean(msg.finished || (socket && !socket.writable))
+  }
+
+  if (typeof msg.complete === 'boolean') {
+    // IncomingMessage
+    return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))
+  }
+
+  // don't know
+  return undefined
+}
+
+/**
+ * Attach a finished listener to the message.
+ *
+ * @param {object} msg
+ * @param {function} callback
+ * @private
+ */
+
+function attachFinishedListener (msg, callback) {
+  var eeMsg
+  var eeSocket
+  var finished = false
+
+  function onFinish (error) {
+    eeMsg.cancel()
+    eeSocket.cancel()
+
+    finished = true
+    callback(error)
+  }
+
+  // finished on first message event
+  eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)
+
+  function onSocket (socket) {
+    // remove listener
+    msg.removeListener('socket', onSocket)
+
+    if (finished) return
+    if (eeMsg !== eeSocket) return
+
+    // finished on first socket event
+    eeSocket = first([[socket, 'error', 'close']], onFinish)
+  }
+
+  if (msg.socket) {
+    // socket already assigned
+    onSocket(msg.socket)
+    return
+  }
+
+  // wait for socket to be assigned
+  msg.on('socket', onSocket)
+
+  if (msg.socket === undefined) {
+    // istanbul ignore next: node.js 0.8 patch
+    patchAssignSocket(msg, onSocket)
+  }
+}
+
+/**
+ * Attach the listener to the message.
+ *
+ * @param {object} msg
+ * @return {function}
+ * @private
+ */
+
+function attachListener (msg, listener) {
+  var attached = msg.__onFinished
+
+  // create a private single listener with queue
+  if (!attached || !attached.queue) {
+    attached = msg.__onFinished = createListener(msg)
+    attachFinishedListener(msg, attached)
+  }
+
+  attached.queue.push(listener)
+}
+
+/**
+ * Create listener on message.
+ *
+ * @param {object} msg
+ * @return {function}
+ * @private
+ */
+
+function createListener (msg) {
+  function listener (err) {
+    if (msg.__onFinished === listener) msg.__onFinished = null
+    if (!listener.queue) return
+
+    var queue = listener.queue
+    listener.queue = null
+
+    for (var i = 0; i < queue.length; i++) {
+      queue[i](err, msg)
+    }
+  }
+
+  listener.queue = []
+
+  return listener
+}
+
+/**
+ * Patch ServerResponse.prototype.assignSocket for node.js 0.8.
+ *
+ * @param {ServerResponse} res
+ * @param {function} callback
+ * @private
+ */
+
+// istanbul ignore next: node.js 0.8 patch
+function patchAssignSocket (res, callback) {
+  var assignSocket = res.assignSocket
+
+  if (typeof assignSocket !== 'function') return
+
+  // res.on('socket', callback) is broken in 0.8
+  res.assignSocket = function _assignSocket (socket) {
+    assignSocket.call(this, socket)
+    callback(socket)
+  }
+}
+
+/**
+ * Try to require async_hooks
+ * @private
+ */
+
+function tryRequireAsyncHooks () {
+  try {
+    return require('async_hooks')
+  } catch (e) {
+    return {}
+  }
+}
+
+/**
+ * Wrap function with async resource, if possible.
+ * AsyncResource.bind static method backported.
+ * @private
+ */
+
+function wrap (fn) {
+  var res
+
+  // create anonymous resource
+  if (asyncHooks.AsyncResource) {
+    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')
+  }
+
+  // incompatible node.js
+  if (!res || !res.runInAsyncScope) {
+    return fn
+  }
+
+  // return bound function
+  return res.runInAsyncScope.bind(res, fn, null)
+}

+ 39 - 0
RNCode/node_modules/on-finished/package.json

@@ -0,0 +1,39 @@
+{
+  "name": "on-finished",
+  "description": "Execute a callback when a request closes, finishes, or errors",
+  "version": "2.4.1",
+  "contributors": [
+    "Douglas Christopher Wilson <doug@somethingdoug.com>",
+    "Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)"
+  ],
+  "license": "MIT",
+  "repository": "jshttp/on-finished",
+  "dependencies": {
+    "ee-first": "1.1.1"
+  },
+  "devDependencies": {
+    "eslint": "7.32.0",
+    "eslint-config-standard": "14.1.1",
+    "eslint-plugin-import": "2.25.4",
+    "eslint-plugin-markdown": "2.2.1",
+    "eslint-plugin-node": "11.1.0",
+    "eslint-plugin-promise": "5.2.0",
+    "eslint-plugin-standard": "4.1.0",
+    "mocha": "9.2.1",
+    "nyc": "15.1.0"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "index.js"
+  ],
+  "scripts": {
+    "lint": "eslint .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-ci": "nyc --reporter=lcovonly --reporter=text npm test",
+    "test-cov": "nyc --reporter=html --reporter=text npm test"
+  }
+}

+ 21 - 0
RNCode/node_modules/on-headers/HISTORY.md

@@ -0,0 +1,21 @@
+1.0.2 / 2019-02-21
+==================
+
+  * Fix `res.writeHead` patch missing return value
+
+1.0.1 / 2015-09-29
+==================
+
+  * perf: enable strict mode
+
+1.0.0 / 2014-08-10
+==================
+
+  * Honor `res.statusCode` change in `listener`
+  * Move to `jshttp` organization
+  * Prevent `arguments`-related de-opt
+
+0.0.0 / 2014-05-13
+==================
+
+  * Initial implementation

+ 22 - 0
RNCode/node_modules/on-headers/LICENSE

@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2014 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 81 - 0
RNCode/node_modules/on-headers/README.md

@@ -0,0 +1,81 @@
+# on-headers
+
+[![NPM Version][npm-version-image]][npm-url]
+[![NPM Downloads][npm-downloads-image]][npm-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Execute a listener when a response is about to write headers.
+
+## Installation
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install on-headers
+```
+
+## API
+
+<!-- eslint-disable no-unused-vars -->
+
+```js
+var onHeaders = require('on-headers')
+```
+
+### onHeaders(res, listener)
+
+This will add the listener `listener` to fire when headers are emitted for `res`.
+The listener is passed the `response` object as it's context (`this`). Headers are
+considered to be emitted only once, right before they are sent to the client.
+
+When this is called multiple times on the same `res`, the `listener`s are fired
+in the reverse order they were added.
+
+## Examples
+
+```js
+var http = require('http')
+var onHeaders = require('on-headers')
+
+http
+  .createServer(onRequest)
+  .listen(3000)
+
+function addPoweredBy () {
+  // set if not set by end of request
+  if (!this.getHeader('X-Powered-By')) {
+    this.setHeader('X-Powered-By', 'Node.js')
+  }
+}
+
+function onRequest (req, res) {
+  onHeaders(res, addPoweredBy)
+
+  res.setHeader('Content-Type', 'text/plain')
+  res.end('hello!')
+}
+```
+
+## Testing
+
+```sh
+$ npm test
+```
+
+## License
+
+[MIT](LICENSE)
+
+[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/on-headers/master
+[coveralls-url]: https://coveralls.io/r/jshttp/on-headers?branch=master
+[node-version-image]: https://badgen.net/npm/node/on-headers
+[node-version-url]: https://nodejs.org/en/download
+[npm-downloads-image]: https://badgen.net/npm/dm/on-headers
+[npm-url]: https://npmjs.org/package/on-headers
+[npm-version-image]: https://badgen.net/npm/v/on-headers
+[travis-image]: https://badgen.net/travis/jshttp/on-headers/master
+[travis-url]: https://travis-ci.org/jshttp/on-headers

+ 132 - 0
RNCode/node_modules/on-headers/index.js

@@ -0,0 +1,132 @@
+/*!
+ * on-headers
+ * Copyright(c) 2014 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = onHeaders
+
+/**
+ * Create a replacement writeHead method.
+ *
+ * @param {function} prevWriteHead
+ * @param {function} listener
+ * @private
+ */
+
+function createWriteHead (prevWriteHead, listener) {
+  var fired = false
+
+  // return function with core name and argument list
+  return function writeHead (statusCode) {
+    // set headers from arguments
+    var args = setWriteHeadHeaders.apply(this, arguments)
+
+    // fire listener
+    if (!fired) {
+      fired = true
+      listener.call(this)
+
+      // pass-along an updated status code
+      if (typeof args[0] === 'number' && this.statusCode !== args[0]) {
+        args[0] = this.statusCode
+        args.length = 1
+      }
+    }
+
+    return prevWriteHead.apply(this, args)
+  }
+}
+
+/**
+ * Execute a listener when a response is about to write headers.
+ *
+ * @param {object} res
+ * @return {function} listener
+ * @public
+ */
+
+function onHeaders (res, listener) {
+  if (!res) {
+    throw new TypeError('argument res is required')
+  }
+
+  if (typeof listener !== 'function') {
+    throw new TypeError('argument listener must be a function')
+  }
+
+  res.writeHead = createWriteHead(res.writeHead, listener)
+}
+
+/**
+ * Set headers contained in array on the response object.
+ *
+ * @param {object} res
+ * @param {array} headers
+ * @private
+ */
+
+function setHeadersFromArray (res, headers) {
+  for (var i = 0; i < headers.length; i++) {
+    res.setHeader(headers[i][0], headers[i][1])
+  }
+}
+
+/**
+ * Set headers contained in object on the response object.
+ *
+ * @param {object} res
+ * @param {object} headers
+ * @private
+ */
+
+function setHeadersFromObject (res, headers) {
+  var keys = Object.keys(headers)
+  for (var i = 0; i < keys.length; i++) {
+    var k = keys[i]
+    if (k) res.setHeader(k, headers[k])
+  }
+}
+
+/**
+ * Set headers and other properties on the response object.
+ *
+ * @param {number} statusCode
+ * @private
+ */
+
+function setWriteHeadHeaders (statusCode) {
+  var length = arguments.length
+  var headerIndex = length > 1 && typeof arguments[1] === 'string'
+    ? 2
+    : 1
+
+  var headers = length >= headerIndex + 1
+    ? arguments[headerIndex]
+    : undefined
+
+  this.statusCode = statusCode
+
+  if (Array.isArray(headers)) {
+    // handle array case
+    setHeadersFromArray(this, headers)
+  } else if (headers) {
+    // handle object case
+    setHeadersFromObject(this, headers)
+  }
+
+  // copy leading arguments
+  var args = new Array(Math.min(length, headerIndex))
+  for (var i = 0; i < args.length; i++) {
+    args[i] = arguments[i]
+  }
+
+  return args
+}

+ 42 - 0
RNCode/node_modules/on-headers/package.json

@@ -0,0 +1,42 @@
+{
+  "name": "on-headers",
+  "description": "Execute a listener when a response is about to write headers",
+  "version": "1.0.2",
+  "author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
+  "license": "MIT",
+  "keywords": [
+    "event",
+    "headers",
+    "http",
+    "onheaders"
+  ],
+  "repository": "jshttp/on-headers",
+  "devDependencies": {
+    "eslint": "5.14.1",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.16.0",
+    "eslint-plugin-markdown": "1.0.0",
+    "eslint-plugin-node": "8.0.1",
+    "eslint-plugin-promise": "4.0.1",
+    "eslint-plugin-standard": "4.0.0",
+    "istanbul": "0.4.5",
+    "mocha": "6.0.1",
+    "supertest": "3.4.2"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "README.md",
+    "index.js"
+  ],
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+    "version": "node scripts/version-history.js && git add HISTORY.md"
+  }
+}

+ 15 - 0
RNCode/node_modules/once/LICENSE

@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and 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.

+ 79 - 0
RNCode/node_modules/once/README.md

@@ -0,0 +1,79 @@
+# once
+
+Only call a function once.
+
+## usage
+
+```javascript
+var once = require('once')
+
+function load (file, cb) {
+  cb = once(cb)
+  loader.load('file')
+  loader.once('load', cb)
+  loader.once('error', cb)
+}
+```
+
+Or add to the Function.prototype in a responsible way:
+
+```javascript
+// only has to be done once
+require('once').proto()
+
+function load (file, cb) {
+  cb = cb.once()
+  loader.load('file')
+  loader.once('load', cb)
+  loader.once('error', cb)
+}
+```
+
+Ironically, the prototype feature makes this module twice as
+complicated as necessary.
+
+To check whether you function has been called, use `fn.called`. Once the
+function is called for the first time the return value of the original
+function is saved in `fn.value` and subsequent calls will continue to
+return this value.
+
+```javascript
+var once = require('once')
+
+function load (cb) {
+  cb = once(cb)
+  var stream = createStream()
+  stream.once('data', cb)
+  stream.once('end', function () {
+    if (!cb.called) cb(new Error('not found'))
+  })
+}
+```
+
+## `once.strict(func)`
+
+Throw an error if the function is called twice.
+
+Some functions are expected to be called only once. Using `once` for them would
+potentially hide logical errors.
+
+In the example below, the `greet` function has to call the callback only once:
+
+```javascript
+function greet (name, cb) {
+  // return is missing from the if statement
+  // when no name is passed, the callback is called twice
+  if (!name) cb('Hello anonymous')
+  cb('Hello ' + name)
+}
+
+function log (msg) {
+  console.log(msg)
+}
+
+// this will print 'Hello anonymous' but the logical error will be missed
+greet(null, once(msg))
+
+// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time
+greet(null, once.strict(msg))
+```

+ 42 - 0
RNCode/node_modules/once/once.js

@@ -0,0 +1,42 @@
+var wrappy = require('wrappy')
+module.exports = wrappy(once)
+module.exports.strict = wrappy(onceStrict)
+
+once.proto = once(function () {
+  Object.defineProperty(Function.prototype, 'once', {
+    value: function () {
+      return once(this)
+    },
+    configurable: true
+  })
+
+  Object.defineProperty(Function.prototype, 'onceStrict', {
+    value: function () {
+      return onceStrict(this)
+    },
+    configurable: true
+  })
+})
+
+function once (fn) {
+  var f = function () {
+    if (f.called) return f.value
+    f.called = true
+    return f.value = fn.apply(this, arguments)
+  }
+  f.called = false
+  return f
+}
+
+function onceStrict (fn) {
+  var f = function () {
+    if (f.called)
+      throw new Error(f.onceError)
+    f.called = true
+    return f.value = fn.apply(this, arguments)
+  }
+  var name = fn.name || 'Function wrapped with `once`'
+  f.onceError = name + " shouldn't be called more than once"
+  f.called = false
+  return f
+}

+ 33 - 0
RNCode/node_modules/once/package.json

@@ -0,0 +1,33 @@
+{
+  "name": "once",
+  "version": "1.4.0",
+  "description": "Run a function exactly one time",
+  "main": "once.js",
+  "directories": {
+    "test": "test"
+  },
+  "dependencies": {
+    "wrappy": "1"
+  },
+  "devDependencies": {
+    "tap": "^7.0.1"
+  },
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "files": [
+    "once.js"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/isaacs/once"
+  },
+  "keywords": [
+    "once",
+    "function",
+    "one",
+    "single"
+  ],
+  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
+  "license": "ISC"
+}

+ 64 - 0
RNCode/node_modules/onetime/index.d.ts

@@ -0,0 +1,64 @@
+declare namespace onetime {
+	interface Options {
+		/**
+		Throw an error when called more than once.
+
+		@default false
+		*/
+		throw?: boolean;
+	}
+}
+
+declare const onetime: {
+	/**
+	Ensure a function is only called once. When called multiple times it will return the return value from the first call.
+
+	@param fn - Function that should only be called once.
+	@returns A function that only calls `fn` once.
+
+	@example
+	```
+	import onetime = require('onetime');
+
+	let i = 0;
+
+	const foo = onetime(() => ++i);
+
+	foo(); //=> 1
+	foo(); //=> 1
+	foo(); //=> 1
+
+	onetime.callCount(foo); //=> 3
+	```
+	*/
+	<ArgumentsType extends unknown[], ReturnType>(
+		fn: (...arguments: ArgumentsType) => ReturnType,
+		options?: onetime.Options
+	): (...arguments: ArgumentsType) => ReturnType;
+
+	/**
+	Get the number of times `fn` has been called.
+
+	@param fn - Function to get call count from.
+	@returns A number representing how many times `fn` has been called.
+
+	@example
+	```
+	import onetime = require('onetime');
+
+	const foo = onetime(() => {});
+	foo();
+	foo();
+	foo();
+
+	console.log(onetime.callCount(foo));
+	//=> 3
+	```
+	*/
+	callCount(fn: (...arguments: any[]) => unknown): number;
+
+	// TODO: Remove this for the next major release
+	default: typeof onetime;
+};
+
+export = onetime;

+ 44 - 0
RNCode/node_modules/onetime/index.js

@@ -0,0 +1,44 @@
+'use strict';
+const mimicFn = require('mimic-fn');
+
+const calledFunctions = new WeakMap();
+
+const onetime = (function_, options = {}) => {
+	if (typeof function_ !== 'function') {
+		throw new TypeError('Expected a function');
+	}
+
+	let returnValue;
+	let callCount = 0;
+	const functionName = function_.displayName || function_.name || '<anonymous>';
+
+	const onetime = function (...arguments_) {
+		calledFunctions.set(onetime, ++callCount);
+
+		if (callCount === 1) {
+			returnValue = function_.apply(this, arguments_);
+			function_ = null;
+		} else if (options.throw === true) {
+			throw new Error(`Function \`${functionName}\` can only be called once`);
+		}
+
+		return returnValue;
+	};
+
+	mimicFn(onetime, function_);
+	calledFunctions.set(onetime, callCount);
+
+	return onetime;
+};
+
+module.exports = onetime;
+// TODO: Remove this for the next major release
+module.exports.default = onetime;
+
+module.exports.callCount = function_ => {
+	if (!calledFunctions.has(function_)) {
+		throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
+	}
+
+	return calledFunctions.get(function_);
+};

+ 9 - 0
RNCode/node_modules/onetime/license

@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 43 - 0
RNCode/node_modules/onetime/package.json

@@ -0,0 +1,43 @@
+{
+	"name": "onetime",
+	"version": "5.1.2",
+	"description": "Ensure a function is only called once",
+	"license": "MIT",
+	"repository": "sindresorhus/onetime",
+	"funding": "https://github.com/sponsors/sindresorhus",
+	"author": {
+		"name": "Sindre Sorhus",
+		"email": "sindresorhus@gmail.com",
+		"url": "https://sindresorhus.com"
+	},
+	"engines": {
+		"node": ">=6"
+	},
+	"scripts": {
+		"test": "xo && ava && tsd"
+	},
+	"files": [
+		"index.js",
+		"index.d.ts"
+	],
+	"keywords": [
+		"once",
+		"function",
+		"one",
+		"onetime",
+		"func",
+		"fn",
+		"single",
+		"call",
+		"called",
+		"prevent"
+	],
+	"dependencies": {
+		"mimic-fn": "^2.1.0"
+	},
+	"devDependencies": {
+		"ava": "^1.4.1",
+		"tsd": "^0.7.1",
+		"xo": "^0.24.0"
+	}
+}

+ 94 - 0
RNCode/node_modules/onetime/readme.md

@@ -0,0 +1,94 @@
+# onetime [![Build Status](https://travis-ci.com/sindresorhus/onetime.svg?branch=master)](https://travis-ci.com/github/sindresorhus/onetime)
+
+> Ensure a function is only called once
+
+When called multiple times it will return the return value from the first call.
+
+*Unlike the module [once](https://github.com/isaacs/once), this one isn't naughty and extending `Function.prototype`.*
+
+## Install
+
+```
+$ npm install onetime
+```
+
+## Usage
+
+```js
+const onetime = require('onetime');
+
+let i = 0;
+
+const foo = onetime(() => ++i);
+
+foo(); //=> 1
+foo(); //=> 1
+foo(); //=> 1
+
+onetime.callCount(foo); //=> 3
+```
+
+```js
+const onetime = require('onetime');
+
+const foo = onetime(() => {}, {throw: true});
+
+foo();
+
+foo();
+//=> Error: Function `foo` can only be called once
+```
+
+## API
+
+### onetime(fn, options?)
+
+Returns a function that only calls `fn` once.
+
+#### fn
+
+Type: `Function`
+
+Function that should only be called once.
+
+#### options
+
+Type: `object`
+
+##### throw
+
+Type: `boolean`\
+Default: `false`
+
+Throw an error when called more than once.
+
+### onetime.callCount(fn)
+
+Returns a number representing how many times `fn` has been called.
+
+Note: It throws an error if you pass in a function that is not wrapped by `onetime`.
+
+```js
+const onetime = require('onetime');
+
+const foo = onetime(() => {});
+
+foo();
+foo();
+foo();
+
+console.log(onetime.callCount(foo));
+//=> 3
+```
+
+#### fn
+
+Type: `Function`
+
+Function to get call count from.
+
+## onetime for enterprise
+
+Available as part of the Tidelift Subscription.
+
+The maintainers of onetime and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-onetime?utm_source=npm-onetime&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)

+ 70 - 0
RNCode/node_modules/open/index.d.ts

@@ -0,0 +1,70 @@
+/// <reference types="node"/>
+import {ChildProcess} from 'child_process';
+
+declare namespace open {
+	interface Options {
+		/**
+		Wait for the opened app to exit before fulfilling the promise. If `false` it's fulfilled immediately when opening the app.
+
+		Note that it waits for the app to exit, not just for the window to close.
+
+		On Windows, you have to explicitly specify an app for it to be able to wait.
+
+		@default false
+		*/
+		readonly wait?: boolean;
+
+		/**
+		__macOS only__
+
+		Do not bring the app to the foreground.
+
+		@default false
+		*/
+		readonly background?: boolean;
+
+		/**
+		Specify the app to open the `target` with, or an array with the app and app arguments.
+
+		The app name is platform dependent. Don't hard code it in reusable modules. For example, Chrome is `google chrome` on macOS, `google-chrome` on Linux and `chrome` on Windows.
+
+		You may also pass in the app's full path. For example on WSL, this can be `/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe` for the Windows installation of Chrome.
+		*/
+		readonly app?: string | readonly string[];
+	}
+}
+
+/**
+Open stuff like URLs, files, executables. Cross-platform.
+
+Uses the command `open` on OS X, `start` on Windows and `xdg-open` on other platforms.
+
+@param target - The thing you want to open. Can be a URL, file, or executable. Opens in the default app for the file type. For example, URLs open in your default browser.
+@returns The [spawned child process](https://nodejs.org/api/child_process.html#child_process_class_childprocess). You would normally not need to use this for anything, but it can be useful if you'd like to attach custom event listeners or perform other operations directly on the spawned process.
+
+@example
+```
+import open = require('open');
+
+// Opens the image in the default image viewer
+(async () => {
+	await open('unicorn.png', {wait: true});
+	console.log('The image viewer app closed');
+
+	// Opens the url in the default browser
+	await open('https://sindresorhus.com');
+
+	// Specify the app to open in
+	await open('https://sindresorhus.com', {app: 'firefox'});
+
+	// Specify app arguments
+	await open('https://sindresorhus.com', {app: ['google chrome', '--incognito']});
+})();
+```
+*/
+declare function open(
+	target: string,
+	options?: open.Options
+): Promise<ChildProcess>;
+
+export = open;

+ 134 - 0
RNCode/node_modules/open/index.js

@@ -0,0 +1,134 @@
+'use strict';
+const {promisify} = require('util');
+const path = require('path');
+const childProcess = require('child_process');
+const fs = require('fs');
+const isWsl = require('is-wsl');
+
+const pAccess = promisify(fs.access);
+const pExecFile = promisify(childProcess.execFile);
+
+// Path to included `xdg-open`
+const localXdgOpenPath = path.join(__dirname, 'xdg-open');
+
+// Convert a path from WSL format to Windows format:
+// `/mnt/c/Program Files/Example/MyApp.exe` → `C:\Program Files\Example\MyApp.exe`
+const wslToWindowsPath = async path => {
+	const {stdout} = await pExecFile('wslpath', ['-w', path]);
+	return stdout.trim();
+};
+
+module.exports = async (target, options) => {
+	if (typeof target !== 'string') {
+		throw new TypeError('Expected a `target`');
+	}
+
+	options = {
+		wait: false,
+		background: false,
+		...options
+	};
+
+	let command;
+	let appArguments = [];
+	const cliArguments = [];
+	const childProcessOptions = {};
+
+	if (Array.isArray(options.app)) {
+		appArguments = options.app.slice(1);
+		options.app = options.app[0];
+	}
+
+	if (process.platform === 'darwin') {
+		command = 'open';
+
+		if (options.wait) {
+			cliArguments.push('--wait-apps');
+		}
+
+		if (options.background) {
+			cliArguments.push('--background');
+		}
+
+		if (options.app) {
+			cliArguments.push('-a', options.app);
+		}
+	} else if (process.platform === 'win32' || isWsl) {
+		command = 'cmd' + (isWsl ? '.exe' : '');
+		cliArguments.push('/c', 'start', '""', '/b');
+		target = target.replace(/&/g, '^&');
+
+		if (options.wait) {
+			cliArguments.push('/wait');
+		}
+
+		if (options.app) {
+			if (isWsl && options.app.startsWith('/mnt/')) {
+				const windowsPath = await wslToWindowsPath(options.app);
+				options.app = windowsPath;
+			}
+
+			cliArguments.push(options.app);
+		}
+
+		if (appArguments.length > 0) {
+			cliArguments.push(...appArguments);
+		}
+	} else {
+		if (options.app) {
+			command = options.app;
+		} else {
+			// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.
+			const isBundled = !__dirname || __dirname === '/';
+
+			// Check if local `xdg-open` exists and is executable.
+			let exeLocalXdgOpen = false;
+			try {
+				await pAccess(localXdgOpenPath, fs.constants.X_OK);
+				exeLocalXdgOpen = true;
+			} catch (error) {}
+
+			const useSystemXdgOpen = process.versions.electron ||
+				process.platform === 'android' || isBundled || !exeLocalXdgOpen;
+			command = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;
+		}
+
+		if (appArguments.length > 0) {
+			cliArguments.push(...appArguments);
+		}
+
+		if (!options.wait) {
+			// `xdg-open` will block the process unless stdio is ignored
+			// and it's detached from the parent even if it's unref'd.
+			childProcessOptions.stdio = 'ignore';
+			childProcessOptions.detached = true;
+		}
+	}
+
+	cliArguments.push(target);
+
+	if (process.platform === 'darwin' && appArguments.length > 0) {
+		cliArguments.push('--args', ...appArguments);
+	}
+
+	const subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);
+
+	if (options.wait) {
+		return new Promise((resolve, reject) => {
+			subprocess.once('error', reject);
+
+			subprocess.once('close', exitCode => {
+				if (exitCode > 0) {
+					reject(new Error(`Exited with code ${exitCode}`));
+					return;
+				}
+
+				resolve(subprocess);
+			});
+		});
+	}
+
+	subprocess.unref();
+
+	return subprocess;
+};

+ 9 - 0
RNCode/node_modules/open/license

@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 58 - 0
RNCode/node_modules/open/package.json

@@ -0,0 +1,58 @@
+{
+	"name": "open",
+	"version": "6.4.0",
+	"description": "Open stuff like URLs, files, executables. Cross-platform.",
+	"license": "MIT",
+	"repository": "sindresorhus/open",
+	"author": {
+		"name": "Sindre Sorhus",
+		"email": "sindresorhus@gmail.com",
+		"url": "sindresorhus.com"
+	},
+	"engines": {
+		"node": ">=8"
+	},
+	"scripts": {
+		"test": "xo && tsd"
+	},
+	"files": [
+		"index.js",
+		"index.d.ts",
+		"xdg-open"
+	],
+	"keywords": [
+		"app",
+		"open",
+		"opener",
+		"opens",
+		"launch",
+		"start",
+		"xdg-open",
+		"xdg",
+		"default",
+		"cmd",
+		"browser",
+		"editor",
+		"executable",
+		"exe",
+		"url",
+		"urls",
+		"arguments",
+		"args",
+		"spawn",
+		"exec",
+		"child",
+		"process",
+		"website",
+		"file"
+	],
+	"dependencies": {
+		"is-wsl": "^1.1.0"
+	},
+	"devDependencies": {
+		"@types/node": "^11.13.6",
+		"ava": "^1.4.0",
+		"tsd": "^0.7.2",
+		"xo": "^0.24.0"
+	}
+}

+ 113 - 0
RNCode/node_modules/open/readme.md

@@ -0,0 +1,113 @@
+# open
+
+> Open stuff like URLs, files, executables. Cross-platform.
+
+If need this for Electron, use [`shell.openItem()`](https://electronjs.org/docs/api/shell#shellopenitemfullpath) instead.
+
+Note: The original [`open` package](https://github.com/pwnall/node-open) was recently deprecated in favor of this package, and we got the name, so this package is now named `open` instead of `opn`. If you're upgrading from the original `open` package (`open@0.0.5` or lower), keep in mind that the API is different.
+
+#### Why?
+
+- Actively maintained.
+- Supports app arguments.
+- Safer as it uses `spawn` instead of `exec`.
+- Fixes most of the open original `node-open` issues.
+- Includes the latest [`xdg-open` script](http://cgit.freedesktop.org/xdg/xdg-utils/commit/?id=c55122295c2a480fa721a9614f0e2d42b2949c18) for Linux.
+- Supports WSL paths to Windows apps under `/mnt/*`.
+
+
+## Install
+
+```
+$ npm install open
+```
+
+
+## Usage
+
+```js
+const open = require('open');
+
+(async () => {
+	// Opens the image in the default image viewer and waits for the opened app to quit
+	await open('unicorn.png', {wait: true}); 
+	console.log('The image viewer app quit');
+
+	// Opens the URL in the default browser
+	await open('https://sindresorhus.com');
+
+	// Opens the URL in a specified browser
+	await open('https://sindresorhus.com', {app: 'firefox'});
+
+	// Specify app arguments
+	await open('https://sindresorhus.com', {app: ['google chrome', '--incognito']});
+})();
+```
+
+
+## API
+
+It uses the command `open` on macOS, `start` on Windows and `xdg-open` on other platforms.
+
+### open(target, options?)
+
+Returns a promise for the [spawned child process](https://nodejs.org/api/child_process.html#child_process_class_childprocess). You would normally not need to use this for anything, but it can be useful if you'd like to attach custom event listeners or perform other operations directly on the spawned process.
+
+#### target
+
+Type: `string`
+
+The thing you want to open. Can be a URL, file, or executable.
+
+Opens in the default app for the file type. For example, URLs opens in your default browser.
+
+#### options
+
+Type: `object`
+
+##### wait
+
+Type: `boolean`<br>
+Default: `false`
+
+Wait for the opened app to exit before fulfilling the promise. If `false` it's fulfilled immediately when opening the app.
+
+Note that it waits for the app to exit, not just for the window to close.
+
+On Windows, you have to explicitly specify an app for it to be able to wait.
+
+##### background <sup>(macOS only)</sup>
+
+Type: `boolean`<br>
+Default: `false`
+
+Do not bring the app to the foreground.
+
+##### app
+
+Type: `string | string[]`
+
+Specify the app to open the `target` with, or an array with the app and app arguments.
+
+The app name is platform dependent. Don't hard code it in reusable modules. For example, Chrome is `google chrome` on macOS, `google-chrome` on Linux and `chrome` on Windows.
+
+You may also pass in the app's full path. For example on WSL, this can be `/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe` for the Windows installation of Chrome.
+
+
+## Related
+
+- [open-cli](https://github.com/sindresorhus/open-cli) - CLI for this module
+- [open-editor](https://github.com/sindresorhus/open-editor) - Open files in your editor at a specific line and column
+
+
+---
+
+<div align="center">
+	<b>
+		<a href="https://tidelift.com/subscription/pkg/npm-opn?utm_source=npm-opn&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
+	</b>
+	<br>
+	<sub>
+		Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
+	</sub>
+</div>

+ 1066 - 0
RNCode/node_modules/open/xdg-open

@@ -0,0 +1,1066 @@
+#!/bin/sh
+#---------------------------------------------
+#   xdg-open
+#
+#   Utility script to open a URL in the registered default application.
+#
+#   Refer to the usage() function below for usage.
+#
+#   Copyright 2009-2010, Fathi Boudra <fabo@freedesktop.org>
+#   Copyright 2009-2010, Rex Dieter <rdieter@fedoraproject.org>
+#   Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at>
+#   Copyright 2006, Jeremy White <jwhite@codeweavers.com>
+#
+#   LICENSE:
+#
+#   Permission is hereby granted, free of charge, to any person obtaining a
+#   copy of this software and associated documentation files (the "Software"),
+#   to deal in the Software without restriction, including without limitation
+#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#   and/or sell copies of the Software, and to permit persons to whom the
+#   Software is furnished to do so, subject to the following conditions:
+#
+#   The above copyright notice and this permission notice shall be included
+#   in all copies or substantial portions of the Software.
+#
+#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+#   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+#   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+#   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+#   OTHER DEALINGS IN THE SOFTWARE.
+#
+#---------------------------------------------
+
+manualpage()
+{
+cat << _MANUALPAGE
+Name
+
+   xdg-open -- opens a file or URL in the user's preferred
+   application
+
+Synopsis
+
+   xdg-open { file | URL }
+
+   xdg-open { --help | --manual | --version }
+
+Description
+
+   xdg-open opens a file or URL in the user's preferred
+   application. If a URL is provided the URL will be opened in the
+   user's preferred web browser. If a file is provided the file
+   will be opened in the preferred application for files of that
+   type. xdg-open supports file, ftp, http and https URLs.
+
+   xdg-open is for use inside a desktop session only. It is not
+   recommended to use xdg-open as root.
+
+Options
+
+   --help
+          Show command synopsis.
+
+   --manual
+          Show this manual page.
+
+   --version
+          Show the xdg-utils version information.
+
+Exit Codes
+
+   An exit code of 0 indicates success while a non-zero exit code
+   indicates failure. The following failure codes can be returned:
+
+   1
+          Error in command line syntax.
+
+   2
+          One of the files passed on the command line did not
+          exist.
+
+   3
+          A required tool could not be found.
+
+   4
+          The action failed.
+
+See Also
+
+   xdg-mime(1), xdg-settings(1), MIME applications associations
+   specification
+
+Examples
+
+xdg-open 'http://www.freedesktop.org/'
+
+   Opens the freedesktop.org website in the user's default
+   browser.
+
+xdg-open /tmp/foobar.png
+
+   Opens the PNG image file /tmp/foobar.png in the user's default
+   image viewing application.
+_MANUALPAGE
+}
+
+usage()
+{
+cat << _USAGE
+   xdg-open -- opens a file or URL in the user's preferred
+   application
+
+Synopsis
+
+   xdg-open { file | URL }
+
+   xdg-open { --help | --manual | --version }
+
+_USAGE
+}
+
+#@xdg-utils-common@
+
+#----------------------------------------------------------------------------
+#   Common utility functions included in all XDG wrapper scripts
+#----------------------------------------------------------------------------
+
+DEBUG()
+{
+  [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0;
+  [ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0;
+  shift
+  echo "$@" >&2
+}
+
+# This handles backslashes but not quote marks.
+first_word()
+{
+    read first rest
+    echo "$first"
+}
+
+#-------------------------------------------------------------
+# map a binary to a .desktop file
+binary_to_desktop_file()
+{
+    search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
+    binary="`which "$1"`"
+    binary="`readlink -f "$binary"`"
+    base="`basename "$binary"`"
+    IFS=:
+    for dir in $search; do
+        unset IFS
+        [ "$dir" ] || continue
+        [ -d "$dir/applications" ] || [ -d "$dir/applnk" ] || continue
+        for file in "$dir"/applications/*.desktop "$dir"/applications/*/*.desktop "$dir"/applnk/*.desktop "$dir"/applnk/*/*.desktop; do
+            [ -r "$file" ] || continue
+            # Check to make sure it's worth the processing.
+            grep -q "^Exec.*$base" "$file" || continue
+            # Make sure it's a visible desktop file (e.g. not "preferred-web-browser.desktop").
+            grep -Eq "^(NoDisplay|Hidden)=true" "$file" && continue
+            command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | first_word`"
+            command="`which "$command"`"
+            if [ x"`readlink -f "$command"`" = x"$binary" ]; then
+                # Fix any double slashes that got added path composition
+                echo "$file" | sed -e 's,//*,/,g'
+                return
+            fi
+        done
+    done
+}
+
+#-------------------------------------------------------------
+# map a .desktop file to a binary
+desktop_file_to_binary()
+{
+    search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
+    desktop="`basename "$1"`"
+    IFS=:
+    for dir in $search; do
+        unset IFS
+        [ "$dir" ] && [ -d "$dir/applications" ] || [ -d "$dir/applnk" ] || continue
+        # Check if desktop file contains -
+        if [ "${desktop#*-}" != "$desktop" ]; then
+            vendor=${desktop%-*}
+            app=${desktop#*-}
+            if [ -r $dir/applications/$vendor/$app ]; then
+                file_path=$dir/applications/$vendor/$app
+            elif [ -r $dir/applnk/$vendor/$app ]; then
+                file_path=$dir/applnk/$vendor/$app
+            fi
+        fi
+        if test -z "$file_path" ; then
+            for indir in "$dir"/applications/ "$dir"/applications/*/ "$dir"/applnk/ "$dir"/applnk/*/; do
+                file="$indir/$desktop"
+                if [ -r "$file" ]; then
+                    file_path=$file
+                    break
+                fi
+            done
+        fi
+        if [ -r "$file_path" ]; then
+            # Remove any arguments (%F, %f, %U, %u, etc.).
+            command="`grep -E "^Exec(\[[^]=]*])?=" "$file_path" | cut -d= -f 2- | first_word`"
+            command="`which "$command"`"
+            readlink -f "$command"
+            return
+        fi
+    done
+}
+
+#-------------------------------------------------------------
+# Exit script on successfully completing the desired operation
+
+exit_success()
+{
+    if [ $# -gt 0 ]; then
+        echo "$@"
+        echo
+    fi
+
+    exit 0
+}
+
+
+#-----------------------------------------
+# Exit script on malformed arguments, not enough arguments
+# or missing required option.
+# prints usage information
+
+exit_failure_syntax()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+        echo "Try 'xdg-open --help' for more information." >&2
+    else
+        usage
+        echo "Use 'man xdg-open' or 'xdg-open --manual' for additional info."
+    fi
+
+    exit 1
+}
+
+#-------------------------------------------------------------
+# Exit script on missing file specified on command line
+
+exit_failure_file_missing()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+    fi
+
+    exit 2
+}
+
+#-------------------------------------------------------------
+# Exit script on failure to locate necessary tool applications
+
+exit_failure_operation_impossible()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+    fi
+
+    exit 3
+}
+
+#-------------------------------------------------------------
+# Exit script on failure returned by a tool application
+
+exit_failure_operation_failed()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+    fi
+
+    exit 4
+}
+
+#------------------------------------------------------------
+# Exit script on insufficient permission to read a specified file
+
+exit_failure_file_permission_read()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+    fi
+
+    exit 5
+}
+
+#------------------------------------------------------------
+# Exit script on insufficient permission to write a specified file
+
+exit_failure_file_permission_write()
+{
+    if [ $# -gt 0 ]; then
+        echo "xdg-open: $@" >&2
+    fi
+
+    exit 6
+}
+
+check_input_file()
+{
+    if [ ! -e "$1" ]; then
+        exit_failure_file_missing "file '$1' does not exist"
+    fi
+    if [ ! -r "$1" ]; then
+        exit_failure_file_permission_read "no permission to read file '$1'"
+    fi
+}
+
+check_vendor_prefix()
+{
+    file_label="$2"
+    [ -n "$file_label" ] || file_label="filename"
+    file=`basename "$1"`
+    case "$file" in
+       [[:alpha:]]*-*)
+         return
+         ;;
+    esac
+
+    echo "xdg-open: $file_label '$file' does not have a proper vendor prefix" >&2
+    echo 'A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated' >&2
+    echo 'with a dash ("-"). An example '"$file_label"' is '"'example-$file'" >&2
+    echo "Use --novendor to override or 'xdg-open --manual' for additional info." >&2
+    exit 1
+}
+
+check_output_file()
+{
+    # if the file exists, check if it is writeable
+    # if it does not exists, check if we are allowed to write on the directory
+    if [ -e "$1" ]; then
+        if [ ! -w "$1" ]; then
+            exit_failure_file_permission_write "no permission to write to file '$1'"
+        fi
+    else
+        DIR=`dirname "$1"`
+        if [ ! -w "$DIR" ] || [ ! -x "$DIR" ]; then
+            exit_failure_file_permission_write "no permission to create file '$1'"
+        fi
+    fi
+}
+
+#----------------------------------------
+# Checks for shared commands, e.g. --help
+
+check_common_commands()
+{
+    while [ $# -gt 0 ] ; do
+        parm="$1"
+        shift
+
+        case "$parm" in
+            --help)
+            usage
+            echo "Use 'man xdg-open' or 'xdg-open --manual' for additional info."
+            exit_success
+            ;;
+
+            --manual)
+            manualpage
+            exit_success
+            ;;
+
+            --version)
+            echo "xdg-open 1.1.3"
+            exit_success
+            ;;
+        esac
+    done
+}
+
+check_common_commands "$@"
+
+[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL;
+if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then
+    # Be silent
+    xdg_redirect_output=" > /dev/null 2> /dev/null"
+else
+    # All output to stderr
+    xdg_redirect_output=" >&2"
+fi
+
+#--------------------------------------
+# Checks for known desktop environments
+# set variable DE to the desktop environments name, lowercase
+
+detectDE()
+{
+    # see https://bugs.freedesktop.org/show_bug.cgi?id=34164
+    unset GREP_OPTIONS
+
+    if [ -n "${XDG_CURRENT_DESKTOP}" ]; then
+      case "${XDG_CURRENT_DESKTOP}" in
+         # only recently added to menu-spec, pre-spec X- still in use
+         Cinnamon|X-Cinnamon)
+           DE=cinnamon;
+           ;;
+         ENLIGHTENMENT)
+           DE=enlightenment;
+           ;;
+         # GNOME, GNOME-Classic:GNOME, or GNOME-Flashback:GNOME
+         GNOME*)
+           DE=gnome;
+           ;;
+         KDE)
+           DE=kde;
+           ;;
+         # Deepin Desktop Environments
+         DEEPIN|Deepin|deepin)
+           DE=dde;
+           ;;
+         LXDE)
+           DE=lxde;
+           ;;
+         LXQt)
+           DE=lxqt;
+           ;;
+         MATE)
+           DE=mate;
+           ;;
+         XFCE)
+           DE=xfce
+           ;;
+         X-Generic)
+           DE=generic
+           ;;
+      esac
+    fi
+
+    if [ x"$DE" = x"" ]; then
+      # classic fallbacks
+      if [ x"$KDE_FULL_SESSION" != x"" ]; then DE=kde;
+      elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
+      elif [ x"$MATE_DESKTOP_SESSION_ID" != x"" ]; then DE=mate;
+      elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1` ; then DE=gnome;
+      elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
+      elif xprop -root 2> /dev/null | grep -i '^xfce_desktop_window' >/dev/null 2>&1; then DE=xfce
+      elif echo $DESKTOP | grep -q '^Enlightenment'; then DE=enlightenment;
+      elif [ x"$LXQT_SESSION_CONFIG" != x"" ]; then DE=lxqt;
+      fi
+    fi
+
+    if [ x"$DE" = x"" ]; then
+      # fallback to checking $DESKTOP_SESSION
+      case "$DESKTOP_SESSION" in
+         gnome)
+           DE=gnome;
+           ;;
+         LXDE|Lubuntu)
+           DE=lxde; 
+           ;;
+         MATE)
+           DE=mate;
+           ;;
+         xfce|xfce4|'Xfce Session')
+           DE=xfce;
+           ;;
+      esac
+    fi
+
+    if [ x"$DE" = x"" ]; then
+      # fallback to uname output for other platforms
+      case "$(uname 2>/dev/null)" in 
+        CYGWIN*)
+          DE=cygwin;
+          ;;
+        Darwin)
+          DE=darwin;
+          ;;
+      esac
+    fi
+
+    if [ x"$DE" = x"gnome" ]; then
+      # gnome-default-applications-properties is only available in GNOME 2.x
+      # but not in GNOME 3.x
+      which gnome-default-applications-properties > /dev/null 2>&1  || DE="gnome3"
+    fi
+
+    if [ -f "$XDG_RUNTIME_DIR/flatpak-info" ]; then
+      DE="flatpak"
+    fi
+}
+
+#----------------------------------------------------------------------------
+# kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4
+# It also always returns 1 in KDE 3.4 and earlier
+# Simply return 0 in such case
+
+kfmclient_fix_exit_code()
+{
+    version=`LC_ALL=C.UTF-8 kde-config --version 2>/dev/null | grep '^KDE'`
+    major=`echo $version | sed 's/KDE.*: \([0-9]\).*/\1/'`
+    minor=`echo $version | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/'`
+    release=`echo $version | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'`
+    test "$major" -gt 3 && return $1
+    test "$minor" -gt 5 && return $1
+    test "$release" -gt 4 && return $1
+    return 0
+}
+
+#----------------------------------------------------------------------------
+# Returns true if there is a graphical display attached.
+
+has_display()
+{
+    if [ -n "$DISPLAY" ] || [ -n "$WAYLAND_DISPLAY" ]; then
+        return 0
+    else
+        return 1
+    fi
+}
+
+# This handles backslashes but not quote marks.
+last_word()
+{
+    read first rest
+    echo "$rest"
+}
+
+# Get the value of a key in a desktop file's Desktop Entry group.
+# Example: Use get_key foo.desktop Exec
+# to get the values of the Exec= key for the Desktop Entry group.
+get_key()
+{
+    local file="${1}"
+    local key="${2}"
+    local desktop_entry=""
+
+    IFS_="${IFS}"
+    IFS=""
+    while read line
+    do
+        case "$line" in
+            "[Desktop Entry]")
+                desktop_entry="y"
+            ;;
+            # Reset match flag for other groups
+            "["*)
+                desktop_entry=""
+            ;;
+            "${key}="*)
+                # Only match Desktop Entry group
+                if [ -n "${desktop_entry}" ]
+                then
+                    echo "${line}" | cut -d= -f 2-
+                fi
+        esac
+    done < "${file}"
+    IFS="${IFS_}"
+}
+
+# Returns true if argument is a file:// URL or path
+is_file_url_or_path()
+{
+    if echo "$1" | grep -q '^file://' \
+            || ! echo "$1" | egrep -q '^[[:alpha:]+\.\-]+:'; then
+        return 0
+    else
+        return 1
+    fi
+}
+
+# If argument is a file URL, convert it to a (percent-decoded) path.
+# If not, leave it as it is.
+file_url_to_path()
+{
+    local file="$1"
+    if echo "$file" | grep -q '^file:///'; then
+        file=${file#file://}
+        file=${file%%#*}
+        file=$(echo "$file" | sed -r 's/\?.*$//')
+        local printf=printf
+        if [ -x /usr/bin/printf ]; then
+            printf=/usr/bin/printf
+        fi
+        file=$($printf "$(echo "$file" | sed -e 's@%\([a-f0-9A-F]\{2\}\)@\\x\1@g')")
+    fi
+    echo "$file"
+}
+
+open_cygwin()
+{
+    cygstart "$1"
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_darwin()
+{
+    open "$1"
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_kde()
+{
+    if [ -n "${KDE_SESSION_VERSION}" ]; then
+      case "${KDE_SESSION_VERSION}" in
+        4)
+          kde-open "$1"
+        ;;
+        5)
+          kde-open${KDE_SESSION_VERSION} "$1"
+        ;;
+      esac
+    else
+        kfmclient exec "$1"
+        kfmclient_fix_exit_code $?
+    fi
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_dde()
+{
+    if dde-open -version >/dev/null 2>&1; then
+        dde-open "$1"
+    else
+        open_generic "$1"
+    fi
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_gnome3()
+{
+    if gio help open 2>/dev/null 1>&2; then
+        gio open "$1"
+    elif gvfs-open --help 2>/dev/null 1>&2; then
+        gvfs-open "$1"
+    else
+        open_generic "$1"
+    fi
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_gnome()
+{
+    if gio help open 2>/dev/null 1>&2; then
+        gio open "$1"
+    elif gvfs-open --help 2>/dev/null 1>&2; then
+        gvfs-open "$1"
+    elif gnome-open --help 2>/dev/null 1>&2; then
+        gnome-open "$1"
+    else
+        open_generic "$1"
+    fi
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_mate()
+{
+    if gio help open 2>/dev/null 1>&2; then
+        gio open "$1"
+    elif gvfs-open --help 2>/dev/null 1>&2; then
+        gvfs-open "$1"
+    elif mate-open --help 2>/dev/null 1>&2; then
+        mate-open "$1"
+    else
+        open_generic "$1"
+    fi
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_xfce()
+{
+    if exo-open --help 2>/dev/null 1>&2; then
+        exo-open "$1"
+    elif gio help open 2>/dev/null 1>&2; then
+        gio open "$1"
+    elif gvfs-open --help 2>/dev/null 1>&2; then
+        gvfs-open "$1"
+    else
+        open_generic "$1"
+    fi
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_enlightenment()
+{
+    if enlightenment_open --help 2>/dev/null 1>&2; then
+        enlightenment_open "$1"
+    else
+        open_generic "$1"
+    fi
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_flatpak()
+{
+    gdbus call --session \
+        --dest org.freedesktop.portal.Desktop \
+        --object-path /org/freedesktop/portal/desktop \
+        --method org.freedesktop.portal.OpenURI.OpenURI \
+        "" "$1" {}
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+#-----------------------------------------
+# Recursively search .desktop file
+
+search_desktop_file()
+{
+    local default="$1"
+    local dir="$2"
+    local target="$3"
+
+    local file=""
+    # look for both vendor-app.desktop, vendor/app.desktop
+    if [ -r "$dir/$default" ]; then
+      file="$dir/$default"
+    elif [ -r "$dir/`echo $default | sed -e 's|-|/|'`" ]; then
+      file="$dir/`echo $default | sed -e 's|-|/|'`"
+    fi
+
+    if [ -r "$file" ] ; then
+        command="$(get_key "${file}" "Exec" | first_word)"
+        command_exec=`which $command 2>/dev/null`
+        icon="$(get_key "${file}" "Icon")"
+        # FIXME: Actually LC_MESSAGES should be used as described in
+        # http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s04.html
+        localised_name="$(get_key "${file}" "Name")"
+        set -- $(get_key "${file}" "Exec" | last_word)
+        # We need to replace any occurrence of "%f", "%F" and
+        # the like by the target file. We examine each
+        # argument and append the modified argument to the
+        # end then shift.
+        local args=$#
+        local replaced=0
+        while [ $args -gt 0 ]; do
+            case $1 in
+                %[c])
+                    replaced=1
+                    arg="${localised_name}"
+                    shift
+                    set -- "$@" "$arg"
+                    ;;
+                %[fFuU])
+                    replaced=1
+                    arg="$target"
+                    shift
+                    set -- "$@" "$arg"
+                    ;;
+                %[i])
+                    replaced=1
+                    shift
+                    set -- "$@" "--icon" "$icon"
+                    ;;
+                *)
+                    arg="$1"
+                    shift
+                    set -- "$@" "$arg"
+                    ;;
+            esac
+            args=$(( $args - 1 ))
+        done
+        [ $replaced -eq 1 ] || set -- "$@" "$target"
+        "$command_exec" "$@"
+
+        if [ $? -eq 0 ]; then
+            exit_success
+        fi
+    fi
+
+    for d in $dir/*/; do
+        [ -d "$d" ] && search_desktop_file "$default" "$d" "$target"
+    done
+}
+
+
+open_generic_xdg_mime()
+{
+    filetype="$2"
+    default=`xdg-mime query default "$filetype"`
+    if [ -n "$default" ] ; then
+        xdg_user_dir="$XDG_DATA_HOME"
+        [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
+
+        xdg_system_dirs="$XDG_DATA_DIRS"
+        [ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/
+
+DEBUG 3 "$xdg_user_dir:$xdg_system_dirs"
+        for x in `echo "$xdg_user_dir:$xdg_system_dirs" | sed 's/:/ /g'`; do
+            search_desktop_file "$default" "$x/applications/" "$1"
+        done
+    fi
+}
+
+open_generic_xdg_file_mime()
+{
+    filetype=`xdg-mime query filetype "$1" | sed "s/;.*//"`
+    open_generic_xdg_mime "$1" "$filetype"
+}
+
+open_generic_xdg_x_scheme_handler()
+{
+    scheme="`echo $1 | sed -n 's/\(^[[:alnum:]+\.-]*\):.*$/\1/p'`"
+    if [ -n $scheme ]; then
+        filetype="x-scheme-handler/$scheme"
+        open_generic_xdg_mime "$1" "$filetype"
+    fi
+}
+
+has_single_argument()
+{
+  test $# = 1
+}
+
+open_envvar()
+{
+    local oldifs="$IFS"
+    local browser browser_with_arg
+
+    IFS=":"
+    for browser in $BROWSER; do
+        IFS="$oldifs"
+
+        if [ -z "$browser" ]; then
+            continue
+        fi
+
+        if echo "$browser" | grep -q %s; then
+            # Avoid argument injection.
+            # See https://bugs.freedesktop.org/show_bug.cgi?id=103807
+            # URIs don't have IFS characters spaces anyway.
+            has_single_argument $1 && $(printf "$browser" "$1")
+        else
+            $browser "$1"
+        fi
+
+        if [ $? -eq 0 ]; then
+            exit_success
+        fi
+    done
+}
+
+open_generic()
+{
+    if is_file_url_or_path "$1"; then
+        local file="$(file_url_to_path "$1")"
+
+        check_input_file "$file"
+
+        if has_display; then
+            filetype=`xdg-mime query filetype "$file" | sed "s/;.*//"`
+            open_generic_xdg_mime "$file" "$filetype"
+        fi
+
+        if which run-mailcap 2>/dev/null 1>&2; then
+            run-mailcap --action=view "$file"
+            if [ $? -eq 0 ]; then
+                exit_success
+            fi
+        fi
+
+        if has_display && mimeopen -v 2>/dev/null 1>&2; then
+            mimeopen -L -n "$file"
+            if [ $? -eq 0 ]; then
+                exit_success
+            fi
+        fi
+    fi
+
+    if has_display; then
+        open_generic_xdg_x_scheme_handler "$1"
+    fi
+
+    if [ -n "$BROWSER" ]; then
+        open_envvar "$1"
+    fi
+
+    # if BROWSER variable is not set, check some well known browsers instead
+    if [ x"$BROWSER" = x"" ]; then
+        BROWSER=www-browser:links2:elinks:links:lynx:w3m
+        if has_display; then
+            BROWSER=x-www-browser:firefox:iceweasel:seamonkey:mozilla:epiphany:konqueror:chromium:chromium-browser:google-chrome:$BROWSER
+        fi
+    fi
+
+    open_envvar "$1"
+
+    exit_failure_operation_impossible "no method available for opening '$1'"
+}
+
+open_lxde()
+{
+
+    # pcmanfm only knows how to handle file:// urls and filepaths, it seems.
+    if pcmanfm --help >/dev/null 2>&1 && is_file_url_or_path "$1"; then
+        local file="$(file_url_to_path "$1")"
+
+        # handle relative paths
+        if ! echo "$file" | grep -q ^/; then
+            file="$(pwd)/$file"
+        fi
+
+        pcmanfm "$file"
+    else
+        open_generic "$1"
+    fi
+
+    if [ $? -eq 0 ]; then
+        exit_success
+    else
+        exit_failure_operation_failed
+    fi
+}
+
+open_lxqt()
+{
+    open_generic "$1"
+}
+
+[ x"$1" != x"" ] || exit_failure_syntax
+
+url=
+while [ $# -gt 0 ] ; do
+    parm="$1"
+    shift
+
+    case "$parm" in
+      -*)
+        exit_failure_syntax "unexpected option '$parm'"
+        ;;
+
+      *)
+        if [ -n "$url" ] ; then
+            exit_failure_syntax "unexpected argument '$parm'"
+        fi
+        url="$parm"
+        ;;
+    esac
+done
+
+if [ -z "${url}" ] ; then
+    exit_failure_syntax "file or URL argument missing"
+fi
+
+detectDE
+
+if [ x"$DE" = x"" ]; then
+    DE=generic
+fi
+
+DEBUG 2 "Selected DE $DE"
+
+# sanitize BROWSER (avoid caling ourselves in particular)
+case "${BROWSER}" in
+    *:"xdg-open"|"xdg-open":*)
+        BROWSER=$(echo $BROWSER | sed -e 's|:xdg-open||g' -e 's|xdg-open:||g')
+        ;;
+    "xdg-open")
+        BROWSER=
+        ;;
+esac
+
+case "$DE" in
+    kde)
+    open_kde "$url"
+    ;;
+
+    dde)
+    open_dde "$url"
+    ;;
+
+    gnome3|cinnamon)
+    open_gnome3 "$url"
+    ;;
+
+    gnome)
+    open_gnome "$url"
+    ;;
+
+    mate)
+    open_mate "$url"
+    ;;
+
+    xfce)
+    open_xfce "$url"
+    ;;
+
+    lxde)
+    open_lxde "$url"
+    ;;
+
+    lxqt)
+    open_lxqt "$url"
+    ;;
+
+    enlightenment)
+    open_enlightenment "$url"
+    ;;
+
+    cygwin)
+    open_cygwin "$url"
+    ;;
+
+    darwin)
+    open_darwin "$url"
+    ;;
+
+    flatpak)
+    open_flatpak "$url"
+    ;;
+
+    generic)
+    open_generic "$url"
+    ;;
+
+    *)
+    exit_failure_operation_impossible "no method available for opening '$url'"
+    ;;
+esac

+ 59 - 0
RNCode/node_modules/optionator/CHANGELOG.md

@@ -0,0 +1,59 @@
+# 0.9.0
+- update dependencies, in particular `levn` and `type-check` - this could affect behaviour of argument parsing
+
+# 0.8.3
+- changes dependency from `wordwrap` to `word-wrap` due to license issue
+- update dependencies
+
+# 0.8.2
+- fix bug #18 - detect missing value when flag is last item
+- update dependencies
+
+# 0.8.1
+- update `fast-levenshtein` dependency
+
+# 0.8.0
+- update `levn` dependency - supplying a float value to an option with type `Int` now throws an error, instead of silently converting to an `Int`
+
+# 0.7.1
+- fix bug with use of `defaults` and `concatRepeatedArrays` or `mergeRepeatedObjects`
+
+# 0.7.0
+- added `concatrepeatedarrays` option: `oneValuePerFlag`, only allows one array value per flag
+- added `typeAliases` option
+- added `parseArgv` which takes an array and parses with the first two items sliced off
+- changed enum help style
+- bug fixes (#12)
+- use of `concatRepeatedArrays` and `mergeRepeatedObjects` at the top level is deprecated, use it as either a per-option option, or set them in the `defaults` object to set them for all objects
+
+# 0.6.0
+- added `defaults` lib-option flag, allowing one to set default properties for all options
+- added `concatRepeatedArrays` and `mergeRepeatedObjects` as option level properties, allowing you to turn this feature on for specific options only
+
+# 0.5.0
+- `Boolean` flags with `default: 'true'`, and no short aliases, will by default show the `--no` version in help
+
+# 0.4.0
+- add `mergeRepeatedObjects` setting
+
+# 0.3.0
+- add `concatRepeatedArrays` setting
+- add `overrideRequired` option setting
+- use just Levenshtein string compare algo rather than Levenshtein Damerau to due dependency license issue
+
+# 0.2.2
+- bug fixes
+
+# 0.2.1
+- improved interpolation
+- added changelog
+
+# 0.2.0
+- add dependency checks to options - added `dependsOn` as an option property
+- add interpolation for `prepend` and `append` text with new `generateHelp` option, `interpolate`
+
+# 0.1.1
+- update dependencies
+
+# 0.1.0
+- initial release

+ 22 - 0
RNCode/node_modules/optionator/LICENSE

@@ -0,0 +1,22 @@
+Copyright (c) George Zahariev
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.

+ 238 - 0
RNCode/node_modules/optionator/README.md

@@ -0,0 +1,238 @@
+# Optionator
+<a name="optionator" />
+
+Optionator is a JavaScript/Node.js option parsing and help generation library used by [eslint](http://eslint.org), [Grasp](http://graspjs.com), [LiveScript](http://livescript.net), [esmangle](https://github.com/estools/esmangle), [escodegen](https://github.com/estools/escodegen), and [many more](https://www.npmjs.com/browse/depended/optionator).
+
+For an online demo, check out the [Grasp online demo](http://www.graspjs.com/#demo).
+
+[About](#about) &middot; [Usage](#usage) &middot; [Settings Format](#settings-format) &middot; [Argument Format](#argument-format)
+
+## Why?
+The  problem with other option parsers, such as `yargs` or `minimist`, is they just accept all input, valid or not.
+With Optionator, if you mistype an option, it will give you an error (with a suggestion for what you meant).
+If you give the wrong type of argument for an option, it will give you an error rather than supplying the wrong input to your application.
+
+    $ cmd --halp
+    Invalid option '--halp' - perhaps you meant '--help'?
+
+    $ cmd --count str
+    Invalid value for option 'count' - expected type Int, received value: str.
+
+Other helpful features include reformatting the help text based on the size of the console, so that it fits even if the console is narrow, and accepting not just an array (eg. process.argv), but a string or object as well, making things like testing much easier.
+
+## About
+Optionator uses [type-check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) behind the scenes to cast and verify input according the specified types.
+
+MIT license. Version 0.9.1
+
+    npm install optionator
+
+For updates on Optionator, [follow me on twitter](https://twitter.com/gkzahariev).
+
+Optionator is a Node.js module, but can be used in the browser as well if packed with webpack/browserify.
+
+## Usage
+`require('optionator');` returns a function. It has one property, `VERSION`, the current version of the library as a string. This function is called with an object specifying your options and other information, see the [settings format section](#settings-format). This in turn returns an object with three properties, `parse`, `parseArgv`, `generateHelp`, and `generateHelpForOption`, which are all functions.
+
+```js
+var optionator = require('optionator')({
+    prepend: 'Usage: cmd [options]',
+    append: 'Version 1.0.0',
+    options: [{
+        option: 'help',
+        alias: 'h',
+        type: 'Boolean',
+        description: 'displays help'
+    }, {
+        option: 'count',
+        alias: 'c',
+        type: 'Int',
+        description: 'number of things',
+        example: 'cmd --count 2'
+    }]
+});
+
+var options = optionator.parseArgv(process.argv);
+if (options.help) {
+    console.log(optionator.generateHelp());
+}
+...
+```
+
+### parse(input, parseOptions)
+`parse` processes the `input` according to your settings, and returns an object with the results.
+
+##### arguments
+* input - `[String] | Object | String` - the input you wish to parse
+* parseOptions - `{slice: Int}` - all options optional
+    - `slice` specifies how much to slice away from the beginning if the input is an array or string - by default `0` for string, `2` for array (works with `process.argv`)
+
+##### returns
+`Object` - the parsed options, each key is a camelCase version of the option name (specified in dash-case), and each value is the processed value for that option. Positional values are in an array under the `_` key.
+
+##### example
+```js
+parse(['node', 't.js', '--count', '2', 'positional']); // {count: 2, _: ['positional']}
+parse('--count 2 positional');                         // {count: 2, _: ['positional']}
+parse({count: 2, _:['positional']});                   // {count: 2, _: ['positional']}
+```
+
+### parseArgv(input)
+`parseArgv` works exactly like `parse`, but only for array input and it slices off the first two elements.
+
+##### arguments
+* input - `[String]` - the input you wish to parse
+
+##### returns
+See "returns" section in "parse"
+
+##### example
+```js
+parseArgv(process.argv);
+```
+
+### generateHelp(helpOptions)
+`generateHelp` produces help text based on your settings.
+
+##### arguments
+* helpOptions - `{showHidden: Boolean, interpolate: Object}` - all options optional
+    - `showHidden` specifies whether to show options with `hidden: true` specified, by default it is `false`
+    - `interpolate` specify data to be interpolated in `prepend` and `append` text, `{{key}}` is the format - eg. `generateHelp({interpolate:{version: '0.4.2'}})`, will change this `append` text: `Version {{version}}` to `Version 0.4.2`
+
+##### returns
+`String` - the generated help text
+
+##### example
+```js
+generateHelp(); /*
+"Usage: cmd [options] positional
+
+  -h, --help       displays help
+  -c, --count Int  number of things
+
+Version  1.0.0
+"*/
+```
+
+### generateHelpForOption(optionName)
+`generateHelpForOption` produces expanded help text for the specified with `optionName` option. If an `example` was specified for the option, it will be displayed,  and if a `longDescription` was specified, it will display that instead of the `description`.
+
+##### arguments
+* optionName - `String` - the name of the option to display
+
+##### returns
+`String` - the generated help text for the option
+
+##### example
+```js
+generateHelpForOption('count'); /*
+"-c, --count Int
+description: number of things
+example: cmd --count 2
+"*/
+```
+
+## Settings Format
+When your `require('optionator')`, you get a function that takes in a settings object. This object has the type:
+
+    {
+      prepend: String,
+      append: String,
+      options: [{heading: String} | {
+        option: String,
+        alias: [String] | String,
+        type: String,
+        enum: [String],
+        default: String,
+        restPositional: Boolean,
+        required: Boolean,
+        overrideRequired: Boolean,
+        dependsOn: [String] | String,
+        concatRepeatedArrays: Boolean | (Boolean, Object),
+        mergeRepeatedObjects: Boolean,
+        description: String,
+        longDescription: String,
+        example: [String] | String
+      }],
+      helpStyle: {
+        aliasSeparator: String,
+        typeSeparator: String,
+        descriptionSeparator: String,
+        initialIndent: Int,
+        secondaryIndent: Int,
+        maxPadFactor: Number
+      },
+      mutuallyExclusive: [[String | [String]]],
+      concatRepeatedArrays: Boolean | (Boolean, Object), // deprecated, set in defaults object
+      mergeRepeatedObjects: Boolean, // deprecated, set in defaults object
+      positionalAnywhere: Boolean,
+      typeAliases: Object,
+      defaults: Object
+    }
+
+All of the properties are optional (the `Maybe` has been excluded for brevities sake), except for having either `heading: String` or `option: String` in each object in the `options` array.
+
+### Top Level Properties
+* `prepend` is an optional string to be placed before the options in the help text
+* `append` is an optional string to be placed after the options in the help text
+* `options` is a required array specifying your options and headings, the options and headings will be displayed in the order specified
+* `helpStyle` is an optional object which enables you to change the default appearance of some aspects of the help text
+* `mutuallyExclusive` is an optional array of arrays of either strings or arrays of strings. The top level array is a list of rules, each rule is a list of elements - each element can be either a string (the name of an option), or a list of strings (a group of option names) - there will be an error if more than one element is present
+* `concatRepeatedArrays` see description under the "Option Properties" heading - use at the top level is deprecated, if you want to set this for all options, use the `defaults` property
+* `mergeRepeatedObjects` see description under the "Option Properties" heading - use at the top level is deprecated, if you want to set this for all options, use the `defaults` property
+* `positionalAnywhere` is an optional boolean (defaults to `true`) - when `true` it allows positional arguments anywhere, when `false`, all arguments after the first positional one are taken to be positional as well, even if they look like a flag. For example, with `positionalAnywhere: false`, the arguments `--flag --boom 12 --crack` would have two positional arguments: `12` and `--crack`
+* `typeAliases` is an optional object, it allows you to set aliases for types, eg. `{Path: 'String'}` would allow you to use the type `Path` as an alias for the type `String`
+* `defaults` is an optional object following the option properties format, which specifies default values for all options. A default will be overridden if manually set. For example, you can do `default: { type: "String" }` to set the default type of all options to `String`, and then override that default in an individual option by setting the `type` property
+
+#### Heading Properties
+* `heading` a required string, the name of the heading
+
+#### Option Properties
+* `option` the required name of the option - use dash-case, without the leading dashes
+* `alias` is an optional string or array of strings which specify any aliases for the option
+* `type` is a required string in the [type check](https://github.com/gkz/type-check) [format](https://github.com/gkz/type-check#type-format), this will be used to cast the inputted value and validate it
+* `enum` is an optional array of strings, each string will be parsed by [levn](https://github.com/gkz/levn) - the argument value must be one of the resulting values - each potential value must validate against the specified `type`
+* `default` is a optional string, which will be parsed by [levn](https://github.com/gkz/levn) and used as the default value if none is set - the value must validate against the specified `type`
+* `restPositional` is an optional boolean - if set to `true`, everything after the option will be taken to be a positional argument, even if it looks like a named argument
+* `required` is an optional boolean - if set to `true`, the option parsing will fail if the option is not defined
+* `overrideRequired` is a optional boolean - if set to `true` and the option is used, and there is another option which is required but not set, it will override the need for the required option and there will be no error - this is useful if you have required options and want to use `--help` or `--version` flags
+* `concatRepeatedArrays` is an optional boolean or tuple with boolean and options object (defaults to `false`) - when set to `true` and an option contains an array value and is repeated, the subsequent values for the flag will be appended rather than overwriting the original value - eg. option `g` of type `[String]`: `-g a -g b -g c,d` will result in `['a','b','c','d']`
+
+ You can supply an options object by giving the following value: `[true, options]`. The one currently supported option is `oneValuePerFlag`, this only allows one array value per flag. This is useful if your potential values contain a comma.
+* `mergeRepeatedObjects` is an optional boolean (defaults to `false`) - when set to `true` and an option contains an object value and is repeated, the subsequent values for the flag will be merged rather than overwriting the original value - eg. option `g` of type `Object`: `-g a:1 -g b:2 -g c:3,d:4` will result in `{a: 1, b: 2, c: 3, d: 4}`
+* `dependsOn` is an optional string or array of strings - if simply a string (the name of another option), it will make sure that that other option is set, if an array of strings, depending on whether `'and'` or `'or'` is first, it will either check whether all (`['and', 'option-a', 'option-b']`), or at least one (`['or', 'option-a', 'option-b']`) other options are set
+* `description` is an optional string, which will be displayed next to the option in the help text
+* `longDescription` is an optional string, it will be displayed instead of the `description` when `generateHelpForOption` is used
+* `example` is an optional string or array of strings with example(s) for the option - these will be displayed when `generateHelpForOption` is used
+
+#### Help Style Properties
+* `aliasSeparator` is an optional string, separates multiple names from each other - default: ' ,'
+* `typeSeparator` is an optional string, separates the type from the names - default: ' '
+* `descriptionSeparator` is an optional string , separates the description from the padded name and type - default: '  '
+* `initialIndent` is an optional int - the amount of indent for options - default: 2
+* `secondaryIndent` is an optional int - the amount of indent if wrapped fully (in addition to the initial indent) - default: 4
+* `maxPadFactor` is an optional number - affects the default level of padding for the names/type, it is multiplied by the average of the length of the names/type - default: 1.5
+
+## Argument Format
+At the highest level there are two types of arguments: named, and positional.
+
+Name arguments of any length are prefixed with `--` (eg. `--go`), and those of one character may be prefixed with either `--` or `-` (eg. `-g`).
+
+There are two types of named arguments: boolean flags (eg. `--problemo`, `-p`) which take no value and result in a `true` if they are present, the falsey `undefined` if they are not present, or `false` if present and explicitly prefixed with `no` (eg. `--no-problemo`). Named arguments with values (eg. `--tseries 800`, `-t 800`) are the other type. If the option has a type `Boolean` it will automatically be made into a boolean flag. Any other type results in a named argument that takes a value.
+
+For more information about how to properly set types to get the value you want, take a look at the [type check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) pages.
+
+You can group single character arguments that use a single `-`, however all except the last must be boolean flags (which take no value). The last may be a boolean flag, or an argument which takes a value - eg. `-ba 2` is equivalent to `-b -a 2`.
+
+Positional arguments are all those values which do not fall under the above - they can be anywhere, not just at the end. For example, in `cmd -b one -a 2 two` where `b` is a boolean flag, and `a` has the type `Number`, there are two positional arguments, `one` and `two`.
+
+Everything after an `--` is positional, even if it looks like a named argument.
+
+You may optionally use `=` to separate option names from values, for example: `--count=2`.
+
+If you specify the option `NUM`, then any argument using a single `-` followed by a number will be valid and will set the value of `NUM`. Eg. `-2` will be parsed into `NUM: 2`.
+
+If duplicate named arguments are present, the last one will be taken.
+
+## Technical About
+`optionator` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It uses [levn](https://github.com/gkz/levn) to cast arguments to their specified type, and uses [type-check](https://github.com/gkz/type-check) to validate values. It also uses the [prelude.ls](http://preludels.com/) library.

+ 260 - 0
RNCode/node_modules/optionator/lib/help.js

@@ -0,0 +1,260 @@
+// Generated by LiveScript 1.6.0
+(function(){
+  var ref$, id, find, sort, min, max, map, unlines, nameToRaw, dasherize, naturalJoin, wordWrap, wordwrap, getPreText, setHelpStyleDefaults, generateHelpForOption, generateHelp;
+  ref$ = require('prelude-ls'), id = ref$.id, find = ref$.find, sort = ref$.sort, min = ref$.min, max = ref$.max, map = ref$.map, unlines = ref$.unlines;
+  ref$ = require('./util'), nameToRaw = ref$.nameToRaw, dasherize = ref$.dasherize, naturalJoin = ref$.naturalJoin;
+  wordWrap = require('word-wrap');
+  wordwrap = function(a, b){
+    var ref$, indent, width;
+    ref$ = b === undefined
+      ? ['', a - 1]
+      : [repeatString$(' ', a), b - a - 1], indent = ref$[0], width = ref$[1];
+    return function(text){
+      return wordWrap(text, {
+        indent: indent,
+        width: width,
+        trim: true
+      });
+    };
+  };
+  getPreText = function(option, arg$, maxWidth){
+    var mainName, shortNames, ref$, longNames, type, description, aliasSeparator, typeSeparator, initialIndent, names, namesString, namesStringLen, typeSeparatorString, typeSeparatorStringLen, wrap;
+    mainName = option.option, shortNames = (ref$ = option.shortNames) != null
+      ? ref$
+      : [], longNames = (ref$ = option.longNames) != null
+      ? ref$
+      : [], type = option.type, description = option.description;
+    aliasSeparator = arg$.aliasSeparator, typeSeparator = arg$.typeSeparator, initialIndent = arg$.initialIndent;
+    if (option.negateName) {
+      mainName = "no-" + mainName;
+      if (longNames) {
+        longNames = map(function(it){
+          return "no-" + it;
+        }, longNames);
+      }
+    }
+    names = mainName.length === 1
+      ? [mainName].concat(shortNames, longNames)
+      : shortNames.concat([mainName], longNames);
+    namesString = map(nameToRaw, names).join(aliasSeparator);
+    namesStringLen = namesString.length;
+    typeSeparatorString = mainName === 'NUM' ? '::' : typeSeparator;
+    typeSeparatorStringLen = typeSeparatorString.length;
+    if (maxWidth != null && !option.boolean && initialIndent + namesStringLen + typeSeparatorStringLen + type.length > maxWidth) {
+      wrap = wordwrap(initialIndent + namesStringLen + typeSeparatorStringLen, maxWidth);
+      return namesString + "" + typeSeparatorString + wrap(type).replace(/^\s+/, '');
+    } else {
+      return namesString + "" + (option.boolean
+        ? ''
+        : typeSeparatorString + "" + type);
+    }
+  };
+  setHelpStyleDefaults = function(helpStyle){
+    helpStyle.aliasSeparator == null && (helpStyle.aliasSeparator = ', ');
+    helpStyle.typeSeparator == null && (helpStyle.typeSeparator = ' ');
+    helpStyle.descriptionSeparator == null && (helpStyle.descriptionSeparator = '  ');
+    helpStyle.initialIndent == null && (helpStyle.initialIndent = 2);
+    helpStyle.secondaryIndent == null && (helpStyle.secondaryIndent = 4);
+    helpStyle.maxPadFactor == null && (helpStyle.maxPadFactor = 1.5);
+  };
+  generateHelpForOption = function(getOption, arg$){
+    var stdout, helpStyle, ref$;
+    stdout = arg$.stdout, helpStyle = (ref$ = arg$.helpStyle) != null
+      ? ref$
+      : {};
+    setHelpStyleDefaults(helpStyle);
+    return function(optionName){
+      var maxWidth, wrap, option, e, pre, defaultString, restPositionalString, description, fullDescription, that, preDescription, descriptionString, exampleString, examples, seperator;
+      maxWidth = stdout != null && stdout.isTTY ? stdout.columns - 1 : null;
+      wrap = maxWidth ? wordwrap(maxWidth) : id;
+      try {
+        option = getOption(dasherize(optionName));
+      } catch (e$) {
+        e = e$;
+        return e.message;
+      }
+      pre = getPreText(option, helpStyle);
+      defaultString = option['default'] && !option.negateName ? "\ndefault: " + option['default'] : '';
+      restPositionalString = option.restPositional ? 'Everything after this option is considered a positional argument, even if it looks like an option.' : '';
+      description = option.longDescription || option.description && sentencize(option.description);
+      fullDescription = description && restPositionalString
+        ? description + " " + restPositionalString
+        : (that = description || restPositionalString) ? that : '';
+      preDescription = 'description:';
+      descriptionString = !fullDescription
+        ? ''
+        : maxWidth && fullDescription.length - 1 - preDescription.length > maxWidth
+          ? "\n" + preDescription + "\n" + wrap(fullDescription)
+          : "\n" + preDescription + " " + fullDescription;
+      exampleString = (that = option.example) ? (examples = [].concat(that), examples.length > 1
+        ? "\nexamples:\n" + unlines(examples)
+        : "\nexample: " + examples[0]) : '';
+      seperator = defaultString || descriptionString || exampleString ? "\n" + repeatString$('=', pre.length) : '';
+      return pre + "" + seperator + defaultString + descriptionString + exampleString;
+    };
+  };
+  generateHelp = function(arg$){
+    var options, prepend, append, helpStyle, ref$, stdout, aliasSeparator, typeSeparator, descriptionSeparator, maxPadFactor, initialIndent, secondaryIndent;
+    options = arg$.options, prepend = arg$.prepend, append = arg$.append, helpStyle = (ref$ = arg$.helpStyle) != null
+      ? ref$
+      : {}, stdout = arg$.stdout;
+    setHelpStyleDefaults(helpStyle);
+    aliasSeparator = helpStyle.aliasSeparator, typeSeparator = helpStyle.typeSeparator, descriptionSeparator = helpStyle.descriptionSeparator, maxPadFactor = helpStyle.maxPadFactor, initialIndent = helpStyle.initialIndent, secondaryIndent = helpStyle.secondaryIndent;
+    return function(arg$){
+      var ref$, showHidden, interpolate, maxWidth, output, out, data, optionCount, totalPreLen, preLens, i$, len$, item, that, pre, descParts, desc, preLen, sortedPreLens, maxPreLen, preLenMean, x, padAmount, descSepLen, fullWrapCount, partialWrapCount, descLen, totalLen, initialSpace, wrapAllFull, i, wrap;
+      ref$ = arg$ != null
+        ? arg$
+        : {}, showHidden = ref$.showHidden, interpolate = ref$.interpolate;
+      maxWidth = stdout != null && stdout.isTTY ? stdout.columns - 1 : null;
+      output = [];
+      out = function(it){
+        return output.push(it != null ? it : '');
+      };
+      if (prepend) {
+        out(interpolate ? interp(prepend, interpolate) : prepend);
+        out();
+      }
+      data = [];
+      optionCount = 0;
+      totalPreLen = 0;
+      preLens = [];
+      for (i$ = 0, len$ = (ref$ = options).length; i$ < len$; ++i$) {
+        item = ref$[i$];
+        if (showHidden || !item.hidden) {
+          if (that = item.heading) {
+            data.push({
+              type: 'heading',
+              value: that
+            });
+          } else {
+            pre = getPreText(item, helpStyle, maxWidth);
+            descParts = [];
+            if ((that = item.description) != null) {
+              descParts.push(that);
+            }
+            if (that = item['enum']) {
+              descParts.push("either: " + naturalJoin(that));
+            }
+            if (item['default'] && !item.negateName) {
+              descParts.push("default: " + item['default']);
+            }
+            desc = descParts.join(' - ');
+            data.push({
+              type: 'option',
+              pre: pre,
+              desc: desc,
+              descLen: desc.length
+            });
+            preLen = pre.length;
+            optionCount++;
+            totalPreLen += preLen;
+            preLens.push(preLen);
+          }
+        }
+      }
+      sortedPreLens = sort(preLens);
+      maxPreLen = sortedPreLens[sortedPreLens.length - 1];
+      preLenMean = initialIndent + totalPreLen / optionCount;
+      x = optionCount > 2 ? min(preLenMean * maxPadFactor, maxPreLen) : maxPreLen;
+      for (i$ = sortedPreLens.length - 1; i$ >= 0; --i$) {
+        preLen = sortedPreLens[i$];
+        if (preLen <= x) {
+          padAmount = preLen;
+          break;
+        }
+      }
+      descSepLen = descriptionSeparator.length;
+      if (maxWidth != null) {
+        fullWrapCount = 0;
+        partialWrapCount = 0;
+        for (i$ = 0, len$ = data.length; i$ < len$; ++i$) {
+          item = data[i$];
+          if (item.type === 'option') {
+            pre = item.pre, desc = item.desc, descLen = item.descLen;
+            if (descLen === 0) {
+              item.wrap = 'none';
+            } else {
+              preLen = max(padAmount, pre.length) + initialIndent + descSepLen;
+              totalLen = preLen + descLen;
+              if (totalLen > maxWidth) {
+                if (descLen / 2.5 > maxWidth - preLen) {
+                  fullWrapCount++;
+                  item.wrap = 'full';
+                } else {
+                  partialWrapCount++;
+                  item.wrap = 'partial';
+                }
+              } else {
+                item.wrap = 'none';
+              }
+            }
+          }
+        }
+      }
+      initialSpace = repeatString$(' ', initialIndent);
+      wrapAllFull = optionCount > 1 && fullWrapCount + partialWrapCount * 0.5 > optionCount * 0.5;
+      for (i$ = 0, len$ = data.length; i$ < len$; ++i$) {
+        i = i$;
+        item = data[i$];
+        if (item.type === 'heading') {
+          if (i !== 0) {
+            out();
+          }
+          out(item.value + ":");
+        } else {
+          pre = item.pre, desc = item.desc, descLen = item.descLen, wrap = item.wrap;
+          if (maxWidth != null) {
+            if (wrapAllFull || wrap === 'full') {
+              wrap = wordwrap(initialIndent + secondaryIndent, maxWidth);
+              out(initialSpace + "" + pre + "\n" + wrap(desc));
+              continue;
+            } else if (wrap === 'partial') {
+              wrap = wordwrap(initialIndent + descSepLen + max(padAmount, pre.length), maxWidth);
+              out(initialSpace + "" + pad(pre, padAmount) + descriptionSeparator + wrap(desc).replace(/^\s+/, ''));
+              continue;
+            }
+          }
+          if (descLen === 0) {
+            out(initialSpace + "" + pre);
+          } else {
+            out(initialSpace + "" + pad(pre, padAmount) + descriptionSeparator + desc);
+          }
+        }
+      }
+      if (append) {
+        out();
+        out(interpolate ? interp(append, interpolate) : append);
+      }
+      return unlines(output);
+    };
+  };
+  function pad(str, num){
+    var len, padAmount;
+    len = str.length;
+    padAmount = num - len;
+    return str + "" + repeatString$(' ', padAmount > 0 ? padAmount : 0);
+  }
+  function sentencize(str){
+    var first, rest, period;
+    first = str.charAt(0).toUpperCase();
+    rest = str.slice(1);
+    period = /[\.!\?]$/.test(str) ? '' : '.';
+    return first + "" + rest + period;
+  }
+  function interp(string, object){
+    return string.replace(/{{([a-zA-Z$_][a-zA-Z$_0-9]*)}}/g, function(arg$, key){
+      var ref$;
+      return (ref$ = object[key]) != null
+        ? ref$
+        : "{{" + key + "}}";
+    });
+  }
+  module.exports = {
+    generateHelp: generateHelp,
+    generateHelpForOption: generateHelpForOption
+  };
+  function repeatString$(str, n){
+    for (var r = ''; n > 0; (n >>= 1) && (str += str)) if (n & 1) r += str;
+    return r;
+  }
+}).call(this);

+ 465 - 0
RNCode/node_modules/optionator/lib/index.js

@@ -0,0 +1,465 @@
+// Generated by LiveScript 1.6.0
+(function(){
+  var VERSION, ref$, id, map, compact, any, groupBy, partition, chars, isItNaN, keys, Obj, camelize, deepIs, closestString, nameToRaw, dasherize, naturalJoin, generateHelp, generateHelpForOption, parsedTypeCheck, parseType, parseLevn, camelizeKeys, parseString, main, toString$ = {}.toString, slice$ = [].slice, arrayFrom$ = Array.from || function(x){return slice$.call(x);};
+  VERSION = '0.9.1';
+  ref$ = require('prelude-ls'), id = ref$.id, map = ref$.map, compact = ref$.compact, any = ref$.any, groupBy = ref$.groupBy, partition = ref$.partition, chars = ref$.chars, isItNaN = ref$.isItNaN, keys = ref$.keys, Obj = ref$.Obj, camelize = ref$.camelize;
+  deepIs = require('deep-is');
+  ref$ = require('./util'), closestString = ref$.closestString, nameToRaw = ref$.nameToRaw, dasherize = ref$.dasherize, naturalJoin = ref$.naturalJoin;
+  ref$ = require('./help'), generateHelp = ref$.generateHelp, generateHelpForOption = ref$.generateHelpForOption;
+  ref$ = require('type-check'), parsedTypeCheck = ref$.parsedTypeCheck, parseType = ref$.parseType;
+  parseLevn = require('levn').parsedTypeParse;
+  camelizeKeys = function(obj){
+    var key, value, resultObj$ = {};
+    for (key in obj) {
+      value = obj[key];
+      resultObj$[camelize(key)] = value;
+    }
+    return resultObj$;
+  };
+  parseString = function(string){
+    var assignOpt, regex, replaceRegex, result;
+    assignOpt = '--?[a-zA-Z][-a-z-A-Z0-9]*=';
+    regex = RegExp('(?:' + assignOpt + ')?(?:\'(?:\\\\\'|[^\'])+\'|"(?:\\\\"|[^"])+")|[^\'"\\s]+', 'g');
+    replaceRegex = RegExp('^(' + assignOpt + ')?[\'"]([\\s\\S]*)[\'"]$');
+    result = map(function(it){
+      return it.replace(replaceRegex, '$1$2');
+    }, string.match(regex) || []);
+    return result;
+  };
+  main = function(libOptions){
+    var opts, defaults, required, traverse, getOption, parse;
+    opts = {};
+    defaults = {};
+    required = [];
+    if (toString$.call(libOptions.stdout).slice(8, -1) === 'Undefined') {
+      libOptions.stdout = process.stdout;
+    }
+    libOptions.positionalAnywhere == null && (libOptions.positionalAnywhere = true);
+    libOptions.typeAliases == null && (libOptions.typeAliases = {});
+    libOptions.defaults == null && (libOptions.defaults = {});
+    if (libOptions.concatRepeatedArrays != null) {
+      libOptions.defaults.concatRepeatedArrays = libOptions.concatRepeatedArrays;
+    }
+    if (libOptions.mergeRepeatedObjects != null) {
+      libOptions.defaults.mergeRepeatedObjects = libOptions.mergeRepeatedObjects;
+    }
+    traverse = function(options){
+      var i$, len$, option, name, k, ref$, v, type, that, e, parsedPossibilities, parsedType, j$, len1$, possibility, rawDependsType, dependsOpts, dependsType, cra, alias, shortNames, longNames;
+      if (toString$.call(options).slice(8, -1) !== 'Array') {
+        throw new Error('No options defined.');
+      }
+      for (i$ = 0, len$ = options.length; i$ < len$; ++i$) {
+        option = options[i$];
+        if (option.heading == null) {
+          name = option.option;
+          if (opts[name] != null) {
+            throw new Error("Option '" + name + "' already defined.");
+          }
+          for (k in ref$ = libOptions.defaults) {
+            v = ref$[k];
+            option[k] == null && (option[k] = v);
+          }
+          if (option.type === 'Boolean') {
+            option.boolean == null && (option.boolean = true);
+          }
+          if (option.parsedType == null) {
+            if (!option.type) {
+              throw new Error("No type defined for option '" + name + "'.");
+            }
+            try {
+              type = (that = libOptions.typeAliases[option.type]) != null
+                ? that
+                : option.type;
+              option.parsedType = parseType(type);
+            } catch (e$) {
+              e = e$;
+              throw new Error("Option '" + name + "': Error parsing type '" + option.type + "': " + e.message);
+            }
+          }
+          if (option['default']) {
+            try {
+              defaults[name] = parseLevn(option.parsedType, option['default']);
+            } catch (e$) {
+              e = e$;
+              throw new Error("Option '" + name + "': Error parsing default value '" + option['default'] + "' for type '" + option.type + "': " + e.message);
+            }
+          }
+          if (option['enum'] && !option.parsedPossiblities) {
+            parsedPossibilities = [];
+            parsedType = option.parsedType;
+            for (j$ = 0, len1$ = (ref$ = option['enum']).length; j$ < len1$; ++j$) {
+              possibility = ref$[j$];
+              try {
+                parsedPossibilities.push(parseLevn(parsedType, possibility));
+              } catch (e$) {
+                e = e$;
+                throw new Error("Option '" + name + "': Error parsing enum value '" + possibility + "' for type '" + option.type + "': " + e.message);
+              }
+            }
+            option.parsedPossibilities = parsedPossibilities;
+          }
+          if (that = option.dependsOn) {
+            if (that.length) {
+              ref$ = [].concat(option.dependsOn), rawDependsType = ref$[0], dependsOpts = slice$.call(ref$, 1);
+              dependsType = rawDependsType.toLowerCase();
+              if (dependsOpts.length) {
+                if (dependsType === 'and' || dependsType === 'or') {
+                  option.dependsOn = [dependsType].concat(arrayFrom$(dependsOpts));
+                } else {
+                  throw new Error("Option '" + name + "': If you have more than one dependency, you must specify either 'and' or 'or'");
+                }
+              } else {
+                if ((ref$ = dependsType.toLowerCase()) === 'and' || ref$ === 'or') {
+                  option.dependsOn = null;
+                } else {
+                  option.dependsOn = ['and', rawDependsType];
+                }
+              }
+            } else {
+              option.dependsOn = null;
+            }
+          }
+          if (option.required) {
+            required.push(name);
+          }
+          opts[name] = option;
+          if (option.concatRepeatedArrays != null) {
+            cra = option.concatRepeatedArrays;
+            if ('Boolean' === toString$.call(cra).slice(8, -1)) {
+              option.concatRepeatedArrays = [cra, {}];
+            } else if (cra.length === 1) {
+              option.concatRepeatedArrays = [cra[0], {}];
+            } else if (cra.length !== 2) {
+              throw new Error("Invalid setting for concatRepeatedArrays");
+            }
+          }
+          if (option.alias || option.aliases) {
+            if (name === 'NUM') {
+              throw new Error("-NUM option can't have aliases.");
+            }
+            if (option.alias) {
+              option.aliases == null && (option.aliases = [].concat(option.alias));
+            }
+            for (j$ = 0, len1$ = (ref$ = option.aliases).length; j$ < len1$; ++j$) {
+              alias = ref$[j$];
+              if (opts[alias] != null) {
+                throw new Error("Option '" + alias + "' already defined.");
+              }
+              opts[alias] = option;
+            }
+            ref$ = partition(fn$, option.aliases), shortNames = ref$[0], longNames = ref$[1];
+            option.shortNames == null && (option.shortNames = shortNames);
+            option.longNames == null && (option.longNames = longNames);
+          }
+          if ((!option.aliases || option.shortNames.length === 0) && option.type === 'Boolean' && option['default'] === 'true') {
+            option.negateName = true;
+          }
+        }
+      }
+      function fn$(it){
+        return it.length === 1;
+      }
+    };
+    traverse(libOptions.options);
+    getOption = function(name){
+      var opt, possiblyMeant;
+      opt = opts[name];
+      if (opt == null) {
+        possiblyMeant = closestString(keys(opts), name);
+        throw new Error("Invalid option '" + nameToRaw(name) + "'" + (possiblyMeant ? " - perhaps you meant '" + nameToRaw(possiblyMeant) + "'?" : '.'));
+      }
+      return opt;
+    };
+    parse = function(input, arg$){
+      var slice, obj, positional, restPositional, overrideRequired, prop, setValue, setDefaults, checkRequired, mutuallyExclusiveError, checkMutuallyExclusive, checkDependency, checkDependencies, checkProp, args, key, value, option, ref$, i$, len$, arg, that, result, short, argName, usingAssign, val, flags, len, j$, len1$, i, flag, opt, name, valPrime, negated, noedName;
+      slice = (arg$ != null
+        ? arg$
+        : {}).slice;
+      obj = {};
+      positional = [];
+      restPositional = false;
+      overrideRequired = false;
+      prop = null;
+      setValue = function(name, value){
+        var opt, val, cra, e, currentType;
+        opt = getOption(name);
+        if (opt.boolean) {
+          val = value;
+        } else {
+          try {
+            cra = opt.concatRepeatedArrays;
+            if (cra != null && cra[0] && cra[1].oneValuePerFlag && opt.parsedType.length === 1 && opt.parsedType[0].structure === 'array') {
+              val = [parseLevn(opt.parsedType[0].of, value)];
+            } else {
+              val = parseLevn(opt.parsedType, value);
+            }
+          } catch (e$) {
+            e = e$;
+            throw new Error("Invalid value for option '" + name + "' - expected type " + opt.type + ", received value: " + value + ".");
+          }
+          if (opt['enum'] && !any(function(it){
+            return deepIs(it, val);
+          }, opt.parsedPossibilities)) {
+            throw new Error("Option " + name + ": '" + val + "' not one of " + naturalJoin(opt['enum']) + ".");
+          }
+        }
+        currentType = toString$.call(obj[name]).slice(8, -1);
+        if (obj[name] != null) {
+          if (opt.concatRepeatedArrays != null && opt.concatRepeatedArrays[0] && currentType === 'Array') {
+            obj[name] = obj[name].concat(val);
+          } else if (opt.mergeRepeatedObjects && currentType === 'Object') {
+            import$(obj[name], val);
+          } else {
+            obj[name] = val;
+          }
+        } else {
+          obj[name] = val;
+        }
+        if (opt.restPositional) {
+          restPositional = true;
+        }
+        if (opt.overrideRequired) {
+          overrideRequired = true;
+        }
+      };
+      setDefaults = function(){
+        var name, ref$, value;
+        for (name in ref$ = defaults) {
+          value = ref$[name];
+          if (obj[name] == null) {
+            obj[name] = value;
+          }
+        }
+      };
+      checkRequired = function(){
+        var i$, ref$, len$, name;
+        if (overrideRequired) {
+          return;
+        }
+        for (i$ = 0, len$ = (ref$ = required).length; i$ < len$; ++i$) {
+          name = ref$[i$];
+          if (!obj[name]) {
+            throw new Error("Option " + nameToRaw(name) + " is required.");
+          }
+        }
+      };
+      mutuallyExclusiveError = function(first, second){
+        throw new Error("The options " + nameToRaw(first) + " and " + nameToRaw(second) + " are mutually exclusive - you cannot use them at the same time.");
+      };
+      checkMutuallyExclusive = function(){
+        var rules, i$, len$, rule, present, j$, len1$, element, k$, len2$, opt;
+        rules = libOptions.mutuallyExclusive;
+        if (!rules) {
+          return;
+        }
+        for (i$ = 0, len$ = rules.length; i$ < len$; ++i$) {
+          rule = rules[i$];
+          present = null;
+          for (j$ = 0, len1$ = rule.length; j$ < len1$; ++j$) {
+            element = rule[j$];
+            if (toString$.call(element).slice(8, -1) === 'Array') {
+              for (k$ = 0, len2$ = element.length; k$ < len2$; ++k$) {
+                opt = element[k$];
+                if (opt in obj) {
+                  if (present != null) {
+                    mutuallyExclusiveError(present, opt);
+                  } else {
+                    present = opt;
+                    break;
+                  }
+                }
+              }
+            } else {
+              if (element in obj) {
+                if (present != null) {
+                  mutuallyExclusiveError(present, element);
+                } else {
+                  present = element;
+                }
+              }
+            }
+          }
+        }
+      };
+      checkDependency = function(option){
+        var dependsOn, type, targetOptionNames, i$, len$, targetOptionName, targetOption;
+        dependsOn = option.dependsOn;
+        if (!dependsOn || option.dependenciesMet) {
+          return true;
+        }
+        type = dependsOn[0], targetOptionNames = slice$.call(dependsOn, 1);
+        for (i$ = 0, len$ = targetOptionNames.length; i$ < len$; ++i$) {
+          targetOptionName = targetOptionNames[i$];
+          targetOption = obj[targetOptionName];
+          if (targetOption && checkDependency(targetOption)) {
+            if (type === 'or') {
+              return true;
+            }
+          } else if (type === 'and') {
+            throw new Error("The option '" + option.option + "' did not have its dependencies met.");
+          }
+        }
+        if (type === 'and') {
+          return true;
+        } else {
+          throw new Error("The option '" + option.option + "' did not meet any of its dependencies.");
+        }
+      };
+      checkDependencies = function(){
+        var name;
+        for (name in obj) {
+          checkDependency(opts[name]);
+        }
+      };
+      checkProp = function(){
+        if (prop) {
+          throw new Error("Value for '" + prop + "' of type '" + getOption(prop).type + "' required.");
+        }
+      };
+      switch (toString$.call(input).slice(8, -1)) {
+      case 'String':
+        args = parseString(input.slice(slice != null ? slice : 0));
+        break;
+      case 'Array':
+        args = input.slice(slice != null ? slice : 2);
+        break;
+      case 'Object':
+        obj = {};
+        for (key in input) {
+          value = input[key];
+          if (key !== '_') {
+            option = getOption(dasherize(key));
+            if (parsedTypeCheck(option.parsedType, value)) {
+              obj[option.option] = value;
+            } else {
+              throw new Error("Option '" + option.option + "': Invalid type for '" + value + "' - expected type '" + option.type + "'.");
+            }
+          }
+        }
+        checkMutuallyExclusive();
+        checkDependencies();
+        setDefaults();
+        checkRequired();
+        return ref$ = camelizeKeys(obj), ref$._ = input._ || [], ref$;
+      default:
+        throw new Error("Invalid argument to 'parse': " + input + ".");
+      }
+      for (i$ = 0, len$ = args.length; i$ < len$; ++i$) {
+        arg = args[i$];
+        if (arg === '--') {
+          restPositional = true;
+        } else if (restPositional) {
+          positional.push(arg);
+        } else {
+          if (that = arg.match(/^(--?)([a-zA-Z][-a-zA-Z0-9]*)(=)?(.*)?$/)) {
+            result = that;
+            checkProp();
+            short = result[1].length === 1;
+            argName = result[2];
+            usingAssign = result[3] != null;
+            val = result[4];
+            if (usingAssign && val == null) {
+              throw new Error("No value for '" + argName + "' specified.");
+            }
+            if (short) {
+              flags = chars(argName);
+              len = flags.length;
+              for (j$ = 0, len1$ = flags.length; j$ < len1$; ++j$) {
+                i = j$;
+                flag = flags[j$];
+                opt = getOption(flag);
+                name = opt.option;
+                if (restPositional) {
+                  positional.push(flag);
+                } else if (i === len - 1) {
+                  if (usingAssign) {
+                    valPrime = opt.boolean ? parseLevn([{
+                      type: 'Boolean'
+                    }], val) : val;
+                    setValue(name, valPrime);
+                  } else if (opt.boolean) {
+                    setValue(name, true);
+                  } else {
+                    prop = name;
+                  }
+                } else if (opt.boolean) {
+                  setValue(name, true);
+                } else {
+                  throw new Error("Can't set argument '" + flag + "' when not last flag in a group of short flags.");
+                }
+              }
+            } else {
+              negated = false;
+              if (that = argName.match(/^no-(.+)$/)) {
+                negated = true;
+                noedName = that[1];
+                opt = getOption(noedName);
+              } else {
+                opt = getOption(argName);
+              }
+              name = opt.option;
+              if (opt.boolean) {
+                valPrime = usingAssign ? parseLevn([{
+                  type: 'Boolean'
+                }], val) : true;
+                if (negated) {
+                  setValue(name, !valPrime);
+                } else {
+                  setValue(name, valPrime);
+                }
+              } else {
+                if (negated) {
+                  throw new Error("Only use 'no-' prefix for Boolean options, not with '" + noedName + "'.");
+                }
+                if (usingAssign) {
+                  setValue(name, val);
+                } else {
+                  prop = name;
+                }
+              }
+            }
+          } else if (that = arg.match(/^-([0-9]+(?:\.[0-9]+)?)$/)) {
+            opt = opts.NUM;
+            if (!opt) {
+              throw new Error('No -NUM option defined.');
+            }
+            setValue(opt.option, that[1]);
+          } else {
+            if (prop) {
+              setValue(prop, arg);
+              prop = null;
+            } else {
+              positional.push(arg);
+              if (!libOptions.positionalAnywhere) {
+                restPositional = true;
+              }
+            }
+          }
+        }
+      }
+      checkProp();
+      checkMutuallyExclusive();
+      checkDependencies();
+      setDefaults();
+      checkRequired();
+      return ref$ = camelizeKeys(obj), ref$._ = positional, ref$;
+    };
+    return {
+      parse: parse,
+      parseArgv: function(it){
+        return parse(it, {
+          slice: 2
+        });
+      },
+      generateHelp: generateHelp(libOptions),
+      generateHelpForOption: generateHelpForOption(getOption, libOptions)
+    };
+  };
+  main.VERSION = VERSION;
+  module.exports = main;
+  function import$(obj, src){
+    var own = {}.hasOwnProperty;
+    for (var key in src) if (own.call(src, key)) obj[key] = src[key];
+    return obj;
+  }
+}).call(this);

+ 54 - 0
RNCode/node_modules/optionator/lib/util.js

@@ -0,0 +1,54 @@
+// Generated by LiveScript 1.6.0
+(function(){
+  var prelude, map, sortBy, fl, closestString, nameToRaw, dasherize, naturalJoin;
+  prelude = require('prelude-ls'), map = prelude.map, sortBy = prelude.sortBy;
+  fl = require('fast-levenshtein');
+  closestString = function(possibilities, input){
+    var distances, ref$, string, distance;
+    if (!possibilities.length) {
+      return;
+    }
+    distances = map(function(it){
+      var ref$, longer, shorter;
+      ref$ = input.length > it.length
+        ? [input, it]
+        : [it, input], longer = ref$[0], shorter = ref$[1];
+      return {
+        string: it,
+        distance: fl.get(longer, shorter)
+      };
+    })(
+    possibilities);
+    ref$ = sortBy(function(it){
+      return it.distance;
+    }, distances)[0], string = ref$.string, distance = ref$.distance;
+    return string;
+  };
+  nameToRaw = function(name){
+    if (name.length === 1 || name === 'NUM') {
+      return "-" + name;
+    } else {
+      return "--" + name;
+    }
+  };
+  dasherize = function(string){
+    if (/^[A-Z]/.test(string)) {
+      return string;
+    } else {
+      return prelude.dasherize(string);
+    }
+  };
+  naturalJoin = function(array){
+    if (array.length < 3) {
+      return array.join(' or ');
+    } else {
+      return array.slice(0, -1).join(', ') + ", or " + array[array.length - 1];
+    }
+  };
+  module.exports = {
+    closestString: closestString,
+    nameToRaw: nameToRaw,
+    dasherize: dasherize,
+    naturalJoin: naturalJoin
+  };
+}).call(this);

+ 108 - 0
RNCode/node_modules/optionator/node_modules/prelude-ls/CHANGELOG.md

@@ -0,0 +1,108 @@
+# 1.2.1
+- fix version
+
+# 1.2.0
+- add `List.remove`
+- build with LiveScript 1.6.0
+- update dependencies
+- remove coverage calculation
+
+# 1.1.2
+- add `Func.memoize`
+- fix `zip-all` and `zip-with-all` corner case (no input)
+- build with LiveScript 1.4.0
+
+# 1.1.1
+- curry `unique-by`, `minimum-by`
+
+# 1.1.0
+- added `List` functions: `maximum-by`, `minimum-by`, `unique-by`
+- added `List` functions: `at`, `elem-index`, `elem-indices`, `find-index`, `find-indices`
+- added `Str` functions: `capitalize`, `camelize`, `dasherize`
+- added `Func` function: `over` - eg. ``same-length = (==) `over` (.length)``
+- exported `Str.repeat` through main `prelude` object
+- fixed definition of `foldr` and `foldr1`, the new correct definition is backwards incompatible with the old, incorrect one
+- fixed issue with `fix`
+- improved code coverage
+
+# 1.0.3
+- build browser versions
+
+# 1.0.2
+- bug fix for `flatten` - slight change with bug fix, flattens arrays only, not array-like objects
+
+# 1.0.1
+- bug fixes for `drop-while` and `take-while`
+
+# 1.0.0
+* massive update - separated functions into separate modules
+* functions do not accept multiple types anymore - use different versions in their respective modules in some cases (eg. `Obj.map`), or use `chars` or `values` in other cases to transform into a list
+* objects are no longer transformed into functions, simply use `(obj.)` in LiveScript to do that
+* browser version now using browserify - use `prelude = require('prelude-ls')`
+* added `compact`, `split`, `flatten`, `difference`, `intersection`, `union`, `count-by`, `group-by`, `chars`, `unchars`, `apply`
+* added `lists-to-obj` which takes a list of keys and list of values and zips them up into an object, and the converse `obj-to-lists`
+* added `pairs-to-obj` which takes a list of pairs (2 element lists) and creates an object, and the converse `obj-to-pairs`
+* removed `cons`, `append` - use the concat operator
+* removed `compose` - use the compose operator
+* removed `obj-to-func` - use partially applied access (eg. `(obj.)`)
+* removed `length` - use `(.length)`
+* `sort-by` renamed to `sort-with`
+* added new `sort-by`
+* removed `compare` - just use the new `sort-by`
+* `break-it` renamed `break-list`, (`Str.break-str` for the string version)
+* added `Str.repeat` which creates a new string by repeating the input n times
+* `unfold` as alias to `unfoldr` is no longer used
+* fixed up style and compiled with LiveScript 1.1.1
+* use Make instead of Slake
+* greatly improved tests
+
+# 0.6.0
+* fixed various bugs
+* added `fix`, a fixpoint (Y combinator) for anonymous recursive functions
+* added `unfoldr` (alias `unfold`)
+* calling `replicate` with a string now returns a list of strings
+* removed `partial`, just use native partial application in LiveScript using the `_` placeholder, or currying
+* added `sort`, `sortBy`, and `compare`
+
+# 0.5.0
+* removed `lookup` - use (.prop)
+* removed `call` - use (.func arg1, arg2)
+* removed `pluck` - use map (.prop), xs
+* fixed buys wtih `head` and `last`
+* added non-minifed browser version, as `prelude-browser.js`
+* renamed `prelude-min.js` to `prelude-browser-min.js`
+* renamed `zip` to `zipAll`
+* renamed `zipWith` to `zipAllWith`
+* added `zip`, a curried zip that takes only two arguments
+* added `zipWith`, a curried zipWith that takes only two arguments
+
+# 0.4.0
+* added `parition` function
+* added `curry` function
+* removed `elem` function (use `in`)
+* removed `notElem` function (use `not in`)
+
+# 0.3.0
+* added `listToObject`
+* added `unique`
+* added `objToFunc`
+* added support for using strings in map and the like
+* added support for using objects in map and the like
+* added ability to use objects instead of functions in certain cases
+* removed `error` (just use throw)
+* added `tau` constant
+* added `join`
+* added `values`
+* added `keys`
+* added `partial`
+* renamed `log` to `ln`
+* added alias to `head`: `first`
+* added `installPrelude` helper
+
+# 0.2.0
+* removed functions that simply warp operators as you can now use operators as functions in LiveScript
+* `min/max` are now curried and take only 2 arguments
+* added `call`
+
+# 0.1.0
+* initial public release

+ 22 - 0
RNCode/node_modules/optionator/node_modules/prelude-ls/LICENSE

@@ -0,0 +1,22 @@
+Copyright (c) George Zahariev
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.

+ 15 - 0
RNCode/node_modules/optionator/node_modules/prelude-ls/README.md

@@ -0,0 +1,15 @@
+# prelude.ls [![Build Status](https://travis-ci.org/gkz/prelude-ls.png?branch=master)](https://travis-ci.org/gkz/prelude-ls)
+
+is a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, <a href="http://livescript.net">LiveScript</a>.
+
+See **[the prelude.ls site](http://preludels.com)** for examples, a reference, and more.
+
+You can install via npm `npm install prelude-ls`
+
+### Development
+
+`make test` to test
+
+`make build` to build `lib` from `src`
+
+`make build-browser` to build browser versions

+ 69 - 0
RNCode/node_modules/optionator/node_modules/prelude-ls/lib/Func.js

@@ -0,0 +1,69 @@
+// Generated by LiveScript 1.6.0
+var apply, curry, flip, fix, over, memoize, toString$ = {}.toString;
+apply = curry$(function(f, list){
+  return f.apply(null, list);
+});
+curry = function(f){
+  return curry$(f);
+};
+flip = curry$(function(f, x, y){
+  return f(y, x);
+});
+fix = function(f){
+  return function(g){
+    return function(){
+      return f(g(g)).apply(null, arguments);
+    };
+  }(function(g){
+    return function(){
+      return f(g(g)).apply(null, arguments);
+    };
+  });
+};
+over = curry$(function(f, g, x, y){
+  return f(g(x), g(y));
+});
+memoize = function(f){
+  var memo;
+  memo = {};
+  return function(){
+    var args, res$, i$, to$, key, arg;
+    res$ = [];
+    for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
+      res$.push(arguments[i$]);
+    }
+    args = res$;
+    key = (function(){
+      var i$, ref$, len$, results$ = [];
+      for (i$ = 0, len$ = (ref$ = args).length; i$ < len$; ++i$) {
+        arg = ref$[i$];
+        results$.push(arg + toString$.call(arg).slice(8, -1));
+      }
+      return results$;
+    }()).join('');
+    return memo[key] = key in memo
+      ? memo[key]
+      : f.apply(null, args);
+  };
+};
+module.exports = {
+  curry: curry,
+  flip: flip,
+  fix: fix,
+  apply: apply,
+  over: over,
+  memoize: memoize
+};
+function curry$(f, bound){
+  var context,
+  _curry = function(args) {
+    return f.length > 1 ? function(){
+      var params = args ? args.concat() : [];
+      context = bound ? context || this : this;
+      return params.push.apply(params, arguments) <
+          f.length && arguments.length ?
+        _curry.call(context, params) : f.apply(context, params);
+    } : f;
+  };
+  return _curry();
+}

+ 716 - 0
RNCode/node_modules/optionator/node_modules/prelude-ls/lib/List.js

@@ -0,0 +1,716 @@
+// Generated by LiveScript 1.6.0
+var each, map, compact, filter, reject, remove, partition, find, head, first, tail, last, initial, empty, reverse, unique, uniqueBy, fold, foldl, fold1, foldl1, foldr, foldr1, unfoldr, concat, concatMap, flatten, difference, intersection, union, countBy, groupBy, andList, orList, any, all, sort, sortWith, sortBy, sum, product, mean, average, maximum, minimum, maximumBy, minimumBy, scan, scanl, scan1, scanl1, scanr, scanr1, slice, take, drop, splitAt, takeWhile, dropWhile, span, breakList, zip, zipWith, zipAll, zipAllWith, at, elemIndex, elemIndices, findIndex, findIndices, toString$ = {}.toString;
+each = curry$(function(f, xs){
+  var i$, len$, x;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    f(x);
+  }
+  return xs;
+});
+map = curry$(function(f, xs){
+  var i$, len$, x, results$ = [];
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    results$.push(f(x));
+  }
+  return results$;
+});
+compact = function(xs){
+  var i$, len$, x, results$ = [];
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    if (x) {
+      results$.push(x);
+    }
+  }
+  return results$;
+};
+filter = curry$(function(f, xs){
+  var i$, len$, x, results$ = [];
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    if (f(x)) {
+      results$.push(x);
+    }
+  }
+  return results$;
+});
+reject = curry$(function(f, xs){
+  var i$, len$, x, results$ = [];
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    if (!f(x)) {
+      results$.push(x);
+    }
+  }
+  return results$;
+});
+remove = curry$(function(el, xs){
+  var i, x$;
+  i = elemIndex(el, xs);
+  x$ = xs.slice();
+  if (i != null) {
+    x$.splice(i, 1);
+  }
+  return x$;
+});
+partition = curry$(function(f, xs){
+  var passed, failed, i$, len$, x;
+  passed = [];
+  failed = [];
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    (f(x) ? passed : failed).push(x);
+  }
+  return [passed, failed];
+});
+find = curry$(function(f, xs){
+  var i$, len$, x;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    if (f(x)) {
+      return x;
+    }
+  }
+});
+head = first = function(xs){
+  return xs[0];
+};
+tail = function(xs){
+  if (!xs.length) {
+    return;
+  }
+  return xs.slice(1);
+};
+last = function(xs){
+  return xs[xs.length - 1];
+};
+initial = function(xs){
+  if (!xs.length) {
+    return;
+  }
+  return xs.slice(0, -1);
+};
+empty = function(xs){
+  return !xs.length;
+};
+reverse = function(xs){
+  return xs.concat().reverse();
+};
+unique = function(xs){
+  var result, i$, len$, x;
+  result = [];
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    if (!in$(x, result)) {
+      result.push(x);
+    }
+  }
+  return result;
+};
+uniqueBy = curry$(function(f, xs){
+  var seen, i$, len$, x, val, results$ = [];
+  seen = [];
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    val = f(x);
+    if (in$(val, seen)) {
+      continue;
+    }
+    seen.push(val);
+    results$.push(x);
+  }
+  return results$;
+});
+fold = foldl = curry$(function(f, memo, xs){
+  var i$, len$, x;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    memo = f(memo, x);
+  }
+  return memo;
+});
+fold1 = foldl1 = curry$(function(f, xs){
+  return fold(f, xs[0], xs.slice(1));
+});
+foldr = curry$(function(f, memo, xs){
+  var i$, x;
+  for (i$ = xs.length - 1; i$ >= 0; --i$) {
+    x = xs[i$];
+    memo = f(x, memo);
+  }
+  return memo;
+});
+foldr1 = curry$(function(f, xs){
+  return foldr(f, xs[xs.length - 1], xs.slice(0, -1));
+});
+unfoldr = curry$(function(f, b){
+  var result, x, that;
+  result = [];
+  x = b;
+  while ((that = f(x)) != null) {
+    result.push(that[0]);
+    x = that[1];
+  }
+  return result;
+});
+concat = function(xss){
+  return [].concat.apply([], xss);
+};
+concatMap = curry$(function(f, xs){
+  var x;
+  return [].concat.apply([], (function(){
+    var i$, ref$, len$, results$ = [];
+    for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
+      x = ref$[i$];
+      results$.push(f(x));
+    }
+    return results$;
+  }()));
+});
+flatten = function(xs){
+  var x;
+  return [].concat.apply([], (function(){
+    var i$, ref$, len$, results$ = [];
+    for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
+      x = ref$[i$];
+      if (toString$.call(x).slice(8, -1) === 'Array') {
+        results$.push(flatten(x));
+      } else {
+        results$.push(x);
+      }
+    }
+    return results$;
+  }()));
+};
+difference = function(xs){
+  var yss, res$, i$, to$, results, len$, x, j$, len1$, ys;
+  res$ = [];
+  for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {
+    res$.push(arguments[i$]);
+  }
+  yss = res$;
+  results = [];
+  outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) {
+      ys = yss[j$];
+      if (in$(x, ys)) {
+        continue outer;
+      }
+    }
+    results.push(x);
+  }
+  return results;
+};
+intersection = function(xs){
+  var yss, res$, i$, to$, results, len$, x, j$, len1$, ys;
+  res$ = [];
+  for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {
+    res$.push(arguments[i$]);
+  }
+  yss = res$;
+  results = [];
+  outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) {
+      ys = yss[j$];
+      if (!in$(x, ys)) {
+        continue outer;
+      }
+    }
+    results.push(x);
+  }
+  return results;
+};
+union = function(){
+  var xss, res$, i$, to$, results, len$, xs, j$, len1$, x;
+  res$ = [];
+  for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
+    res$.push(arguments[i$]);
+  }
+  xss = res$;
+  results = [];
+  for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
+    xs = xss[i$];
+    for (j$ = 0, len1$ = xs.length; j$ < len1$; ++j$) {
+      x = xs[j$];
+      if (!in$(x, results)) {
+        results.push(x);
+      }
+    }
+  }
+  return results;
+};
+countBy = curry$(function(f, xs){
+  var results, i$, len$, x, key;
+  results = {};
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    key = f(x);
+    if (key in results) {
+      results[key] += 1;
+    } else {
+      results[key] = 1;
+    }
+  }
+  return results;
+});
+groupBy = curry$(function(f, xs){
+  var results, i$, len$, x, key;
+  results = {};
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    key = f(x);
+    if (key in results) {
+      results[key].push(x);
+    } else {
+      results[key] = [x];
+    }
+  }
+  return results;
+});
+andList = function(xs){
+  var i$, len$, x;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    if (!x) {
+      return false;
+    }
+  }
+  return true;
+};
+orList = function(xs){
+  var i$, len$, x;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    if (x) {
+      return true;
+    }
+  }
+  return false;
+};
+any = curry$(function(f, xs){
+  var i$, len$, x;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    if (f(x)) {
+      return true;
+    }
+  }
+  return false;
+});
+all = curry$(function(f, xs){
+  var i$, len$, x;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    if (!f(x)) {
+      return false;
+    }
+  }
+  return true;
+});
+sort = function(xs){
+  return xs.concat().sort(function(x, y){
+    if (x > y) {
+      return 1;
+    } else if (x < y) {
+      return -1;
+    } else {
+      return 0;
+    }
+  });
+};
+sortWith = curry$(function(f, xs){
+  return xs.concat().sort(f);
+});
+sortBy = curry$(function(f, xs){
+  return xs.concat().sort(function(x, y){
+    if (f(x) > f(y)) {
+      return 1;
+    } else if (f(x) < f(y)) {
+      return -1;
+    } else {
+      return 0;
+    }
+  });
+});
+sum = function(xs){
+  var result, i$, len$, x;
+  result = 0;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    result += x;
+  }
+  return result;
+};
+product = function(xs){
+  var result, i$, len$, x;
+  result = 1;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    result *= x;
+  }
+  return result;
+};
+mean = average = function(xs){
+  var sum, i$, len$, x;
+  sum = 0;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    x = xs[i$];
+    sum += x;
+  }
+  return sum / xs.length;
+};
+maximum = function(xs){
+  var max, i$, ref$, len$, x;
+  max = xs[0];
+  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
+    x = ref$[i$];
+    if (x > max) {
+      max = x;
+    }
+  }
+  return max;
+};
+minimum = function(xs){
+  var min, i$, ref$, len$, x;
+  min = xs[0];
+  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
+    x = ref$[i$];
+    if (x < min) {
+      min = x;
+    }
+  }
+  return min;
+};
+maximumBy = curry$(function(f, xs){
+  var max, i$, ref$, len$, x;
+  max = xs[0];
+  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
+    x = ref$[i$];
+    if (f(x) > f(max)) {
+      max = x;
+    }
+  }
+  return max;
+});
+minimumBy = curry$(function(f, xs){
+  var min, i$, ref$, len$, x;
+  min = xs[0];
+  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
+    x = ref$[i$];
+    if (f(x) < f(min)) {
+      min = x;
+    }
+  }
+  return min;
+});
+scan = scanl = curry$(function(f, memo, xs){
+  var last, x;
+  last = memo;
+  return [memo].concat((function(){
+    var i$, ref$, len$, results$ = [];
+    for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
+      x = ref$[i$];
+      results$.push(last = f(last, x));
+    }
+    return results$;
+  }()));
+});
+scan1 = scanl1 = curry$(function(f, xs){
+  if (!xs.length) {
+    return;
+  }
+  return scan(f, xs[0], xs.slice(1));
+});
+scanr = curry$(function(f, memo, xs){
+  xs = xs.concat().reverse();
+  return scan(f, memo, xs).reverse();
+});
+scanr1 = curry$(function(f, xs){
+  if (!xs.length) {
+    return;
+  }
+  xs = xs.concat().reverse();
+  return scan(f, xs[0], xs.slice(1)).reverse();
+});
+slice = curry$(function(x, y, xs){
+  return xs.slice(x, y);
+});
+take = curry$(function(n, xs){
+  if (n <= 0) {
+    return xs.slice(0, 0);
+  } else {
+    return xs.slice(0, n);
+  }
+});
+drop = curry$(function(n, xs){
+  if (n <= 0) {
+    return xs;
+  } else {
+    return xs.slice(n);
+  }
+});
+splitAt = curry$(function(n, xs){
+  return [take(n, xs), drop(n, xs)];
+});
+takeWhile = curry$(function(p, xs){
+  var len, i;
+  len = xs.length;
+  if (!len) {
+    return xs;
+  }
+  i = 0;
+  while (i < len && p(xs[i])) {
+    i += 1;
+  }
+  return xs.slice(0, i);
+});
+dropWhile = curry$(function(p, xs){
+  var len, i;
+  len = xs.length;
+  if (!len) {
+    return xs;
+  }
+  i = 0;
+  while (i < len && p(xs[i])) {
+    i += 1;
+  }
+  return xs.slice(i);
+});
+span = curry$(function(p, xs){
+  return [takeWhile(p, xs), dropWhile(p, xs)];
+});
+breakList = curry$(function(p, xs){
+  return span(compose$(p, not$), xs);
+});
+zip = curry$(function(xs, ys){
+  var result, len, i$, len$, i, x;
+  result = [];
+  len = ys.length;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    i = i$;
+    x = xs[i$];
+    if (i === len) {
+      break;
+    }
+    result.push([x, ys[i]]);
+  }
+  return result;
+});
+zipWith = curry$(function(f, xs, ys){
+  var result, len, i$, len$, i, x;
+  result = [];
+  len = ys.length;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    i = i$;
+    x = xs[i$];
+    if (i === len) {
+      break;
+    }
+    result.push(f(x, ys[i]));
+  }
+  return result;
+});
+zipAll = function(){
+  var xss, res$, i$, to$, minLength, len$, xs, ref$, i, lresult$, j$, results$ = [];
+  res$ = [];
+  for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
+    res$.push(arguments[i$]);
+  }
+  xss = res$;
+  minLength = undefined;
+  for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
+    xs = xss[i$];
+    minLength <= (ref$ = xs.length) || (minLength = ref$);
+  }
+  for (i$ = 0; i$ < minLength; ++i$) {
+    i = i$;
+    lresult$ = [];
+    for (j$ = 0, len$ = xss.length; j$ < len$; ++j$) {
+      xs = xss[j$];
+      lresult$.push(xs[i]);
+    }
+    results$.push(lresult$);
+  }
+  return results$;
+};
+zipAllWith = function(f){
+  var xss, res$, i$, to$, minLength, len$, xs, ref$, i, results$ = [];
+  res$ = [];
+  for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {
+    res$.push(arguments[i$]);
+  }
+  xss = res$;
+  minLength = undefined;
+  for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
+    xs = xss[i$];
+    minLength <= (ref$ = xs.length) || (minLength = ref$);
+  }
+  for (i$ = 0; i$ < minLength; ++i$) {
+    i = i$;
+    results$.push(f.apply(null, (fn$())));
+  }
+  return results$;
+  function fn$(){
+    var i$, ref$, len$, results$ = [];
+    for (i$ = 0, len$ = (ref$ = xss).length; i$ < len$; ++i$) {
+      xs = ref$[i$];
+      results$.push(xs[i]);
+    }
+    return results$;
+  }
+};
+at = curry$(function(n, xs){
+  if (n < 0) {
+    return xs[xs.length + n];
+  } else {
+    return xs[n];
+  }
+});
+elemIndex = curry$(function(el, xs){
+  var i$, len$, i, x;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    i = i$;
+    x = xs[i$];
+    if (x === el) {
+      return i;
+    }
+  }
+});
+elemIndices = curry$(function(el, xs){
+  var i$, len$, i, x, results$ = [];
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    i = i$;
+    x = xs[i$];
+    if (x === el) {
+      results$.push(i);
+    }
+  }
+  return results$;
+});
+findIndex = curry$(function(f, xs){
+  var i$, len$, i, x;
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    i = i$;
+    x = xs[i$];
+    if (f(x)) {
+      return i;
+    }
+  }
+});
+findIndices = curry$(function(f, xs){
+  var i$, len$, i, x, results$ = [];
+  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
+    i = i$;
+    x = xs[i$];
+    if (f(x)) {
+      results$.push(i);
+    }
+  }
+  return results$;
+});
+module.exports = {
+  each: each,
+  map: map,
+  filter: filter,
+  compact: compact,
+  reject: reject,
+  remove: remove,
+  partition: partition,
+  find: find,
+  head: head,
+  first: first,
+  tail: tail,
+  last: last,
+  initial: initial,
+  empty: empty,
+  reverse: reverse,
+  difference: difference,
+  intersection: intersection,
+  union: union,
+  countBy: countBy,
+  groupBy: groupBy,
+  fold: fold,
+  fold1: fold1,
+  foldl: foldl,
+  foldl1: foldl1,
+  foldr: foldr,
+  foldr1: foldr1,
+  unfoldr: unfoldr,
+  andList: andList,
+  orList: orList,
+  any: any,
+  all: all,
+  unique: unique,
+  uniqueBy: uniqueBy,
+  sort: sort,
+  sortWith: sortWith,
+  sortBy: sortBy,
+  sum: sum,
+  product: product,
+  mean: mean,
+  average: average,
+  concat: concat,
+  concatMap: concatMap,
+  flatten: flatten,
+  maximum: maximum,
+  minimum: minimum,
+  maximumBy: maximumBy,
+  minimumBy: minimumBy,
+  scan: scan,
+  scan1: scan1,
+  scanl: scanl,
+  scanl1: scanl1,
+  scanr: scanr,
+  scanr1: scanr1,
+  slice: slice,
+  take: take,
+  drop: drop,
+  splitAt: splitAt,
+  takeWhile: takeWhile,
+  dropWhile: dropWhile,
+  span: span,
+  breakList: breakList,
+  zip: zip,
+  zipWith: zipWith,
+  zipAll: zipAll,
+  zipAllWith: zipAllWith,
+  at: at,
+  elemIndex: elemIndex,
+  elemIndices: elemIndices,
+  findIndex: findIndex,
+  findIndices: findIndices
+};
+function curry$(f, bound){
+  var context,
+  _curry = function(args) {
+    return f.length > 1 ? function(){
+      var params = args ? args.concat() : [];
+      context = bound ? context || this : this;
+      return params.push.apply(params, arguments) <
+          f.length && arguments.length ?
+        _curry.call(context, params) : f.apply(context, params);
+    } : f;
+  };
+  return _curry();
+}
+function in$(x, xs){
+  var i = -1, l = xs.length >>> 0;
+  while (++i < l) if (x === xs[i]) return true;
+  return false;
+}
+function compose$() {
+  var functions = arguments;
+  return function() {
+    var i, result;
+    result = functions[0].apply(this, arguments);
+    for (i = 1; i < functions.length; ++i) {
+      result = functions[i](result);
+    }
+    return result;
+  };
+}
+function not$(x){ return !x; }

+ 130 - 0
RNCode/node_modules/optionator/node_modules/prelude-ls/lib/Num.js

@@ -0,0 +1,130 @@
+// Generated by LiveScript 1.6.0
+var max, min, negate, abs, signum, quot, rem, div, mod, recip, pi, tau, exp, sqrt, ln, pow, sin, tan, cos, asin, acos, atan, atan2, truncate, round, ceiling, floor, isItNaN, even, odd, gcd, lcm;
+max = curry$(function(x$, y$){
+  return x$ > y$ ? x$ : y$;
+});
+min = curry$(function(x$, y$){
+  return x$ < y$ ? x$ : y$;
+});
+negate = function(x){
+  return -x;
+};
+abs = Math.abs;
+signum = function(x){
+  if (x < 0) {
+    return -1;
+  } else if (x > 0) {
+    return 1;
+  } else {
+    return 0;
+  }
+};
+quot = curry$(function(x, y){
+  return ~~(x / y);
+});
+rem = curry$(function(x$, y$){
+  return x$ % y$;
+});
+div = curry$(function(x, y){
+  return Math.floor(x / y);
+});
+mod = curry$(function(x$, y$){
+  var ref$;
+  return ((x$) % (ref$ = y$) + ref$) % ref$;
+});
+recip = (function(it){
+  return 1 / it;
+});
+pi = Math.PI;
+tau = pi * 2;
+exp = Math.exp;
+sqrt = Math.sqrt;
+ln = Math.log;
+pow = curry$(function(x$, y$){
+  return Math.pow(x$, y$);
+});
+sin = Math.sin;
+tan = Math.tan;
+cos = Math.cos;
+asin = Math.asin;
+acos = Math.acos;
+atan = Math.atan;
+atan2 = curry$(function(x, y){
+  return Math.atan2(x, y);
+});
+truncate = function(x){
+  return ~~x;
+};
+round = Math.round;
+ceiling = Math.ceil;
+floor = Math.floor;
+isItNaN = function(x){
+  return x !== x;
+};
+even = function(x){
+  return x % 2 === 0;
+};
+odd = function(x){
+  return x % 2 !== 0;
+};
+gcd = curry$(function(x, y){
+  var z;
+  x = Math.abs(x);
+  y = Math.abs(y);
+  while (y !== 0) {
+    z = x % y;
+    x = y;
+    y = z;
+  }
+  return x;
+});
+lcm = curry$(function(x, y){
+  return Math.abs(Math.floor(x / gcd(x, y) * y));
+});
+module.exports = {
+  max: max,
+  min: min,
+  negate: negate,
+  abs: abs,
+  signum: signum,
+  quot: quot,
+  rem: rem,
+  div: div,
+  mod: mod,
+  recip: recip,
+  pi: pi,
+  tau: tau,
+  exp: exp,
+  sqrt: sqrt,
+  ln: ln,
+  pow: pow,
+  sin: sin,
+  tan: tan,
+  cos: cos,
+  acos: acos,
+  asin: asin,
+  atan: atan,
+  atan2: atan2,
+  truncate: truncate,
+  round: round,
+  ceiling: ceiling,
+  floor: floor,
+  isItNaN: isItNaN,
+  even: even,
+  odd: odd,
+  gcd: gcd,
+  lcm: lcm
+};
+function curry$(f, bound){
+  var context,
+  _curry = function(args) {
+    return f.length > 1 ? function(){
+      var params = args ? args.concat() : [];
+      context = bound ? context || this : this;
+      return params.push.apply(params, arguments) <
+          f.length && arguments.length ?
+        _curry.call(context, params) : f.apply(context, params);
+    } : f;
+  };
+  return _curry();
+}

+ 154 - 0
RNCode/node_modules/optionator/node_modules/prelude-ls/lib/Obj.js

@@ -0,0 +1,154 @@
+// Generated by LiveScript 1.6.0
+var values, keys, pairsToObj, objToPairs, listsToObj, objToLists, empty, each, map, compact, filter, reject, partition, find;
+values = function(object){
+  var i$, x, results$ = [];
+  for (i$ in object) {
+    x = object[i$];
+    results$.push(x);
+  }
+  return results$;
+};
+keys = function(object){
+  var x, results$ = [];
+  for (x in object) {
+    results$.push(x);
+  }
+  return results$;
+};
+pairsToObj = function(object){
+  var i$, len$, x, resultObj$ = {};
+  for (i$ = 0, len$ = object.length; i$ < len$; ++i$) {
+    x = object[i$];
+    resultObj$[x[0]] = x[1];
+  }
+  return resultObj$;
+};
+objToPairs = function(object){
+  var key, value, results$ = [];
+  for (key in object) {
+    value = object[key];
+    results$.push([key, value]);
+  }
+  return results$;
+};
+listsToObj = curry$(function(keys, values){
+  var i$, len$, i, key, resultObj$ = {};
+  for (i$ = 0, len$ = keys.length; i$ < len$; ++i$) {
+    i = i$;
+    key = keys[i$];
+    resultObj$[key] = values[i];
+  }
+  return resultObj$;
+});
+objToLists = function(object){
+  var keys, values, key, value;
+  keys = [];
+  values = [];
+  for (key in object) {
+    value = object[key];
+    keys.push(key);
+    values.push(value);
+  }
+  return [keys, values];
+};
+empty = function(object){
+  var x;
+  for (x in object) {
+    return false;
+  }
+  return true;
+};
+each = curry$(function(f, object){
+  var i$, x;
+  for (i$ in object) {
+    x = object[i$];
+    f(x);
+  }
+  return object;
+});
+map = curry$(function(f, object){
+  var k, x, resultObj$ = {};
+  for (k in object) {
+    x = object[k];
+    resultObj$[k] = f(x);
+  }
+  return resultObj$;
+});
+compact = function(object){
+  var k, x, resultObj$ = {};
+  for (k in object) {
+    x = object[k];
+    if (x) {
+      resultObj$[k] = x;
+    }
+  }
+  return resultObj$;
+};
+filter = curry$(function(f, object){
+  var k, x, resultObj$ = {};
+  for (k in object) {
+    x = object[k];
+    if (f(x)) {
+      resultObj$[k] = x;
+    }
+  }
+  return resultObj$;
+});
+reject = curry$(function(f, object){
+  var k, x, resultObj$ = {};
+  for (k in object) {
+    x = object[k];
+    if (!f(x)) {
+      resultObj$[k] = x;
+    }
+  }
+  return resultObj$;
+});
+partition = curry$(function(f, object){
+  var passed, failed, k, x;
+  passed = {};
+  failed = {};
+  for (k in object) {
+    x = object[k];
+    (f(x) ? passed : failed)[k] = x;
+  }
+  return [passed, failed];
+});
+find = curry$(function(f, object){
+  var i$, x;
+  for (i$ in object) {
+    x = object[i$];
+    if (f(x)) {
+      return x;
+    }
+  }
+});
+module.exports = {
+  values: values,
+  keys: keys,
+  pairsToObj: pairsToObj,
+  objToPairs: objToPairs,
+  listsToObj: listsToObj,
+  objToLists: objToLists,
+  empty: empty,
+  each: each,
+  map: map,
+  filter: filter,
+  compact: compact,
+  reject: reject,
+  partition: partition,
+  find: find
+};
+function curry$(f, bound){
+  var context,
+  _curry = function(args) {
+    return f.length > 1 ? function(){
+      var params = args ? args.concat() : [];
+      context = bound ? context || this : this;
+      return params.push.apply(params, arguments) <
+          f.length && arguments.length ?
+        _curry.call(context, params) : f.apply(context, params);
+    } : f;
+  };
+  return _curry();
+}

+ 92 - 0
RNCode/node_modules/optionator/node_modules/prelude-ls/lib/Str.js

@@ -0,0 +1,92 @@
+// Generated by LiveScript 1.6.0
+var split, join, lines, unlines, words, unwords, chars, unchars, reverse, repeat, capitalize, camelize, dasherize;
+split = curry$(function(sep, str){
+  return str.split(sep);
+});
+join = curry$(function(sep, xs){
+  return xs.join(sep);
+});
+lines = function(str){
+  if (!str.length) {
+    return [];
+  }
+  return str.split('\n');
+};
+unlines = function(it){
+  return it.join('\n');
+};
+words = function(str){
+  if (!str.length) {
+    return [];
+  }
+  return str.split(/[ ]+/);
+};
+unwords = function(it){
+  return it.join(' ');
+};
+chars = function(it){
+  return it.split('');
+};
+unchars = function(it){
+  return it.join('');
+};
+reverse = function(str){
+  return str.split('').reverse().join('');
+};
+repeat = curry$(function(n, str){
+  var result, i$;
+  result = '';
+  for (i$ = 0; i$ < n; ++i$) {
+    result += str;
+  }
+  return result;
+});
+capitalize = function(str){
+  return str.charAt(0).toUpperCase() + str.slice(1);
+};
+camelize = function(it){
+  return it.replace(/[-_]+(.)?/g, function(arg$, c){
+    return (c != null ? c : '').toUpperCase();
+  });
+};
+dasherize = function(str){
+  return str.replace(/([^-A-Z])([A-Z]+)/g, function(arg$, lower, upper){
+    return lower + "-" + (upper.length > 1
+      ? upper
+      : upper.toLowerCase());
+  }).replace(/^([A-Z]+)/, function(arg$, upper){
+    if (upper.length > 1) {
+      return upper + "-";
+    } else {
+      return upper.toLowerCase();
+    }
+  });
+};
+module.exports = {
+  split: split,
+  join: join,
+  lines: lines,
+  unlines: unlines,
+  words: words,
+  unwords: unwords,
+  chars: chars,
+  unchars: unchars,
+  reverse: reverse,
+  repeat: repeat,
+  capitalize: capitalize,
+  camelize: camelize,
+  dasherize: dasherize
+};
+function curry$(f, bound){
+  var context,
+  _curry = function(args) {
+    return f.length > 1 ? function(){
+      var params = args ? args.concat() : [];
+      context = bound ? context || this : this;
+      return params.push.apply(params, arguments) <
+          f.length && arguments.length ?
+        _curry.call(context, params) : f.apply(context, params);
+    } : f;
+  };
+  return _curry();
+}

+ 178 - 0
RNCode/node_modules/optionator/node_modules/prelude-ls/lib/index.js

@@ -0,0 +1,178 @@
+// Generated by LiveScript 1.6.0
+var Func, List, Obj, Str, Num, id, isType, replicate, prelude, toString$ = {}.toString;
+Func = require('./Func.js');
+List = require('./List.js');
+Obj = require('./Obj.js');
+Str = require('./Str.js');
+Num = require('./Num.js');
+id = function(x){
+  return x;
+};
+isType = curry$(function(type, x){
+  return toString$.call(x).slice(8, -1) === type;
+});
+replicate = curry$(function(n, x){
+  var i$, results$ = [];
+  for (i$ = 0; i$ < n; ++i$) {
+    results$.push(x);
+  }
+  return results$;
+});
+Str.empty = List.empty;
+Str.slice = List.slice;
+Str.take = List.take;
+Str.drop = List.drop;
+Str.splitAt = List.splitAt;
+Str.takeWhile = List.takeWhile;
+Str.dropWhile = List.dropWhile;
+Str.span = List.span;
+Str.breakStr = List.breakList;
+prelude = {
+  Func: Func,
+  List: List,
+  Obj: Obj,
+  Str: Str,
+  Num: Num,
+  id: id,
+  isType: isType,
+  replicate: replicate
+};
+prelude.each = List.each;
+prelude.map = List.map;
+prelude.filter = List.filter;
+prelude.compact = List.compact;
+prelude.reject = List.reject;
+prelude.partition = List.partition;
+prelude.find = List.find;
+prelude.head = List.head;
+prelude.first = List.first;
+prelude.tail = List.tail;
+prelude.last = List.last;
+prelude.initial = List.initial;
+prelude.empty = List.empty;
+prelude.reverse = List.reverse;
+prelude.difference = List.difference;
+prelude.intersection = List.intersection;
+prelude.union = List.union;
+prelude.countBy = List.countBy;
+prelude.groupBy = List.groupBy;
+prelude.fold = List.fold;
+prelude.foldl = List.foldl;
+prelude.fold1 = List.fold1;
+prelude.foldl1 = List.foldl1;
+prelude.foldr = List.foldr;
+prelude.foldr1 = List.foldr1;
+prelude.unfoldr = List.unfoldr;
+prelude.andList = List.andList;
+prelude.orList = List.orList;
+prelude.any = List.any;
+prelude.all = List.all;
+prelude.unique = List.unique;
+prelude.uniqueBy = List.uniqueBy;
+prelude.sort = List.sort;
+prelude.sortWith = List.sortWith;
+prelude.sortBy = List.sortBy;
+prelude.sum = List.sum;
+prelude.product = List.product;
+prelude.mean = List.mean;
+prelude.average = List.average;
+prelude.concat = List.concat;
+prelude.concatMap = List.concatMap;
+prelude.flatten = List.flatten;
+prelude.maximum = List.maximum;
+prelude.minimum = List.minimum;
+prelude.maximumBy = List.maximumBy;
+prelude.minimumBy = List.minimumBy;
+prelude.scan = List.scan;
+prelude.scanl = List.scanl;
+prelude.scan1 = List.scan1;
+prelude.scanl1 = List.scanl1;
+prelude.scanr = List.scanr;
+prelude.scanr1 = List.scanr1;
+prelude.slice = List.slice;
+prelude.take = List.take;
+prelude.drop = List.drop;
+prelude.splitAt = List.splitAt;
+prelude.takeWhile = List.takeWhile;
+prelude.dropWhile = List.dropWhile;
+prelude.span = List.span;
+prelude.breakList = List.breakList;
+prelude.zip = List.zip;
+prelude.zipWith = List.zipWith;
+prelude.zipAll = List.zipAll;
+prelude.zipAllWith = List.zipAllWith;
+prelude.at = List.at;
+prelude.elemIndex = List.elemIndex;
+prelude.elemIndices = List.elemIndices;
+prelude.findIndex = List.findIndex;
+prelude.findIndices = List.findIndices;
+prelude.apply = Func.apply;
+prelude.curry = Func.curry;
+prelude.flip = Func.flip;
+prelude.fix = Func.fix;
+prelude.over = Func.over;
+prelude.split = Str.split;
+prelude.join = Str.join;
+prelude.lines = Str.lines;
+prelude.unlines = Str.unlines;
+prelude.words = Str.words;
+prelude.unwords = Str.unwords;
+prelude.chars = Str.chars;
+prelude.unchars = Str.unchars;
+prelude.repeat = Str.repeat;
+prelude.capitalize = Str.capitalize;
+prelude.camelize = Str.camelize;
+prelude.dasherize = Str.dasherize;
+prelude.values = Obj.values;
+prelude.keys = Obj.keys;
+prelude.pairsToObj = Obj.pairsToObj;
+prelude.objToPairs = Obj.objToPairs;
+prelude.listsToObj = Obj.listsToObj;
+prelude.objToLists = Obj.objToLists;
+prelude.max = Num.max;
+prelude.min = Num.min;
+prelude.negate = Num.negate;
+prelude.abs = Num.abs;
+prelude.signum = Num.signum;
+prelude.quot = Num.quot;
+prelude.rem = Num.rem;
+prelude.div = Num.div;
+prelude.mod = Num.mod;
+prelude.recip = Num.recip;
+prelude.pi = Num.pi;
+prelude.tau = Num.tau;
+prelude.exp = Num.exp;
+prelude.sqrt = Num.sqrt;
+prelude.ln = Num.ln;
+prelude.pow = Num.pow;
+prelude.sin = Num.sin;
+prelude.tan = Num.tan;
+prelude.cos = Num.cos;
+prelude.acos = Num.acos;
+prelude.asin = Num.asin;
+prelude.atan = Num.atan;
+prelude.atan2 = Num.atan2;
+prelude.truncate = Num.truncate;
+prelude.round = Num.round;
+prelude.ceiling = Num.ceiling;
+prelude.floor = Num.floor;
+prelude.isItNaN = Num.isItNaN;
+prelude.even = Num.even;
+prelude.odd = Num.odd;
+prelude.gcd = Num.gcd;
+prelude.lcm = Num.lcm;
+prelude.VERSION = '1.2.1';
+module.exports = prelude;
+function curry$(f, bound){
+  var context,
+  _curry = function(args) {
+    return f.length > 1 ? function(){
+      var params = args ? args.concat() : [];
+      context = bound ? context || this : this;
+      return params.push.apply(params, arguments) <
+          f.length && arguments.length ?
+        _curry.call(context, params) : f.apply(context, params);
+    } : f;
+  };
+  return _curry();
+}

+ 46 - 0
RNCode/node_modules/optionator/node_modules/prelude-ls/package.json

@@ -0,0 +1,46 @@
+{
+  "name": "prelude-ls",
+  "version": "1.2.1",
+  "author": "George Zahariev <z@georgezahariev.com>",
+  "description": "prelude.ls is a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, LiveScript.",
+  "keywords": [
+    "prelude",
+    "livescript",
+    "utility",
+    "ls",
+    "coffeescript",
+    "javascript",
+    "library",
+    "functional",
+    "array",
+    "list",
+    "object",
+    "string"
+  ],
+  "main": "lib/",
+  "files": [
+    "lib/",
+    "README.md",
+    "LICENSE"
+  ],
+  "homepage": "http://preludels.com",
+  "bugs": "https://github.com/gkz/prelude-ls/issues",
+  "license": "MIT",
+  "engines": {
+    "node": ">= 0.8.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/gkz/prelude-ls.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "devDependencies": {
+    "livescript": "^1.6.0",
+    "uglify-js": "^3.8.1",
+    "mocha": "^7.1.1",
+    "browserify": "^16.5.1",
+    "sinon": "~8.0.1"
+  }
+}

+ 22 - 0
RNCode/node_modules/optionator/node_modules/type-check/LICENSE

@@ -0,0 +1,22 @@
+Copyright (c) George Zahariev
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.

+ 210 - 0
RNCode/node_modules/optionator/node_modules/type-check/README.md

@@ -0,0 +1,210 @@
+# type-check [![Build Status](https://travis-ci.org/gkz/type-check.png?branch=master)](https://travis-ci.org/gkz/type-check)
+
+<a name="type-check" />
+
+`type-check` is a library which allows you to check the types of JavaScript values at runtime with a Haskell like type syntax. It is great for checking external input, for testing, or even for adding a bit of safety to your internal code. It is a major component of [levn](https://github.com/gkz/levn). MIT license. Version 0.4.0. Check out the [demo](http://gkz.github.io/type-check/).
+
+For updates on `type-check`, [follow me on twitter](https://twitter.com/gkzahariev).
+
+    npm install type-check
+
+## Quick Examples
+
+```js
+// Basic types:
+var typeCheck = require('type-check').typeCheck;
+typeCheck('Number', 1);               // true
+typeCheck('Number', 'str');           // false
+typeCheck('Error', new Error);        // true
+typeCheck('Undefined', undefined);    // true
+
+// Comment
+typeCheck('count::Number', 1);        // true
+
+// One type OR another type:
+typeCheck('Number | String', 2);      // true
+typeCheck('Number | String', 'str');  // true
+
+// Wildcard, matches all types:
+typeCheck('*', 2) // true
+
+// Array, all elements of a single type:
+typeCheck('[Number]', [1, 2, 3]);                // true
+typeCheck('[Number]', [1, 'str', 3]);            // false
+
+// Tuples, or fixed length arrays with elements of different types:
+typeCheck('(String, Number)', ['str', 2]);       // true
+typeCheck('(String, Number)', ['str']);          // false
+typeCheck('(String, Number)', ['str', 2, 5]);    // false
+
+// Object properties:
+typeCheck('{x: Number, y: Boolean}', {x: 2, y: false});             // true
+typeCheck('{x: Number, y: Boolean}',       {x: 2});                 // false
+typeCheck('{x: Number, y: Maybe Boolean}', {x: 2});                 // true
+typeCheck('{x: Number, y: Boolean}',      {x: 2, y: false, z: 3});  // false
+typeCheck('{x: Number, y: Boolean, ...}', {x: 2, y: false, z: 3});  // true
+
+// A particular type AND object properties:
+typeCheck('RegExp{source: String, ...}', /re/i);          // true
+typeCheck('RegExp{source: String, ...}', {source: 're'}); // false
+
+// Custom types:
+var opt = {customTypes:
+  {Even: { typeOf: 'Number', validate: function(x) { return x % 2 === 0; }}}};
+typeCheck('Even', 2, opt); // true
+
+// Nested:
+var type = '{a: (String, [Number], {y: Array, ...}), b: Error{message: String, ...}}'
+typeCheck(type, {a: ['hi', [1, 2, 3], {y: [1, 'ms']}], b: new Error('oh no')}); // true
+```
+
+Check out the [type syntax format](#syntax) and [guide](#guide).
+
+## Usage
+
+`require('type-check');` returns an object that exposes four properties. `VERSION` is the current version of the library as a string. `typeCheck`, `parseType`, and `parsedTypeCheck` are functions.
+
+```js
+// typeCheck(type, input, options);
+typeCheck('Number', 2);               // true
+
+// parseType(type);
+var parsedType = parseType('Number'); // object
+
+// parsedTypeCheck(parsedType, input, options);
+parsedTypeCheck(parsedType, 2);       // true
+```
+
+### typeCheck(type, input, options)
+
+`typeCheck` checks a JavaScript value `input` against `type` written in the [type format](#type-format) (and taking account the optional `options`) and returns whether the `input` matches the `type`.
+
+##### arguments
+* type - `String` - the type written in the [type format](#type-format) which to check against
+* input - `*` - any JavaScript value, which is to be checked against the type
+* options - `Maybe Object` - an optional parameter specifying additional options, currently the only available option is specifying [custom types](#custom-types)
+
+##### returns
+`Boolean` - whether the input matches the type
+
+##### example
+```js
+typeCheck('Number', 2); // true
+```
+
+### parseType(type)
+
+`parseType` parses string `type` written in the [type format](#type-format) into an object representing the parsed type.
+
+##### arguments
+* type - `String` - the type written in the [type format](#type-format) which to parse
+
+##### returns
+`Object` - an object in the parsed type format representing the parsed type
+
+##### example
+```js
+parseType('Number'); // [{type: 'Number'}]
+```
+### parsedTypeCheck(parsedType, input, options)
+
+`parsedTypeCheck` checks a JavaScript value `input` against parsed `type` in the parsed type format (and taking account the optional `options`) and returns whether the `input` matches the `type`. Use this in conjunction with `parseType` if you are going to use a type more than once.
+
+##### arguments
+* type - `Object` - the type in the parsed type format which to check against
+* input - `*` - any JavaScript value, which is to be checked against the type
+* options - `Maybe Object` - an optional parameter specifying additional options, currently the only available option is specifying [custom types](#custom-types)
+
+##### returns
+`Boolean` - whether the input matches the type
+
+##### example
+```js
+parsedTypeCheck([{type: 'Number'}], 2); // true
+var parsedType = parseType('String');
+parsedTypeCheck(parsedType, 'str');     // true
+```
+
+<a name="type-format" />
+## Type Format
+
+### Syntax
+
+White space is ignored. The root node is a __Types__.
+
+* __Identifier__ = `[\$\w]+` - a group of any lower or upper case letters, numbers, underscores, or dollar signs - eg. `String`
+* __Type__ = an `Identifier`, an `Identifier` followed by a `Structure`, just a `Structure`, or a wildcard `*` - eg. `String`, `Object{x: Number}`, `{x: Number}`, `Array{0: String, 1: Boolean, length: Number}`, `*`
+* __Types__ = optionally a comment (an `Identifier` followed by a `::`), optionally the identifier `Maybe`, one or more `Type`, separated by `|` - eg. `Number`, `String | Date`, `Maybe Number`, `Maybe Boolean | String`
+* __Structure__ = `Fields`, or a `Tuple`, or an `Array` - eg. `{x: Number}`, `(String, Number)`, `[Date]`
+* __Fields__ = a `{`, followed one or more `Field` separated by a comma `,` (trailing comma `,` is permitted), optionally an `...` (always preceded by a comma `,`), followed by a `}` - eg. `{x: Number, y: String}`, `{k: Function, ...}`
+* __Field__ = an `Identifier`, followed by a colon `:`, followed by `Types` - eg. `x: Date | String`, `y: Boolean`
+* __Tuple__ = a `(`, followed by one or more `Types` separated by a comma `,` (trailing comma `,` is permitted), followed by a `)` - eg `(Date)`, `(Number, Date)`
+* __Array__ = a `[` followed by exactly one `Types` followed by a `]` - eg. `[Boolean]`, `[Boolean | Null]`
+
+### Guide
+
+`type-check` uses `Object.toString` to find out the basic type of a value. Specifically,
+
+```js
+{}.toString.call(VALUE).slice(8, -1)
+{}.toString.call(true).slice(8, -1) // 'Boolean'
+```
+A basic type, eg. `Number`, uses this check. This is much more versatile than using `typeof` - for example, with `document`, `typeof` produces `'object'` which isn't that useful, and our technique produces `'HTMLDocument'`.
+
+You may check for multiple types by separating types with a `|`. The checker proceeds from left to right, and passes if the value is any of the types - eg. `String | Boolean` first checks if the value is a string, and then if it is a boolean. If it is none of those, then it returns false.
+
+Adding a `Maybe` in front of a list of multiple types is the same as also checking for `Null` and `Undefined` - eg. `Maybe String` is equivalent to `Undefined | Null | String`.
+
+You may add a comment to remind you of what the type is for by following an identifier with a `::` before a type (or multiple types). The comment is simply thrown out.
+
+The wildcard `*` matches all types.
+
+There are three types of structures for checking the contents of a value: 'fields', 'tuple', and 'array'.
+
+If used by itself, a 'fields' structure will pass with any type of object as long as it is an instance of `Object` and the properties pass - this allows for duck typing - eg. `{x: Boolean}`.
+
+To check if the properties pass, and the value is of a certain type, you can specify the type - eg. `Error{message: String}`.
+
+If you want to make a field optional, you can simply use `Maybe` - eg. `{x: Boolean, y: Maybe String}` will still pass if `y` is undefined (or null).
+
+If you don't care if the value has properties beyond what you have specified, you can use the 'etc' operator `...` - eg. `{x: Boolean, ...}` will match an object with an `x` property that is a boolean, and with zero or more other properties.
+
+For an array, you must specify one or more types (separated by `|`) - it will pass for something of any length as long as each element passes the types provided - eg. `[Number]`, `[Number | String]`.
+
+A tuple checks for a fixed number of elements, each of a potentially different type. Each element is separated by a comma - eg. `(String, Number)`.
+
+An array and tuple structure check that the value is of type `Array` by default, but if another type is specified, they will check for that instead - eg. `Int32Array[Number]`. You can use the wildcard `*` to search for any type at all.
+
+Check out the [type precedence](https://github.com/zaboco/type-precedence) library for type-check.
+
+## Options
+
+Options is an object. It is an optional parameter to the `typeCheck` and `parsedTypeCheck` functions. The only current option is `customTypes`.
+
+<a name="custom-types" />
+### Custom Types
+
+__Example:__
+
+```js
+var options = {
+  customTypes: {
+    Even: {
+      typeOf: 'Number',
+      validate: function(x) {
+        return x % 2 === 0;
+      }
+    }
+  }
+};
+typeCheck('Even', 2, options); // true
+typeCheck('Even', 3, options); // false
+```
+
+`customTypes` allows you to set up custom types for validation. The value of this is an object. The keys of the object are the types you will be matching. Each value of the object will be an object having a `typeOf` property - a string, and `validate` property - a function.
+
+The `typeOf` property is the type the value should be (optional - if not set only `validate` will be used), and `validate` is a function which should return true if the value is of that type. `validate` receives one parameter, which is the value that we are checking.
+
+## Technical About
+
+`type-check` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It also uses the [prelude.ls](http://preludels.com/) library.

+ 128 - 0
RNCode/node_modules/optionator/node_modules/type-check/lib/check.js

@@ -0,0 +1,128 @@
+// Generated by LiveScript 1.6.0
+(function(){
+  var ref$, any, all, isItNaN, types, defaultType, toString$ = {}.toString;
+  ref$ = require('prelude-ls'), any = ref$.any, all = ref$.all, isItNaN = ref$.isItNaN;
+  types = {
+    Number: {
+      typeOf: 'Number',
+      validate: function(it){
+        return !isItNaN(it);
+      }
+    },
+    NaN: {
+      typeOf: 'Number',
+      validate: isItNaN
+    },
+    Int: {
+      typeOf: 'Number',
+      validate: function(it){
+        return !isItNaN(it) && it % 1 === 0;
+      }
+    },
+    Float: {
+      typeOf: 'Number',
+      validate: function(it){
+        return !isItNaN(it);
+      }
+    },
+    Date: {
+      typeOf: 'Date',
+      validate: function(it){
+        return !isItNaN(it.getTime());
+      }
+    }
+  };
+  defaultType = {
+    array: 'Array',
+    tuple: 'Array'
+  };
+  function checkArray(input, type, options){
+    return all(function(it){
+      return checkMultiple(it, type.of, options);
+    }, input);
+  }
+  function checkTuple(input, type, options){
+    var i, i$, ref$, len$, types;
+    i = 0;
+    for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) {
+      types = ref$[i$];
+      if (!checkMultiple(input[i], types, options)) {
+        return false;
+      }
+      i++;
+    }
+    return input.length <= i;
+  }
+  function checkFields(input, type, options){
+    var inputKeys, numInputKeys, k, numOfKeys, key, ref$, types;
+    inputKeys = {};
+    numInputKeys = 0;
+    for (k in input) {
+      inputKeys[k] = true;
+      numInputKeys++;
+    }
+    numOfKeys = 0;
+    for (key in ref$ = type.of) {
+      types = ref$[key];
+      if (!checkMultiple(input[key], types, options)) {
+        return false;
+      }
+      if (inputKeys[key]) {
+        numOfKeys++;
+      }
+    }
+    return type.subset || numInputKeys === numOfKeys;
+  }
+  function checkStructure(input, type, options){
+    if (!(input instanceof Object)) {
+      return false;
+    }
+    switch (type.structure) {
+    case 'fields':
+      return checkFields(input, type, options);
+    case 'array':
+      return checkArray(input, type, options);
+    case 'tuple':
+      return checkTuple(input, type, options);
+    }
+  }
+  function check(input, typeObj, options){
+    var type, structure, setting, that;
+    type = typeObj.type, structure = typeObj.structure;
+    if (type) {
+      if (type === '*') {
+        return true;
+      }
+      setting = options.customTypes[type] || types[type];
+      if (setting) {
+        return (setting.typeOf === void 8 || setting.typeOf === toString$.call(input).slice(8, -1)) && setting.validate(input);
+      } else {
+        return type === toString$.call(input).slice(8, -1) && (!structure || checkStructure(input, typeObj, options));
+      }
+    } else if (structure) {
+      if (that = defaultType[structure]) {
+        if (that !== toString$.call(input).slice(8, -1)) {
+          return false;
+        }
+      }
+      return checkStructure(input, typeObj, options);
+    } else {
+      throw new Error("No type defined. Input: " + input + ".");
+    }
+  }
+  function checkMultiple(input, types, options){
+    if (toString$.call(types).slice(8, -1) !== 'Array') {
+      throw new Error("Types must be in an array. Input: " + input + ".");
+    }
+    return any(function(it){
+      return check(input, it, options);
+    }, types);
+  }
+  module.exports = function(parsedType, input, options){
+    options == null && (options = {});
+    if (options.customTypes == null) {
+      options.customTypes = {};
+    }
+    return checkMultiple(input, parsedType, options);
+  };
+}).call(this);

+ 16 - 0
RNCode/node_modules/optionator/node_modules/type-check/lib/index.js

@@ -0,0 +1,16 @@
+// Generated by LiveScript 1.6.0
+(function(){
+  var VERSION, parseType, parsedTypeCheck, typeCheck;
+  VERSION = '0.4.0';
+  parseType = require('./parse-type');
+  parsedTypeCheck = require('./check');
+  typeCheck = function(type, input, options){
+    return parsedTypeCheck(parseType(type), input, options);
+  };
+  module.exports = {
+    VERSION: VERSION,
+    typeCheck: typeCheck,
+    parsedTypeCheck: parsedTypeCheck,
+    parseType: parseType
+  };
+}).call(this);

+ 198 - 0
RNCode/node_modules/optionator/node_modules/type-check/lib/parse-type.js

@@ -0,0 +1,198 @@
+// Generated by LiveScript 1.6.0
+(function(){
+  var identifierRegex, tokenRegex;
+  identifierRegex = /[\$\w]+/;
+  function peek(tokens){
+    var token;
+    token = tokens[0];
+    if (token == null) {
+      throw new Error('Unexpected end of input.');
+    }
+    return token;
+  }
+  function consumeIdent(tokens){
+    var token;
+    token = peek(tokens);
+    if (!identifierRegex.test(token)) {
+      throw new Error("Expected text, got '" + token + "' instead.");
+    }
+    return tokens.shift();
+  }
+  function consumeOp(tokens, op){
+    var token;
+    token = peek(tokens);
+    if (token !== op) {
+      throw new Error("Expected '" + op + "', got '" + token + "' instead.");
+    }
+    return tokens.shift();
+  }
+  function maybeConsumeOp(tokens, op){
+    var token;
+    token = tokens[0];
+    if (token === op) {
+      return tokens.shift();
+    } else {
+      return null;
+    }
+  }
+  function consumeArray(tokens){
+    var types;
+    consumeOp(tokens, '[');
+    if (peek(tokens) === ']') {
+      throw new Error("Must specify type of Array - eg. [Type], got [] instead.");
+    }
+    types = consumeTypes(tokens);
+    consumeOp(tokens, ']');
+    return {
+      structure: 'array',
+      of: types
+    };
+  }
+  function consumeTuple(tokens){
+    var components;
+    components = [];
+    consumeOp(tokens, '(');
+    if (peek(tokens) === ')') {
+      throw new Error("Tuple must be of at least length 1 - eg. (Type), got () instead.");
+    }
+    for (;;) {
+      components.push(consumeTypes(tokens));
+      maybeConsumeOp(tokens, ',');
+      if (')' === peek(tokens)) {
+        break;
+      }
+    }
+    consumeOp(tokens, ')');
+    return {
+      structure: 'tuple',
+      of: components
+    };
+  }
+  function consumeFields(tokens){
+    var fields, subset, ref$, key, types;
+    fields = {};
+    consumeOp(tokens, '{');
+    subset = false;
+    for (;;) {
+      if (maybeConsumeOp(tokens, '...')) {
+        subset = true;
+        break;
+      }
+      ref$ = consumeField(tokens), key = ref$[0], types = ref$[1];
+      fields[key] = types;
+      maybeConsumeOp(tokens, ',');
+      if ('}' === peek(tokens)) {
+        break;
+      }
+    }
+    consumeOp(tokens, '}');
+    return {
+      structure: 'fields',
+      of: fields,
+      subset: subset
+    };
+  }
+  function consumeField(tokens){
+    var key, types;
+    key = consumeIdent(tokens);
+    consumeOp(tokens, ':');
+    types = consumeTypes(tokens);
+    return [key, types];
+  }
+  function maybeConsumeStructure(tokens){
+    switch (tokens[0]) {
+    case '[':
+      return consumeArray(tokens);
+    case '(':
+      return consumeTuple(tokens);
+    case '{':
+      return consumeFields(tokens);
+    }
+  }
+  function consumeType(tokens){
+    var token, wildcard, type, structure;
+    token = peek(tokens);
+    wildcard = token === '*';
+    if (wildcard || identifierRegex.test(token)) {
+      type = wildcard
+        ? consumeOp(tokens, '*')
+        : consumeIdent(tokens);
+      structure = maybeConsumeStructure(tokens);
+      if (structure) {
+        return structure.type = type, structure;
+      } else {
+        return {
+          type: type
+        };
+      }
+    } else {
+      structure = maybeConsumeStructure(tokens);
+      if (!structure) {
+        throw new Error("Unexpected character: " + token);
+      }
+      return structure;
+    }
+  }
+  function consumeTypes(tokens){
+    var lookahead, types, typesSoFar, typeObj, type, structure;
+    if ('::' === peek(tokens)) {
+      throw new Error("No comment before comment separator '::' found.");
+    }
+    lookahead = tokens[1];
+    if (lookahead != null && lookahead === '::') {
+      tokens.shift();
+      tokens.shift();
+    }
+    types = [];
+    typesSoFar = {};
+    if ('Maybe' === peek(tokens)) {
+      tokens.shift();
+      types = [
+        {
+          type: 'Undefined'
+        }, {
+          type: 'Null'
+        }
+      ];
+      typesSoFar = {
+        Undefined: true,
+        Null: true
+      };
+    }
+    for (;;) {
+      typeObj = consumeType(tokens), type = typeObj.type, structure = typeObj.structure;
+      if (!typesSoFar[type]) {
+        types.push(typeObj);
+      }
+      if (structure == null) {
+        typesSoFar[type] = true;
+      }
+      if (!maybeConsumeOp(tokens, '|')) {
+        break;
+      }
+    }
+    return types;
+  }
+  tokenRegex = RegExp('\\.\\.\\.|::|->|' + identifierRegex.source + '|\\S', 'g');
+  module.exports = function(input){
+    var tokens, e;
+    if (!input.length) {
+      throw new Error('No type specified.');
+    }
+    tokens = input.match(tokenRegex) || [];
+    if (in$('->', tokens)) {
+      throw new Error("Function types are not supported.\ To validate that something is a function, you may use 'Function'.");
+    }
+    try {
+      return consumeTypes(tokens);
+    } catch (e$) {
+      e = e$;
+      throw new Error(e.message + " - Remaining tokens: " + JSON.stringify(tokens) + " - Initial input: '" + input + "'");
+    }
+  };
+  function in$(x, xs){
+    var i = -1, l = xs.length >>> 0;
+    while (++i < l) if (x === xs[i]) return true;
+    return false;
+  }
+}).call(this);

+ 39 - 0
RNCode/node_modules/optionator/node_modules/type-check/package.json

@@ -0,0 +1,39 @@
+{
+  "name": "type-check",
+  "version": "0.4.0",
+  "author": "George Zahariev <z@georgezahariev.com>",
+  "description": "type-check allows you to check the types of JavaScript values at runtime with a Haskell like type syntax.",
+  "homepage": "https://github.com/gkz/type-check",
+  "keywords": [
+    "type",
+    "check",
+    "checking",
+    "library"
+  ],
+  "files": [
+    "lib",
+    "README.md",
+    "LICENSE"
+  ],
+  "main": "./lib/",
+  "bugs": "https://github.com/gkz/type-check/issues",
+  "license": "MIT",
+  "engines": {
+    "node": ">= 0.8.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/gkz/type-check.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "dependencies": {
+    "prelude-ls": "^1.2.1"
+  },
+  "devDependencies": {
+    "livescript": "^1.6.0",
+    "mocha": "^7.1.1",
+    "browserify": "^16.5.1"
+  }
+}

+ 43 - 0
RNCode/node_modules/optionator/package.json

@@ -0,0 +1,43 @@
+{
+  "name": "optionator",
+  "version": "0.9.1",
+  "author": "George Zahariev <z@georgezahariev.com>",
+  "description": "option parsing and help generation",
+  "homepage": "https://github.com/gkz/optionator",
+  "keywords": [
+    "options",
+    "flags",
+    "option parsing",
+    "cli"
+  ],
+  "files": [
+    "lib",
+    "README.md",
+    "LICENSE"
+  ],
+  "main": "./lib/",
+  "bugs": "https://github.com/gkz/optionator/issues",
+  "license": "MIT",
+  "engines": {
+    "node": ">= 0.8.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/gkz/optionator.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "dependencies": {
+    "prelude-ls": "^1.2.1",
+    "deep-is": "^0.1.3",
+    "word-wrap": "^1.2.3",
+    "type-check": "^0.4.0",
+    "levn": "^0.4.1",
+    "fast-levenshtein": "^2.0.6"
+  },
+  "devDependencies": {
+    "livescript": "^1.6.0",
+    "mocha": "^7.1.1"
+  }
+}

+ 7 - 0
RNCode/node_modules/options/.npmignore

@@ -0,0 +1,7 @@
+npm-debug.log
+node_modules
+.*.swp
+.lock-*
+build/
+
+test

+ 12 - 0
RNCode/node_modules/options/Makefile

@@ -0,0 +1,12 @@
+ALL_TESTS = $(shell find test/ -name '*.test.js')
+
+run-tests:
+	@./node_modules/.bin/mocha \
+		-t 2000 \
+		$(TESTFLAGS) \
+		$(TESTS)
+
+test:
+	@$(MAKE) NODE_PATH=lib TESTS="$(ALL_TESTS)" run-tests
+
+.PHONY: test

+ 69 - 0
RNCode/node_modules/options/README.md

@@ -0,0 +1,69 @@
+# options.js #
+
+A very light-weight in-code option parsers for node.js.
+
+## Usage ##
+
+``` js
+var Options = require("options");
+
+// Create an Options object
+function foo(options) {
+        var default_options = {
+                foo : "bar"
+        };
+        
+        // Create an option object with default value
+        var opts = new Options(default_options);
+        
+        // Merge options
+        opts = opts.merge(options);
+        
+        // Reset to default value
+        opts.reset();
+        
+        // Copy selected attributes out
+        var seled_att = opts.copy("foo");
+        
+        // Read json options from a file. 
+        opts.read("options.file"); // Sync
+        opts.read("options.file", function(err){ // Async
+                if(err){ // If error occurs
+                        console.log("File error.");
+                }else{
+                        // No error
+                }
+        });
+        
+        // Attributes defined or not
+        opts.isDefinedAndNonNull("foobar");
+        opts.isDefined("foobar");
+}
+
+```
+
+
+## License ##
+
+(The MIT License)
+
+Copyright (c) 2012 Einar Otto Stangvik &lt;einaros@gmail.com&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 86 - 0
RNCode/node_modules/options/lib/options.js

@@ -0,0 +1,86 @@
+/*!
+ * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
+ * MIT Licensed
+ */
+
+var fs = require('fs');
+
+function Options(defaults) {
+  var internalValues = {};
+  var values = this.value = {};
+  Object.keys(defaults).forEach(function(key) {
+    internalValues[key] = defaults[key];
+    Object.defineProperty(values, key, {
+      get: function() { return internalValues[key]; },
+      configurable: false,
+      enumerable: true
+    });
+  });
+  this.reset = function() {
+    Object.keys(defaults).forEach(function(key) {
+      internalValues[key] = defaults[key];
+    });
+    return this;
+  };
+  this.merge = function(options, required) {
+    options = options || {};
+    if (Object.prototype.toString.call(required) === '[object Array]') {
+      var missing = [];
+      for (var i = 0, l = required.length; i < l; ++i) {
+        var key = required[i];
+        if (!(key in options)) {
+          missing.push(key);
+        }
+      }
+      if (missing.length > 0) {
+        if (missing.length > 1) {
+          throw new Error('options ' +
+            missing.slice(0, missing.length - 1).join(', ') + ' and ' +
+            missing[missing.length - 1] + ' must be defined');
+        }
+        else throw new Error('option ' + missing[0] + ' must be defined');
+      }
+    }
+    Object.keys(options).forEach(function(key) {
+      if (key in internalValues) {
+        internalValues[key] = options[key];
+      }
+    });
+    return this;
+  };
+  this.copy = function(keys) {
+    var obj = {};
+    Object.keys(defaults).forEach(function(key) {
+      if (keys.indexOf(key) !== -1) {
+        obj[key] = values[key];
+      }
+    });
+    return obj;
+  };
+  this.read = function(filename, cb) {
+    if (typeof cb == 'function') {
+      var self = this;
+      fs.readFile(filename, function(error, data) {
+        if (error) return cb(error);
+        var conf = JSON.parse(data);
+        self.merge(conf);
+        cb();
+      });
+    }
+    else {
+      var conf = JSON.parse(fs.readFileSync(filename));
+      this.merge(conf);
+    }
+    return this;
+  };
+  this.isDefined = function(key) {
+    return typeof values[key] != 'undefined';
+  };
+  this.isDefinedAndNonNull = function(key) {
+    return typeof values[key] != 'undefined' && values[key] !== null;
+  };
+  Object.freeze(values);
+  Object.freeze(this);
+}
+
+module.exports = Options;

+ 21 - 0
RNCode/node_modules/options/package.json

@@ -0,0 +1,21 @@
+{
+  "author": "Einar Otto Stangvik <einaros@gmail.com> (http://2x.io)",
+  "name": "options",
+  "description": "A very light-weight in-code option parsers for node.js.",
+  "version": "0.0.6",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/einaros/options.js.git"
+  },
+  "main": "lib/options",
+  "scripts": {
+    "test": "make test"
+  },
+  "engines": {
+    "node": ">=0.4.0"
+  },
+  "dependencies": {},
+  "devDependencies": {
+    "mocha": "latest"
+  }
+}

+ 257 - 0
RNCode/node_modules/ora/index.d.ts

@@ -0,0 +1,257 @@
+/// <reference types="node"/>
+import {SpinnerName} from 'cli-spinners';
+
+declare namespace ora {
+	interface Spinner {
+		readonly interval?: number;
+		readonly frames: string[];
+	}
+
+	type Color =
+		| 'black'
+		| 'red'
+		| 'green'
+		| 'yellow'
+		| 'blue'
+		| 'magenta'
+		| 'cyan'
+		| 'white'
+		| 'gray';
+
+	interface Options {
+		/**
+		Text to display after the spinner.
+		*/
+		readonly text?: string;
+
+		/**
+		Text to display before the spinner.
+		*/
+		readonly prefixText?: string;
+
+		/**
+		Name of one of the provided spinners. See [`example.js`](https://github.com/BendingBender/ora/blob/master/example.js) in this repo if you want to test out different spinners. On Windows, it will always use the line spinner as the Windows command-line doesn't have proper Unicode support.
+
+		@default 'dots'
+
+		Or an object like:
+
+		@example
+		```
+		{
+			interval: 80, // Optional
+			frames: ['-', '+', '-']
+		}
+		```
+		*/
+		readonly spinner?: SpinnerName | Spinner;
+
+		/**
+		Color of the spinner.
+
+		@default 'cyan'
+		*/
+		readonly color?: Color;
+
+		/**
+		Set to `false` to stop Ora from hiding the cursor.
+
+		@default true
+		*/
+		readonly hideCursor?: boolean;
+
+		/**
+		Indent the spinner with the given number of spaces.
+
+		@default 0
+		*/
+		readonly indent?: number;
+
+		/**
+		Interval between each frame.
+
+		Spinners provide their own recommended interval, so you don't really need to specify this. Default value: Provided by the spinner or `100`.
+		*/
+		readonly interval?: number;
+
+		/**
+		Stream to write the output.
+
+		You could for example set this to `process.stdout` instead.
+
+		@default process.stderr
+		*/
+		readonly stream?: NodeJS.WritableStream;
+
+		/**
+		Force enable/disable the spinner. If not specified, the spinner will be enabled if the `stream` is being run inside a TTY context (not spawned or piped) and/or not in a CI environment.
+
+		Note that `{isEnabled: false}` doesn't mean it won't output anything. It just means it won't output the spinner, colors, and other ansi escape codes. It will still log text.
+		*/
+		readonly isEnabled?: boolean;
+	}
+
+	interface PersistOptions {
+		/**
+		Symbol to replace the spinner with.
+
+		@default ' '
+		*/
+		readonly symbol?: string;
+
+		/**
+		Text to be persisted after the symbol. Default: Current `text`.
+		*/
+		readonly text?: string;
+
+		/**
+		Text to be persisted before the symbol. Default: Current `prefixText`.
+		*/
+		readonly prefixText?: string;
+	}
+
+	interface Ora {
+		/**
+		A boolean of whether the instance is currently spinning.
+		*/
+		readonly isSpinning: boolean;
+
+		/**
+		Change the text after the spinner.
+		*/
+		text: string;
+
+		/**
+		Change the text before the spinner.
+		*/
+		prefixText: string;
+
+		/**
+		Change the spinner color.
+		*/
+		color: Color;
+
+		/**
+		Change the spinner.
+		*/
+		spinner: SpinnerName | Spinner;
+
+		/**
+		Change the spinner indent.
+		*/
+		indent: number;
+
+		/**
+		Start the spinner.
+
+		@param text - Set the current text.
+		@returns The spinner instance.
+		*/
+		start(text?: string): Ora;
+
+		/**
+		Stop and clear the spinner.
+
+		@returns The spinner instance.
+		*/
+		stop(): Ora;
+
+		/**
+		Stop the spinner, change it to a green `✔` and persist the current text, or `text` if provided.
+
+		@param text - Will persist text if provided.
+		@returns The spinner instance.
+		*/
+		succeed(text?: string): Ora;
+
+		/**
+		Stop the spinner, change it to a red `✖` and persist the current text, or `text` if provided.
+
+		@param text - Will persist text if provided.
+		@returns The spinner instance.
+		*/
+		fail(text?: string): Ora;
+
+		/**
+		Stop the spinner, change it to a yellow `⚠` and persist the current text, or `text` if provided.
+
+		@param text - Will persist text if provided.
+		@returns The spinner instance.
+		*/
+		warn(text?: string): Ora;
+
+		/**
+		Stop the spinner, change it to a blue `ℹ` and persist the current text, or `text` if provided.
+
+		@param text - Will persist text if provided.
+		@returns The spinner instance.
+		*/
+		info(text?: string): Ora;
+
+		/**
+		Stop the spinner and change the symbol or text.
+
+		@returns The spinner instance.
+		*/
+		stopAndPersist(options?: PersistOptions): Ora;
+
+		/**
+		Clear the spinner.
+
+		@returns The spinner instance.
+		*/
+		clear(): Ora;
+
+		/**
+		Manually render a new frame.
+
+		@returns The spinner instance.
+		*/
+		render(): Ora;
+
+		/**
+		Get a new frame.
+
+		@returns The spinner instance.
+		*/
+		frame(): Ora;
+	}
+}
+
+declare const ora: {
+	/**
+	Elegant terminal spinner.
+
+	@param options - If a string is provided, it is treated as a shortcut for `options.text`.
+
+	@example
+	```
+	import ora = require('ora');
+
+	const spinner = ora('Loading unicorns').start();
+
+	setTimeout(() => {
+		spinner.color = 'yellow';
+		spinner.text = 'Loading rainbows';
+	}, 1000);
+	```
+	*/
+	(options?: ora.Options | string): ora.Ora;
+
+	/**
+	Starts a spinner for a promise. The spinner is stopped with `.succeed()` if the promise fulfills or with `.fail()` if it rejects.
+
+	@param action - The promise to start the spinner for.
+	@param options - If a string is provided, it is treated as a shortcut for `options.text`.
+	@returns The spinner instance.
+	*/
+	promise(
+		action: PromiseLike<unknown>,
+		options?: ora.Options | string
+	): ora.Ora;
+
+	// TODO: Remove this for the next major release
+	default: typeof ora;
+};
+
+export = ora;

+ 246 - 0
RNCode/node_modules/ora/index.js

@@ -0,0 +1,246 @@
+'use strict';
+const chalk = require('chalk');
+const cliCursor = require('cli-cursor');
+const cliSpinners = require('cli-spinners');
+const logSymbols = require('log-symbols');
+const stripAnsi = require('strip-ansi');
+const wcwidth = require('wcwidth');
+
+const TEXT = Symbol('text');
+const PREFIX_TEXT = Symbol('prefixText');
+
+class Ora {
+	constructor(options) {
+		if (typeof options === 'string') {
+			options = {
+				text: options
+			};
+		}
+
+		this.options = Object.assign({
+			text: '',
+			color: 'cyan',
+			stream: process.stderr
+		}, options);
+
+		this.spinner = this.options.spinner;
+
+		this.color = this.options.color;
+		this.hideCursor = this.options.hideCursor !== false;
+		this.interval = this.options.interval || this.spinner.interval || 100;
+		this.stream = this.options.stream;
+		this.id = null;
+		this.isEnabled = typeof this.options.isEnabled === 'boolean' ? this.options.isEnabled : ((this.stream && this.stream.isTTY) && !process.env.CI);
+
+		// Set *after* `this.stream`
+		this.text = this.options.text;
+		this.prefixText = this.options.prefixText;
+		this.linesToClear = 0;
+		this.indent = this.options.indent;
+	}
+
+	get indent() {
+		return this._indent;
+	}
+
+	set indent(indent = 0) {
+		if (!(indent >= 0 && Number.isInteger(indent))) {
+			throw new Error('The `indent` option must be an integer from 0 and up');
+		}
+
+		this._indent = indent;
+	}
+
+	get spinner() {
+		return this._spinner;
+	}
+
+	set spinner(spinner) {
+		this.frameIndex = 0;
+
+		if (typeof spinner === 'object') {
+			if (spinner.frames === undefined) {
+				throw new Error('The given spinner must have a `frames` property');
+			}
+
+			this._spinner = spinner;
+		} else if (process.platform === 'win32') {
+			this._spinner = cliSpinners.line;
+		} else if (spinner === undefined) {
+			// Set default spinner
+			this._spinner = cliSpinners.dots;
+		} else if (cliSpinners[spinner]) {
+			this._spinner = cliSpinners[spinner];
+		} else {
+			throw new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/master/spinners.json for a full list.`);
+		}
+	}
+
+	get text() {
+		return this[TEXT];
+	}
+
+	get prefixText() {
+		return this[PREFIX_TEXT];
+	}
+
+	get isSpinning() {
+		return this.id !== null;
+	}
+
+	updateLineCount() {
+		const columns = this.stream.columns || 80;
+		const fullPrefixText = (typeof this[PREFIX_TEXT] === 'string') ? this[PREFIX_TEXT] + '-' : '';
+		this.lineCount = stripAnsi(fullPrefixText + '--' + this[TEXT]).split('\n').reduce((count, line) => {
+			return count + Math.max(1, Math.ceil(wcwidth(line) / columns));
+		}, 0);
+	}
+
+	set text(value) {
+		this[TEXT] = value;
+		this.updateLineCount();
+	}
+
+	set prefixText(value) {
+		this[PREFIX_TEXT] = value;
+		this.updateLineCount();
+	}
+
+	frame() {
+		const {frames} = this.spinner;
+		let frame = frames[this.frameIndex];
+
+		if (this.color) {
+			frame = chalk[this.color](frame);
+		}
+
+		this.frameIndex = ++this.frameIndex % frames.length;
+		const fullPrefixText = typeof this.prefixText === 'string' ? this.prefixText + ' ' : '';
+		const fullText = typeof this.text === 'string' ? ' ' + this.text : '';
+
+		return fullPrefixText + frame + fullText;
+	}
+
+	clear() {
+		if (!this.isEnabled || !this.stream.isTTY) {
+			return this;
+		}
+
+		for (let i = 0; i < this.linesToClear; i++) {
+			if (i > 0) {
+				this.stream.moveCursor(0, -1);
+			}
+
+			this.stream.clearLine();
+			this.stream.cursorTo(this.indent);
+		}
+
+		this.linesToClear = 0;
+
+		return this;
+	}
+
+	render() {
+		this.clear();
+		this.stream.write(this.frame());
+		this.linesToClear = this.lineCount;
+
+		return this;
+	}
+
+	start(text) {
+		if (text) {
+			this.text = text;
+		}
+
+		if (!this.isEnabled) {
+			this.stream.write(`- ${this.text}\n`);
+			return this;
+		}
+
+		if (this.isSpinning) {
+			return this;
+		}
+
+		if (this.hideCursor) {
+			cliCursor.hide(this.stream);
+		}
+
+		this.render();
+		this.id = setInterval(this.render.bind(this), this.interval);
+
+		return this;
+	}
+
+	stop() {
+		if (!this.isEnabled) {
+			return this;
+		}
+
+		clearInterval(this.id);
+		this.id = null;
+		this.frameIndex = 0;
+		this.clear();
+		if (this.hideCursor) {
+			cliCursor.show(this.stream);
+		}
+
+		return this;
+	}
+
+	succeed(text) {
+		return this.stopAndPersist({symbol: logSymbols.success, text});
+	}
+
+	fail(text) {
+		return this.stopAndPersist({symbol: logSymbols.error, text});
+	}
+
+	warn(text) {
+		return this.stopAndPersist({symbol: logSymbols.warning, text});
+	}
+
+	info(text) {
+		return this.stopAndPersist({symbol: logSymbols.info, text});
+	}
+
+	stopAndPersist(options = {}) {
+		const prefixText = options.prefixText || this.prefixText;
+		const fullPrefixText = (typeof prefixText === 'string') ? prefixText + ' ' : '';
+		const text = options.text || this.text;
+		const fullText = (typeof text === 'string') ? ' ' + text : '';
+
+		this.stop();
+		this.stream.write(`${fullPrefixText}${options.symbol || ' '}${fullText}\n`);
+
+		return this;
+	}
+}
+
+const oraFactory = function (opts) {
+	return new Ora(opts);
+};
+
+module.exports = oraFactory;
+// TODO: Remove this for the next major release
+module.exports.default = oraFactory;
+
+module.exports.promise = (action, options) => {
+	if (typeof action.then !== 'function') {
+		throw new TypeError('Parameter `action` must be a Promise');
+	}
+
+	const spinner = new Ora(options);
+	spinner.start();
+
+	action.then(
+		() => {
+			spinner.succeed();
+		},
+		() => {
+			spinner.fail();
+		}
+	);
+
+	return spinner;
+};

+ 9 - 0
RNCode/node_modules/ora/license

@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 14 - 0
RNCode/node_modules/ora/node_modules/ansi-regex/index.js

@@ -0,0 +1,14 @@
+'use strict';
+
+module.exports = options => {
+	options = Object.assign({
+		onlyFirst: false
+	}, options);
+
+	const pattern = [
+		'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
+		'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
+	].join('|');
+
+	return new RegExp(pattern, options.onlyFirst ? undefined : 'g');
+};

+ 9 - 0
RNCode/node_modules/ora/node_modules/ansi-regex/license

@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 53 - 0
RNCode/node_modules/ora/node_modules/ansi-regex/package.json

@@ -0,0 +1,53 @@
+{
+	"name": "ansi-regex",
+	"version": "4.1.1",
+	"description": "Regular expression for matching ANSI escape codes",
+	"license": "MIT",
+	"repository": "chalk/ansi-regex",
+	"author": {
+		"name": "Sindre Sorhus",
+		"email": "sindresorhus@gmail.com",
+		"url": "sindresorhus.com"
+	},
+	"engines": {
+		"node": ">=6"
+	},
+	"scripts": {
+		"test": "xo && ava",
+		"view-supported": "node fixtures/view-codes.js"
+	},
+	"files": [
+		"index.js"
+	],
+	"keywords": [
+		"ansi",
+		"styles",
+		"color",
+		"colour",
+		"colors",
+		"terminal",
+		"console",
+		"cli",
+		"string",
+		"tty",
+		"escape",
+		"formatting",
+		"rgb",
+		"256",
+		"shell",
+		"xterm",
+		"command-line",
+		"text",
+		"regex",
+		"regexp",
+		"re",
+		"match",
+		"test",
+		"find",
+		"pattern"
+	],
+	"devDependencies": {
+		"ava": "^0.25.0",
+		"xo": "^0.23.0"
+	}
+}

+ 87 - 0
RNCode/node_modules/ora/node_modules/ansi-regex/readme.md

@@ -0,0 +1,87 @@
+# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
+
+> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
+
+---
+
+<div align="center">
+	<b>
+		<a href="https://tidelift.com/subscription/pkg/npm-ansi-regex?utm_source=npm-ansi-regex&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
+	</b>
+	<br>
+	<sub>
+		Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
+	</sub>
+</div>
+
+---
+
+
+## Install
+
+```
+$ npm install ansi-regex
+```
+
+
+## Usage
+
+```js
+const ansiRegex = require('ansi-regex');
+
+ansiRegex().test('\u001B[4mcake\u001B[0m');
+//=> true
+
+ansiRegex().test('cake');
+//=> false
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex());
+//=> ['\u001B[4m', '\u001B[0m']
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
+//=> ['\u001B[4m']
+
+'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
+//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
+```
+
+
+## API
+
+### ansiRegex([options])
+
+Returns a regex for matching ANSI escape codes.
+
+#### options
+
+##### onlyFirst
+
+Type: `boolean`<br>
+Default: `false` *(Matches any ANSI escape codes in a string)*
+
+Match only the first ANSI escape.
+
+
+## FAQ
+
+### Why do you test for codes not in the ECMA 48 standard?
+
+Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
+
+On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
+
+
+## Security
+
+To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
+
+
+## Maintainers
+
+- [Sindre Sorhus](https://github.com/sindresorhus)
+- [Josh Junon](https://github.com/qix-)
+
+
+## License
+
+MIT

+ 165 - 0
RNCode/node_modules/ora/node_modules/ansi-styles/index.js

@@ -0,0 +1,165 @@
+'use strict';
+const colorConvert = require('color-convert');
+
+const wrapAnsi16 = (fn, offset) => function () {
+	const code = fn.apply(colorConvert, arguments);
+	return `\u001B[${code + offset}m`;
+};
+
+const wrapAnsi256 = (fn, offset) => function () {
+	const code = fn.apply(colorConvert, arguments);
+	return `\u001B[${38 + offset};5;${code}m`;
+};
+
+const wrapAnsi16m = (fn, offset) => function () {
+	const rgb = fn.apply(colorConvert, arguments);
+	return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
+};
+
+function assembleStyles() {
+	const codes = new Map();
+	const styles = {
+		modifier: {
+			reset: [0, 0],
+			// 21 isn't widely supported and 22 does the same thing
+			bold: [1, 22],
+			dim: [2, 22],
+			italic: [3, 23],
+			underline: [4, 24],
+			inverse: [7, 27],
+			hidden: [8, 28],
+			strikethrough: [9, 29]
+		},
+		color: {
+			black: [30, 39],
+			red: [31, 39],
+			green: [32, 39],
+			yellow: [33, 39],
+			blue: [34, 39],
+			magenta: [35, 39],
+			cyan: [36, 39],
+			white: [37, 39],
+			gray: [90, 39],
+
+			// Bright color
+			redBright: [91, 39],
+			greenBright: [92, 39],
+			yellowBright: [93, 39],
+			blueBright: [94, 39],
+			magentaBright: [95, 39],
+			cyanBright: [96, 39],
+			whiteBright: [97, 39]
+		},
+		bgColor: {
+			bgBlack: [40, 49],
+			bgRed: [41, 49],
+			bgGreen: [42, 49],
+			bgYellow: [43, 49],
+			bgBlue: [44, 49],
+			bgMagenta: [45, 49],
+			bgCyan: [46, 49],
+			bgWhite: [47, 49],
+
+			// Bright color
+			bgBlackBright: [100, 49],
+			bgRedBright: [101, 49],
+			bgGreenBright: [102, 49],
+			bgYellowBright: [103, 49],
+			bgBlueBright: [104, 49],
+			bgMagentaBright: [105, 49],
+			bgCyanBright: [106, 49],
+			bgWhiteBright: [107, 49]
+		}
+	};
+
+	// Fix humans
+	styles.color.grey = styles.color.gray;
+
+	for (const groupName of Object.keys(styles)) {
+		const group = styles[groupName];
+
+		for (const styleName of Object.keys(group)) {
+			const style = group[styleName];
+
+			styles[styleName] = {
+				open: `\u001B[${style[0]}m`,
+				close: `\u001B[${style[1]}m`
+			};
+
+			group[styleName] = styles[styleName];
+
+			codes.set(style[0], style[1]);
+		}
+
+		Object.defineProperty(styles, groupName, {
+			value: group,
+			enumerable: false
+		});
+
+		Object.defineProperty(styles, 'codes', {
+			value: codes,
+			enumerable: false
+		});
+	}
+
+	const ansi2ansi = n => n;
+	const rgb2rgb = (r, g, b) => [r, g, b];
+
+	styles.color.close = '\u001B[39m';
+	styles.bgColor.close = '\u001B[49m';
+
+	styles.color.ansi = {
+		ansi: wrapAnsi16(ansi2ansi, 0)
+	};
+	styles.color.ansi256 = {
+		ansi256: wrapAnsi256(ansi2ansi, 0)
+	};
+	styles.color.ansi16m = {
+		rgb: wrapAnsi16m(rgb2rgb, 0)
+	};
+
+	styles.bgColor.ansi = {
+		ansi: wrapAnsi16(ansi2ansi, 10)
+	};
+	styles.bgColor.ansi256 = {
+		ansi256: wrapAnsi256(ansi2ansi, 10)
+	};
+	styles.bgColor.ansi16m = {
+		rgb: wrapAnsi16m(rgb2rgb, 10)
+	};
+
+	for (let key of Object.keys(colorConvert)) {
+		if (typeof colorConvert[key] !== 'object') {
+			continue;
+		}
+
+		const suite = colorConvert[key];
+
+		if (key === 'ansi16') {
+			key = 'ansi';
+		}
+
+		if ('ansi16' in suite) {
+			styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);
+			styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);
+		}
+
+		if ('ansi256' in suite) {
+			styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);
+			styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);
+		}
+
+		if ('rgb' in suite) {
+			styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);
+			styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);
+		}
+	}
+
+	return styles;
+}
+
+// Make the export immutable
+Object.defineProperty(module, 'exports', {
+	enumerable: true,
+	get: assembleStyles
+});

+ 9 - 0
RNCode/node_modules/ora/node_modules/ansi-styles/license

@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 56 - 0
RNCode/node_modules/ora/node_modules/ansi-styles/package.json

@@ -0,0 +1,56 @@
+{
+	"name": "ansi-styles",
+	"version": "3.2.1",
+	"description": "ANSI escape codes for styling strings in the terminal",
+	"license": "MIT",
+	"repository": "chalk/ansi-styles",
+	"author": {
+		"name": "Sindre Sorhus",
+		"email": "sindresorhus@gmail.com",
+		"url": "sindresorhus.com"
+	},
+	"engines": {
+		"node": ">=4"
+	},
+	"scripts": {
+		"test": "xo && ava",
+		"screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor"
+	},
+	"files": [
+		"index.js"
+	],
+	"keywords": [
+		"ansi",
+		"styles",
+		"color",
+		"colour",
+		"colors",
+		"terminal",
+		"console",
+		"cli",
+		"string",
+		"tty",
+		"escape",
+		"formatting",
+		"rgb",
+		"256",
+		"shell",
+		"xterm",
+		"log",
+		"logging",
+		"command-line",
+		"text"
+	],
+	"dependencies": {
+		"color-convert": "^1.9.0"
+	},
+	"devDependencies": {
+		"ava": "*",
+		"babel-polyfill": "^6.23.0",
+		"svg-term-cli": "^2.1.1",
+		"xo": "*"
+	},
+	"ava": {
+		"require": "babel-polyfill"
+	}
+}

+ 147 - 0
RNCode/node_modules/ora/node_modules/ansi-styles/readme.md

@@ -0,0 +1,147 @@
+# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)
+
+> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal
+
+You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings.
+
+<img src="https://cdn.rawgit.com/chalk/ansi-styles/8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg" width="900">
+
+
+## Install
+
+```
+$ npm install ansi-styles
+```
+
+
+## Usage
+
+```js
+const style = require('ansi-styles');
+
+console.log(`${style.green.open}Hello world!${style.green.close}`);
+
+
+// Color conversion between 16/256/truecolor
+// NOTE: If conversion goes to 16 colors or 256 colors, the original color
+//       may be degraded to fit that color palette. This means terminals
+//       that do not support 16 million colors will best-match the
+//       original color.
+console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close);
+console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close);
+console.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close);
+```
+
+## API
+
+Each style has an `open` and `close` property.
+
+
+## Styles
+
+### Modifiers
+
+- `reset`
+- `bold`
+- `dim`
+- `italic` *(Not widely supported)*
+- `underline`
+- `inverse`
+- `hidden`
+- `strikethrough` *(Not widely supported)*
+
+### Colors
+
+- `black`
+- `red`
+- `green`
+- `yellow`
+- `blue`
+- `magenta`
+- `cyan`
+- `white`
+- `gray` ("bright black")
+- `redBright`
+- `greenBright`
+- `yellowBright`
+- `blueBright`
+- `magentaBright`
+- `cyanBright`
+- `whiteBright`
+
+### Background colors
+
+- `bgBlack`
+- `bgRed`
+- `bgGreen`
+- `bgYellow`
+- `bgBlue`
+- `bgMagenta`
+- `bgCyan`
+- `bgWhite`
+- `bgBlackBright`
+- `bgRedBright`
+- `bgGreenBright`
+- `bgYellowBright`
+- `bgBlueBright`
+- `bgMagentaBright`
+- `bgCyanBright`
+- `bgWhiteBright`
+
+
+## Advanced usage
+
+By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.
+
+- `style.modifier`
+- `style.color`
+- `style.bgColor`
+
+###### Example
+
+```js
+console.log(style.color.green.open);
+```
+
+Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values.
+
+###### Example
+
+```js
+console.log(style.codes.get(36));
+//=> 39
+```
+
+
+## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728)
+
+`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors.
+
+To use these, call the associated conversion function with the intended output, for example:
+
+```js
+style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code
+style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code
+
+style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code
+style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code
+
+style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code
+style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code
+```
+
+
+## Related
+
+- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal
+
+
+## Maintainers
+
+- [Sindre Sorhus](https://github.com/sindresorhus)
+- [Josh Junon](https://github.com/qix-)
+
+
+## License
+
+MIT

+ 228 - 0
RNCode/node_modules/ora/node_modules/chalk/index.js

@@ -0,0 +1,228 @@
+'use strict';
+const escapeStringRegexp = require('escape-string-regexp');
+const ansiStyles = require('ansi-styles');
+const stdoutColor = require('supports-color').stdout;
+
+const template = require('./templates.js');
+
+const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm');
+
+// `supportsColor.level` → `ansiStyles.color[name]` mapping
+const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m'];
+
+// `color-convert` models to exclude from the Chalk API due to conflicts and such
+const skipModels = new Set(['gray']);
+
+const styles = Object.create(null);
+
+function applyOptions(obj, options) {
+	options = options || {};
+
+	// Detect level if not set manually
+	const scLevel = stdoutColor ? stdoutColor.level : 0;
+	obj.level = options.level === undefined ? scLevel : options.level;
+	obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0;
+}
+
+function Chalk(options) {
+	// We check for this.template here since calling `chalk.constructor()`
+	// by itself will have a `this` of a previously constructed chalk object
+	if (!this || !(this instanceof Chalk) || this.template) {
+		const chalk = {};
+		applyOptions(chalk, options);
+
+		chalk.template = function () {
+			const args = [].slice.call(arguments);
+			return chalkTag.apply(null, [chalk.template].concat(args));
+		};
+
+		Object.setPrototypeOf(chalk, Chalk.prototype);
+		Object.setPrototypeOf(chalk.template, chalk);
+
+		chalk.template.constructor = Chalk;
+
+		return chalk.template;
+	}
+
+	applyOptions(this, options);
+}
+
+// Use bright blue on Windows as the normal blue color is illegible
+if (isSimpleWindowsTerm) {
+	ansiStyles.blue.open = '\u001B[94m';
+}
+
+for (const key of Object.keys(ansiStyles)) {
+	ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
+
+	styles[key] = {
+		get() {
+			const codes = ansiStyles[key];
+			return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key);
+		}
+	};
+}
+
+styles.visible = {
+	get() {
+		return build.call(this, this._styles || [], true, 'visible');
+	}
+};
+
+ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g');
+for (const model of Object.keys(ansiStyles.color.ansi)) {
+	if (skipModels.has(model)) {
+		continue;
+	}
+
+	styles[model] = {
+		get() {
+			const level = this.level;
+			return function () {
+				const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments);
+				const codes = {
+					open,
+					close: ansiStyles.color.close,
+					closeRe: ansiStyles.color.closeRe
+				};
+				return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);
+			};
+		}
+	};
+}
+
+ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g');
+for (const model of Object.keys(ansiStyles.bgColor.ansi)) {
+	if (skipModels.has(model)) {
+		continue;
+	}
+
+	const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);
+	styles[bgModel] = {
+		get() {
+			const level = this.level;
+			return function () {
+				const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments);
+				const codes = {
+					open,
+					close: ansiStyles.bgColor.close,
+					closeRe: ansiStyles.bgColor.closeRe
+				};
+				return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);
+			};
+		}
+	};
+}
+
+const proto = Object.defineProperties(() => {}, styles);
+
+function build(_styles, _empty, key) {
+	const builder = function () {
+		return applyStyle.apply(builder, arguments);
+	};
+
+	builder._styles = _styles;
+	builder._empty = _empty;
+
+	const self = this;
+
+	Object.defineProperty(builder, 'level', {
+		enumerable: true,
+		get() {
+			return self.level;
+		},
+		set(level) {
+			self.level = level;
+		}
+	});
+
+	Object.defineProperty(builder, 'enabled', {
+		enumerable: true,
+		get() {
+			return self.enabled;
+		},
+		set(enabled) {
+			self.enabled = enabled;
+		}
+	});
+
+	// See below for fix regarding invisible grey/dim combination on Windows
+	builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey';
+
+	// `__proto__` is used because we must return a function, but there is
+	// no way to create a function with a different prototype
+	builder.__proto__ = proto; // eslint-disable-line no-proto
+
+	return builder;
+}
+
+function applyStyle() {
+	// Support varags, but simply cast to string in case there's only one arg
+	const args = arguments;
+	const argsLen = args.length;
+	let str = String(arguments[0]);
+
+	if (argsLen === 0) {
+		return '';
+	}
+
+	if (argsLen > 1) {
+		// Don't slice `arguments`, it prevents V8 optimizations
+		for (let a = 1; a < argsLen; a++) {
+			str += ' ' + args[a];
+		}
+	}
+
+	if (!this.enabled || this.level <= 0 || !str) {
+		return this._empty ? '' : str;
+	}
+
+	// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,
+	// see https://github.com/chalk/chalk/issues/58
+	// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.
+	const originalDim = ansiStyles.dim.open;
+	if (isSimpleWindowsTerm && this.hasGrey) {
+		ansiStyles.dim.open = '';
+	}
+
+	for (const code of this._styles.slice().reverse()) {
+		// Replace any instances already present with a re-opening code
+		// otherwise only the part of the string until said closing code
+		// will be colored, and the rest will simply be 'plain'.
+		str = code.open + str.replace(code.closeRe, code.open) + code.close;
+
+		// Close the styling before a linebreak and reopen
+		// after next line to fix a bleed issue on macOS
+		// https://github.com/chalk/chalk/pull/92
+		str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`);
+	}
+
+	// Reset the original `dim` if we changed it to work around the Windows dimmed gray issue
+	ansiStyles.dim.open = originalDim;
+
+	return str;
+}
+
+function chalkTag(chalk, strings) {
+	if (!Array.isArray(strings)) {
+		// If chalk() was called by itself or with a string,
+		// return the string itself as a string.
+		return [].slice.call(arguments, 1).join(' ');
+	}
+
+	const args = [].slice.call(arguments, 2);
+	const parts = [strings.raw[0]];
+
+	for (let i = 1; i < strings.length; i++) {
+		parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&'));
+		parts.push(String(strings.raw[i]));
+	}
+
+	return template(chalk, parts.join(''));
+}
+
+Object.defineProperties(Chalk.prototype, styles);
+
+module.exports = Chalk(); // eslint-disable-line new-cap
+module.exports.supportsColor = stdoutColor;
+module.exports.default = module.exports; // For TypeScript

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff