Initial commit
This commit is contained in:
commit
f47e08fdcb
2409 files changed
+363607
No files matched your search
+1
@@ -0,0 +1 @@
|
||||
"use strict";
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
export type MaybePromise<+T> = Promise<T> | T;
|
||||
Whitespace-only changes.
+1
@@ -0,0 +1 @@
|
||||
"use strict";
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
export type ObjMap<T> = { [key: string]: T, __proto__: null };
|
||||
Whitespace-only changes.
+66
@@ -0,0 +1,66 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = dedent;
|
||||
|
||||
var _invariant = _interopRequireDefault(require("./invariant"));
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* fixes indentation by removing leading spaces and tabs from each line
|
||||
*/
|
||||
function fixIndent(str) {
|
||||
var trimmedStr = str.replace(/^\n*/m, '') // remove leading newline
|
||||
.replace(/[ \t]*$/, ''); // remove trailing spaces and tabs
|
||||
|
||||
var indentMatch = /^[ \t]*/.exec(trimmedStr);
|
||||
!Array.isArray(indentMatch) ? (0, _invariant.default)(0) : void 0;
|
||||
var indent = indentMatch[0]; // figure out indent
|
||||
|
||||
return trimmedStr.replace(RegExp('^' + indent, 'mg'), ''); // remove indent
|
||||
}
|
||||
/**
|
||||
* An ES6 string tag that fixes indentation. Also removes leading newlines
|
||||
* and trailing spaces and tabs, but keeps trailing newlines.
|
||||
*
|
||||
* Example usage:
|
||||
* const str = dedent`
|
||||
* {
|
||||
* test
|
||||
* }
|
||||
* `
|
||||
* str === "{\n test\n}\n";
|
||||
*/
|
||||
|
||||
|
||||
function dedent(strings) {
|
||||
for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||||
values[_key - 1] = arguments[_key];
|
||||
}
|
||||
|
||||
// when used as an ordinary function, allow passing a singleton string
|
||||
var strArray = typeof strings === 'string' ? [strings] : strings;
|
||||
var numValues = values.length;
|
||||
var str = strArray.reduce(function (prev, cur, index) {
|
||||
var next = prev + cur;
|
||||
|
||||
if (index < numValues) {
|
||||
next += values[index]; // interpolation
|
||||
}
|
||||
|
||||
return next;
|
||||
}, '');
|
||||
return fixIndent(str);
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
import invariant from './invariant';
|
||||
|
||||
/**
|
||||
* fixes indentation by removing leading spaces and tabs from each line
|
||||
*/
|
||||
function fixIndent(str: string): string {
|
||||
const trimmedStr = str
|
||||
.replace(/^\n*/m, '') // remove leading newline
|
||||
.replace(/[ \t]*$/, ''); // remove trailing spaces and tabs
|
||||
const indentMatch = /^[ \t]*/.exec(trimmedStr);
|
||||
invariant(Array.isArray(indentMatch));
|
||||
const indent = indentMatch[0]; // figure out indent
|
||||
return trimmedStr.replace(RegExp('^' + indent, 'mg'), ''); // remove indent
|
||||
}
|
||||
|
||||
/**
|
||||
* An ES6 string tag that fixes indentation. Also removes leading newlines
|
||||
* and trailing spaces and tabs, but keeps trailing newlines.
|
||||
*
|
||||
* Example usage:
|
||||
* const str = dedent`
|
||||
* {
|
||||
* test
|
||||
* }
|
||||
* `
|
||||
* str === "{\n test\n}\n";
|
||||
*/
|
||||
export default function dedent(
|
||||
strings: string | Array<string>,
|
||||
...values: Array<string>
|
||||
): string {
|
||||
// when used as an ordinary function, allow passing a singleton string
|
||||
const strArray = typeof strings === 'string' ? [strings] : strings;
|
||||
const numValues = values.length;
|
||||
|
||||
const str = strArray.reduce((prev, cur, index) => {
|
||||
let next = prev + cur;
|
||||
if (index < numValues) {
|
||||
next += values[index]; // interpolation
|
||||
}
|
||||
return next;
|
||||
}, '');
|
||||
|
||||
return fixIndent(str);
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
import invariant from './invariant';
|
||||
/**
|
||||
* fixes indentation by removing leading spaces and tabs from each line
|
||||
*/
|
||||
|
||||
function fixIndent(str) {
|
||||
var trimmedStr = str.replace(/^\n*/m, '') // remove leading newline
|
||||
.replace(/[ \t]*$/, ''); // remove trailing spaces and tabs
|
||||
|
||||
var indentMatch = /^[ \t]*/.exec(trimmedStr);
|
||||
!Array.isArray(indentMatch) ? invariant(0) : void 0;
|
||||
var indent = indentMatch[0]; // figure out indent
|
||||
|
||||
return trimmedStr.replace(RegExp('^' + indent, 'mg'), ''); // remove indent
|
||||
}
|
||||
/**
|
||||
* An ES6 string tag that fixes indentation. Also removes leading newlines
|
||||
* and trailing spaces and tabs, but keeps trailing newlines.
|
||||
*
|
||||
* Example usage:
|
||||
* const str = dedent`
|
||||
* {
|
||||
* test
|
||||
* }
|
||||
* `
|
||||
* str === "{\n test\n}\n";
|
||||
*/
|
||||
|
||||
|
||||
export default function dedent(strings) {
|
||||
for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||||
values[_key - 1] = arguments[_key];
|
||||
}
|
||||
|
||||
// when used as an ordinary function, allow passing a singleton string
|
||||
var strArray = typeof strings === 'string' ? [strings] : strings;
|
||||
var numValues = values.length;
|
||||
var str = strArray.reduce(function (prev, cur, index) {
|
||||
var next = prev + cur;
|
||||
|
||||
if (index < numValues) {
|
||||
next += values[index]; // interpolation
|
||||
}
|
||||
|
||||
return next;
|
||||
}, '');
|
||||
return fixIndent(str);
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = applyToJSON;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* The `applyToJSON()` function defines toJSON() and inspect() prototype
|
||||
* methods which are aliases for toString().
|
||||
*/
|
||||
function applyToJSON(classObject) {
|
||||
classObject.prototype.toJSON = classObject.prototype.inspect = classObject.prototype.toString;
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* The `applyToJSON()` function defines toJSON() and inspect() prototype
|
||||
* methods which are aliases for toString().
|
||||
*/
|
||||
export default function applyToJSON(classObject: Class<any>): void {
|
||||
classObject.prototype.toJSON = classObject.prototype.inspect =
|
||||
classObject.prototype.toString;
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* The `applyToJSON()` function defines toJSON() and inspect() prototype
|
||||
* methods which are aliases for toString().
|
||||
*/
|
||||
export default function applyToJSON(classObject) {
|
||||
classObject.prototype.toJSON = classObject.prototype.inspect = classObject.prototype.toString;
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = applyToStringTag;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* The `applyToStringTag()` function checks first to see if the runtime
|
||||
* supports the `Symbol` class and then if the `Symbol.toStringTag` constant
|
||||
* is defined as a `Symbol` instance. If both conditions are met, the
|
||||
* Symbol.toStringTag property is defined as a getter that returns the
|
||||
* supplied class constructor's name.
|
||||
*
|
||||
* @method applyToStringTag
|
||||
*
|
||||
* @param {Class<any>} classObject a class such as Object, String, Number but
|
||||
* typically one of your own creation through the class keyword; `class A {}`,
|
||||
* for example.
|
||||
*/
|
||||
function applyToStringTag(classObject) {
|
||||
if (typeof Symbol === 'function' && Symbol.toStringTag) {
|
||||
Object.defineProperty(classObject.prototype, Symbol.toStringTag, {
|
||||
get: function get() {
|
||||
return this.constructor.name;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* The `applyToStringTag()` function checks first to see if the runtime
|
||||
* supports the `Symbol` class and then if the `Symbol.toStringTag` constant
|
||||
* is defined as a `Symbol` instance. If both conditions are met, the
|
||||
* Symbol.toStringTag property is defined as a getter that returns the
|
||||
* supplied class constructor's name.
|
||||
*
|
||||
* @method applyToStringTag
|
||||
*
|
||||
* @param {Class<any>} classObject a class such as Object, String, Number but
|
||||
* typically one of your own creation through the class keyword; `class A {}`,
|
||||
* for example.
|
||||
*/
|
||||
export default function applyToStringTag(classObject: Class<any>): void {
|
||||
if (typeof Symbol === 'function' && Symbol.toStringTag) {
|
||||
Object.defineProperty(classObject.prototype, Symbol.toStringTag, {
|
||||
get() {
|
||||
return this.constructor.name;
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* The `applyToStringTag()` function checks first to see if the runtime
|
||||
* supports the `Symbol` class and then if the `Symbol.toStringTag` constant
|
||||
* is defined as a `Symbol` instance. If both conditions are met, the
|
||||
* Symbol.toStringTag property is defined as a getter that returns the
|
||||
* supplied class constructor's name.
|
||||
*
|
||||
* @method applyToStringTag
|
||||
*
|
||||
* @param {Class<any>} classObject a class such as Object, String, Number but
|
||||
* typically one of your own creation through the class keyword; `class A {}`,
|
||||
* for example.
|
||||
*/
|
||||
export default function applyToStringTag(classObject) {
|
||||
if (typeof Symbol === 'function' && Symbol.toStringTag) {
|
||||
Object.defineProperty(classObject.prototype, Symbol.toStringTag, {
|
||||
get: function get() {
|
||||
return this.constructor.name;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = find;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
function find(list, predicate) {
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
if (predicate(list[i])) {
|
||||
return list[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
export default function find<T>(
|
||||
list: $ReadOnlyArray<T>,
|
||||
predicate: (item: T) => boolean,
|
||||
): ?T {
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
if (predicate(list[i])) {
|
||||
return list[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
export default function find(list, predicate) {
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
if (predicate(list[i])) {
|
||||
return list[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = inspect;
|
||||
|
||||
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Used to print values in error messages.
|
||||
*/
|
||||
function inspect(value) {
|
||||
return value && _typeof(value) === 'object' ? typeof value.inspect === 'function' ? value.inspect() : Array.isArray(value) ? '[' + value.map(inspect).join(', ') + ']' : '{' + Object.keys(value).map(function (k) {
|
||||
return "".concat(k, ": ").concat(inspect(value[k]));
|
||||
}).join(', ') + '}' : typeof value === 'string' ? '"' + value + '"' : typeof value === 'function' ? "[function ".concat(value.name, "]") : String(value);
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Used to print values in error messages.
|
||||
*/
|
||||
export default function inspect(value: mixed): string {
|
||||
return value && typeof value === 'object'
|
||||
? typeof value.inspect === 'function'
|
||||
? value.inspect()
|
||||
: Array.isArray(value)
|
||||
? '[' + value.map(inspect).join(', ') + ']'
|
||||
: '{' +
|
||||
Object.keys(value)
|
||||
.map(k => `${k}: ${inspect(value[k])}`)
|
||||
.join(', ') +
|
||||
'}'
|
||||
: typeof value === 'string'
|
||||
? '"' + value + '"'
|
||||
: typeof value === 'function'
|
||||
? `[function ${value.name}]`
|
||||
: String(value);
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Used to print values in error messages.
|
||||
*/
|
||||
export default function inspect(value) {
|
||||
return value && _typeof(value) === 'object' ? typeof value.inspect === 'function' ? value.inspect() : Array.isArray(value) ? '[' + value.map(inspect).join(', ') + ']' : '{' + Object.keys(value).map(function (k) {
|
||||
return "".concat(k, ": ").concat(inspect(value[k]));
|
||||
}).join(', ') + '}' : typeof value === 'string' ? '"' + value + '"' : typeof value === 'function' ? "[function ".concat(value.name, "]") : String(value);
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* A replacement for instanceof which includes an error warning when multi-realm
|
||||
* constructors are detected.
|
||||
*/
|
||||
// See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production
|
||||
// See: https://webpack.js.org/guides/production/
|
||||
var _default = process.env.NODE_ENV === 'production' ? // eslint-disable-next-line no-shadow
|
||||
function instanceOf(value, constructor) {
|
||||
return value instanceof constructor;
|
||||
} : // eslint-disable-next-line no-shadow
|
||||
function instanceOf(value, constructor) {
|
||||
if (value instanceof constructor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (value) {
|
||||
var valueClass = value.constructor;
|
||||
var className = constructor.name;
|
||||
|
||||
if (className && valueClass && valueClass.name === className) {
|
||||
throw new Error("Cannot use ".concat(className, " \"").concat(value, "\" from another module or realm.\n\nEnsure that there is only one instance of \"graphql\" in the node_modules\ndirectory. If different versions of \"graphql\" are the dependencies of other\nrelied on modules, use \"resolutions\" to ensure only one version is installed.\n\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\n\nDuplicate \"graphql\" modules cannot be used at the same time since different\nversions may have different capabilities and behavior. The data from one\nversion used in the function from another could produce confusing and\nspurious results."));
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
exports.default = _default;
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* A replacement for instanceof which includes an error warning when multi-realm
|
||||
* constructors are detected.
|
||||
*/
|
||||
declare function instanceOf(
|
||||
value: mixed,
|
||||
constructor: mixed,
|
||||
): boolean %checks(value instanceof constructor);
|
||||
|
||||
// See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production
|
||||
// See: https://webpack.js.org/guides/production/
|
||||
export default (process.env.NODE_ENV === 'production'
|
||||
? // eslint-disable-next-line no-shadow
|
||||
function instanceOf(value: mixed, constructor: mixed) {
|
||||
return value instanceof constructor;
|
||||
}
|
||||
: // eslint-disable-next-line no-shadow
|
||||
function instanceOf(value: any, constructor: any) {
|
||||
if (value instanceof constructor) {
|
||||
return true;
|
||||
}
|
||||
if (value) {
|
||||
const valueClass = value.constructor;
|
||||
const className = constructor.name;
|
||||
if (className && valueClass && valueClass.name === className) {
|
||||
throw new Error(
|
||||
`Cannot use ${className} "${value}" from another module or realm.
|
||||
|
||||
Ensure that there is only one instance of "graphql" in the node_modules
|
||||
directory. If different versions of "graphql" are the dependencies of other
|
||||
relied on modules, use "resolutions" to ensure only one version is installed.
|
||||
|
||||
https://yarnpkg.com/en/docs/selective-version-resolutions
|
||||
|
||||
Duplicate "graphql" modules cannot be used at the same time since different
|
||||
versions may have different capabilities and behavior. The data from one
|
||||
version used in the function from another could produce confusing and
|
||||
spurious results.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* A replacement for instanceof which includes an error warning when multi-realm
|
||||
* constructors are detected.
|
||||
*/
|
||||
// See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production
|
||||
// See: https://webpack.js.org/guides/production/
|
||||
export default process.env.NODE_ENV === 'production' ? // eslint-disable-next-line no-shadow
|
||||
function instanceOf(value, constructor) {
|
||||
return value instanceof constructor;
|
||||
} : // eslint-disable-next-line no-shadow
|
||||
function instanceOf(value, constructor) {
|
||||
if (value instanceof constructor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (value) {
|
||||
var valueClass = value.constructor;
|
||||
var className = constructor.name;
|
||||
|
||||
if (className && valueClass && valueClass.name === className) {
|
||||
throw new Error("Cannot use ".concat(className, " \"").concat(value, "\" from another module or realm.\n\nEnsure that there is only one instance of \"graphql\" in the node_modules\ndirectory. If different versions of \"graphql\" are the dependencies of other\nrelied on modules, use \"resolutions\" to ensure only one version is installed.\n\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\n\nDuplicate \"graphql\" modules cannot be used at the same time since different\nversions may have different capabilities and behavior. The data from one\nversion used in the function from another could produce confusing and\nspurious results."));
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = invariant;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
function invariant(condition, message) {
|
||||
/* istanbul ignore else */
|
||||
if (!condition) {
|
||||
throw new Error(message);
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
export default function invariant(condition: mixed, message: string) {
|
||||
/* istanbul ignore else */
|
||||
if (!condition) {
|
||||
throw new Error(message);
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
export default function invariant(condition, message) {
|
||||
/* istanbul ignore else */
|
||||
if (!condition) {
|
||||
throw new Error(message);
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2018-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/* eslint-disable no-redeclare */
|
||||
// $FlowFixMe workaround for: https://github.com/facebook/flow/issues/4441
|
||||
var isFinite = Number.isFinite || function (value) {
|
||||
return typeof value === 'number' && isFinite(value);
|
||||
};
|
||||
|
||||
var _default = isFinite;
|
||||
exports.default = _default;
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Copyright (c) 2018-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
declare function isFinite(value: mixed): boolean %checks(typeof value ===
|
||||
'number');
|
||||
|
||||
/* eslint-disable no-redeclare */
|
||||
// $FlowFixMe workaround for: https://github.com/facebook/flow/issues/4441
|
||||
const isFinite =
|
||||
Number.isFinite ||
|
||||
function(value) {
|
||||
return typeof value === 'number' && isFinite(value);
|
||||
};
|
||||
export default isFinite;
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Copyright (c) 2018-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/* eslint-disable no-redeclare */
|
||||
// $FlowFixMe workaround for: https://github.com/facebook/flow/issues/4441
|
||||
var isFinite = Number.isFinite || function (value) {
|
||||
return typeof value === 'number' && isFinite(value);
|
||||
};
|
||||
|
||||
export default isFinite;
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2018-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/* eslint-disable no-redeclare */
|
||||
// $FlowFixMe workaround for: https://github.com/facebook/flow/issues/4441
|
||||
var isInteger = Number.isInteger || function (value) {
|
||||
return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
|
||||
};
|
||||
|
||||
var _default = isInteger;
|
||||
exports.default = _default;
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* Copyright (c) 2018-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
declare function isInteger(value: mixed): boolean %checks(typeof value ===
|
||||
'number');
|
||||
|
||||
/* eslint-disable no-redeclare */
|
||||
// $FlowFixMe workaround for: https://github.com/facebook/flow/issues/4441
|
||||
const isInteger =
|
||||
Number.isInteger ||
|
||||
function(value) {
|
||||
return (
|
||||
typeof value === 'number' &&
|
||||
isFinite(value) &&
|
||||
Math.floor(value) === value
|
||||
);
|
||||
};
|
||||
export default isInteger;
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Copyright (c) 2018-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/* eslint-disable no-redeclare */
|
||||
// $FlowFixMe workaround for: https://github.com/facebook/flow/issues/4441
|
||||
var isInteger = Number.isInteger || function (value) {
|
||||
return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
|
||||
};
|
||||
|
||||
export default isInteger;
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isInvalid;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns true if a value is undefined, or NaN.
|
||||
*/
|
||||
function isInvalid(value) {
|
||||
return value === undefined || value !== value;
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns true if a value is undefined, or NaN.
|
||||
*/
|
||||
export default function isInvalid(value: mixed): boolean %checks {
|
||||
return value === undefined || value !== value;
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns true if a value is undefined, or NaN.
|
||||
*/
|
||||
export default function isInvalid(value) {
|
||||
return value === undefined || value !== value;
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isNullish;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns true if a value is null, undefined, or NaN.
|
||||
*/
|
||||
function isNullish(value) {
|
||||
return value === null || value === undefined || value !== value;
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns true if a value is null, undefined, or NaN.
|
||||
*/
|
||||
export default function isNullish(value: mixed): boolean %checks {
|
||||
return value === null || value === undefined || value !== value;
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns true if a value is null, undefined, or NaN.
|
||||
*/
|
||||
export default function isNullish(value) {
|
||||
return value === null || value === undefined || value !== value;
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isPromise;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns true if the value acts like a Promise, i.e. has a "then" function,
|
||||
* otherwise returns false.
|
||||
*/
|
||||
// eslint-disable-next-line no-redeclare
|
||||
function isPromise(value) {
|
||||
return Boolean(value && typeof value.then === 'function');
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns true if the value acts like a Promise, i.e. has a "then" function,
|
||||
* otherwise returns false.
|
||||
*/
|
||||
declare function isPromise(value: mixed): boolean %checks(value instanceof
|
||||
Promise);
|
||||
|
||||
// eslint-disable-next-line no-redeclare
|
||||
export default function isPromise(value) {
|
||||
return Boolean(value && typeof value.then === 'function');
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns true if the value acts like a Promise, i.e. has a "then" function,
|
||||
* otherwise returns false.
|
||||
*/
|
||||
// eslint-disable-next-line no-redeclare
|
||||
export default function isPromise(value) {
|
||||
return Boolean(value && typeof value.then === 'function');
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = keyMap;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a keyed JS object from an array, given a function to produce the keys
|
||||
* for each value in the array.
|
||||
*
|
||||
* This provides a convenient lookup for the array items if the key function
|
||||
* produces unique results.
|
||||
*
|
||||
* const phoneBook = [
|
||||
* { name: 'Jon', num: '555-1234' },
|
||||
* { name: 'Jenny', num: '867-5309' }
|
||||
* ]
|
||||
*
|
||||
* // { Jon: { name: 'Jon', num: '555-1234' },
|
||||
* // Jenny: { name: 'Jenny', num: '867-5309' } }
|
||||
* const entriesByName = keyMap(
|
||||
* phoneBook,
|
||||
* entry => entry.name
|
||||
* )
|
||||
*
|
||||
* // { name: 'Jenny', num: '857-6309' }
|
||||
* const jennyEntry = entriesByName['Jenny']
|
||||
*
|
||||
*/
|
||||
function keyMap(list, keyFn) {
|
||||
return list.reduce(function (map, item) {
|
||||
return map[keyFn(item)] = item, map;
|
||||
}, Object.create(null));
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
import type { ObjMap } from './ObjMap';
|
||||
|
||||
/**
|
||||
* Creates a keyed JS object from an array, given a function to produce the keys
|
||||
* for each value in the array.
|
||||
*
|
||||
* This provides a convenient lookup for the array items if the key function
|
||||
* produces unique results.
|
||||
*
|
||||
* const phoneBook = [
|
||||
* { name: 'Jon', num: '555-1234' },
|
||||
* { name: 'Jenny', num: '867-5309' }
|
||||
* ]
|
||||
*
|
||||
* // { Jon: { name: 'Jon', num: '555-1234' },
|
||||
* // Jenny: { name: 'Jenny', num: '867-5309' } }
|
||||
* const entriesByName = keyMap(
|
||||
* phoneBook,
|
||||
* entry => entry.name
|
||||
* )
|
||||
*
|
||||
* // { name: 'Jenny', num: '857-6309' }
|
||||
* const jennyEntry = entriesByName['Jenny']
|
||||
*
|
||||
*/
|
||||
export default function keyMap<T>(
|
||||
list: $ReadOnlyArray<T>,
|
||||
keyFn: (item: T) => string,
|
||||
): ObjMap<T> {
|
||||
return list.reduce(
|
||||
(map, item) => ((map[keyFn(item)] = item), map),
|
||||
Object.create(null),
|
||||
);
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a keyed JS object from an array, given a function to produce the keys
|
||||
* for each value in the array.
|
||||
*
|
||||
* This provides a convenient lookup for the array items if the key function
|
||||
* produces unique results.
|
||||
*
|
||||
* const phoneBook = [
|
||||
* { name: 'Jon', num: '555-1234' },
|
||||
* { name: 'Jenny', num: '867-5309' }
|
||||
* ]
|
||||
*
|
||||
* // { Jon: { name: 'Jon', num: '555-1234' },
|
||||
* // Jenny: { name: 'Jenny', num: '867-5309' } }
|
||||
* const entriesByName = keyMap(
|
||||
* phoneBook,
|
||||
* entry => entry.name
|
||||
* )
|
||||
*
|
||||
* // { name: 'Jenny', num: '857-6309' }
|
||||
* const jennyEntry = entriesByName['Jenny']
|
||||
*
|
||||
*/
|
||||
export default function keyMap(list, keyFn) {
|
||||
return list.reduce(function (map, item) {
|
||||
return map[keyFn(item)] = item, map;
|
||||
}, Object.create(null));
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = keyValMap;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a keyed JS object from an array, given a function to produce the keys
|
||||
* and a function to produce the values from each item in the array.
|
||||
*
|
||||
* const phoneBook = [
|
||||
* { name: 'Jon', num: '555-1234' },
|
||||
* { name: 'Jenny', num: '867-5309' }
|
||||
* ]
|
||||
*
|
||||
* // { Jon: '555-1234', Jenny: '867-5309' }
|
||||
* const phonesByName = keyValMap(
|
||||
* phoneBook,
|
||||
* entry => entry.name,
|
||||
* entry => entry.num
|
||||
* )
|
||||
*
|
||||
*/
|
||||
function keyValMap(list, keyFn, valFn) {
|
||||
return list.reduce(function (map, item) {
|
||||
return map[keyFn(item)] = valFn(item), map;
|
||||
}, Object.create(null));
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
import type { ObjMap } from './ObjMap';
|
||||
|
||||
/**
|
||||
* Creates a keyed JS object from an array, given a function to produce the keys
|
||||
* and a function to produce the values from each item in the array.
|
||||
*
|
||||
* const phoneBook = [
|
||||
* { name: 'Jon', num: '555-1234' },
|
||||
* { name: 'Jenny', num: '867-5309' }
|
||||
* ]
|
||||
*
|
||||
* // { Jon: '555-1234', Jenny: '867-5309' }
|
||||
* const phonesByName = keyValMap(
|
||||
* phoneBook,
|
||||
* entry => entry.name,
|
||||
* entry => entry.num
|
||||
* )
|
||||
*
|
||||
*/
|
||||
export default function keyValMap<T, V>(
|
||||
list: $ReadOnlyArray<T>,
|
||||
keyFn: (item: T) => string,
|
||||
valFn: (item: T) => V,
|
||||
): ObjMap<V> {
|
||||
return list.reduce(
|
||||
(map, item) => ((map[keyFn(item)] = valFn(item)), map),
|
||||
Object.create(null),
|
||||
);
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a keyed JS object from an array, given a function to produce the keys
|
||||
* and a function to produce the values from each item in the array.
|
||||
*
|
||||
* const phoneBook = [
|
||||
* { name: 'Jon', num: '555-1234' },
|
||||
* { name: 'Jenny', num: '867-5309' }
|
||||
* ]
|
||||
*
|
||||
* // { Jon: '555-1234', Jenny: '867-5309' }
|
||||
* const phonesByName = keyValMap(
|
||||
* phoneBook,
|
||||
* entry => entry.name,
|
||||
* entry => entry.num
|
||||
* )
|
||||
*
|
||||
*/
|
||||
export default function keyValMap(list, keyFn, valFn) {
|
||||
return list.reduce(function (map, item) {
|
||||
return map[keyFn(item)] = valFn(item), map;
|
||||
}, Object.create(null));
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = memoize3;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Memoizes the provided three-argument function.
|
||||
*/
|
||||
function memoize3(fn) {
|
||||
var cache0;
|
||||
|
||||
function memoized(a1, a2, a3) {
|
||||
if (!cache0) {
|
||||
cache0 = new WeakMap();
|
||||
}
|
||||
|
||||
var cache1 = cache0.get(a1);
|
||||
var cache2;
|
||||
|
||||
if (cache1) {
|
||||
cache2 = cache1.get(a2);
|
||||
|
||||
if (cache2) {
|
||||
var cachedValue = cache2.get(a3);
|
||||
|
||||
if (cachedValue !== undefined) {
|
||||
return cachedValue;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cache1 = new WeakMap();
|
||||
cache0.set(a1, cache1);
|
||||
}
|
||||
|
||||
if (!cache2) {
|
||||
cache2 = new WeakMap();
|
||||
cache1.set(a2, cache2);
|
||||
}
|
||||
|
||||
var newValue = fn.apply(this, arguments);
|
||||
cache2.set(a3, newValue);
|
||||
return newValue;
|
||||
}
|
||||
|
||||
return memoized;
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Memoizes the provided three-argument function.
|
||||
*/
|
||||
export default function memoize3<T: (a1: any, a2: any, a3: any) => any>(
|
||||
fn: T,
|
||||
): T {
|
||||
let cache0;
|
||||
function memoized(a1, a2, a3) {
|
||||
if (!cache0) {
|
||||
cache0 = new WeakMap();
|
||||
}
|
||||
let cache1 = cache0.get(a1);
|
||||
let cache2;
|
||||
if (cache1) {
|
||||
cache2 = cache1.get(a2);
|
||||
if (cache2) {
|
||||
const cachedValue = cache2.get(a3);
|
||||
if (cachedValue !== undefined) {
|
||||
return cachedValue;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cache1 = new WeakMap();
|
||||
cache0.set(a1, cache1);
|
||||
}
|
||||
if (!cache2) {
|
||||
cache2 = new WeakMap();
|
||||
cache1.set(a2, cache2);
|
||||
}
|
||||
const newValue = fn.apply(this, arguments);
|
||||
cache2.set(a3, newValue);
|
||||
return newValue;
|
||||
}
|
||||
return (memoized: any);
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Memoizes the provided three-argument function.
|
||||
*/
|
||||
export default function memoize3(fn) {
|
||||
var cache0;
|
||||
|
||||
function memoized(a1, a2, a3) {
|
||||
if (!cache0) {
|
||||
cache0 = new WeakMap();
|
||||
}
|
||||
|
||||
var cache1 = cache0.get(a1);
|
||||
var cache2;
|
||||
|
||||
if (cache1) {
|
||||
cache2 = cache1.get(a2);
|
||||
|
||||
if (cache2) {
|
||||
var cachedValue = cache2.get(a3);
|
||||
|
||||
if (cachedValue !== undefined) {
|
||||
return cachedValue;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cache1 = new WeakMap();
|
||||
cache0.set(a1, cache1);
|
||||
}
|
||||
|
||||
if (!cache2) {
|
||||
cache2 = new WeakMap();
|
||||
cache1.set(a2, cache2);
|
||||
}
|
||||
|
||||
var newValue = fn.apply(this, arguments);
|
||||
cache2.set(a3, newValue);
|
||||
return newValue;
|
||||
}
|
||||
|
||||
return memoized;
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/* eslint-disable no-redeclare */
|
||||
// $FlowFixMe workaround for: https://github.com/facebook/flow/issues/2221
|
||||
var objectValues = Object.values || function (obj) {
|
||||
return Object.keys(obj).map(function (key) {
|
||||
return obj[key];
|
||||
});
|
||||
};
|
||||
|
||||
var _default = objectValues;
|
||||
exports.default = _default;
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
import type { ObjMap } from './ObjMap';
|
||||
|
||||
declare function objectValues<T>(obj: ObjMap<T>): Array<T>;
|
||||
|
||||
/* eslint-disable no-redeclare */
|
||||
// $FlowFixMe workaround for: https://github.com/facebook/flow/issues/2221
|
||||
const objectValues =
|
||||
Object.values || (obj => Object.keys(obj).map(key => obj[key]));
|
||||
export default objectValues;
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/* eslint-disable no-redeclare */
|
||||
// $FlowFixMe workaround for: https://github.com/facebook/flow/issues/2221
|
||||
var objectValues = Object.values || function (obj) {
|
||||
return Object.keys(obj).map(function (key) {
|
||||
return obj[key];
|
||||
});
|
||||
};
|
||||
|
||||
export default objectValues;
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = orList;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
var MAX_LENGTH = 5;
|
||||
/**
|
||||
* Given [ A, B, C ] return 'A, B, or C'.
|
||||
*/
|
||||
|
||||
function orList(items) {
|
||||
var selected = items.slice(0, MAX_LENGTH);
|
||||
return selected.reduce(function (list, quoted, index) {
|
||||
return list + (selected.length > 2 ? ', ' : ' ') + (index === selected.length - 1 ? 'or ' : '') + quoted;
|
||||
});
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
const MAX_LENGTH = 5;
|
||||
|
||||
/**
|
||||
* Given [ A, B, C ] return 'A, B, or C'.
|
||||
*/
|
||||
export default function orList(items: $ReadOnlyArray<string>): string {
|
||||
const selected = items.slice(0, MAX_LENGTH);
|
||||
return selected.reduce(
|
||||
(list, quoted, index) =>
|
||||
list +
|
||||
(selected.length > 2 ? ', ' : ' ') +
|
||||
(index === selected.length - 1 ? 'or ' : '') +
|
||||
quoted,
|
||||
);
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
var MAX_LENGTH = 5;
|
||||
/**
|
||||
* Given [ A, B, C ] return 'A, B, or C'.
|
||||
*/
|
||||
|
||||
export default function orList(items) {
|
||||
var selected = items.slice(0, MAX_LENGTH);
|
||||
return selected.reduce(function (list, quoted, index) {
|
||||
return list + (selected.length > 2 ? ', ' : ' ') + (index === selected.length - 1 ? 'or ' : '') + quoted;
|
||||
});
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = promiseForObject;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* This function transforms a JS object `ObjMap<Promise<T>>` into
|
||||
* a `Promise<ObjMap<T>>`
|
||||
*
|
||||
* This is akin to bluebird's `Promise.props`, but implemented only using
|
||||
* `Promise.all` so it will work with any implementation of ES6 promises.
|
||||
*/
|
||||
function promiseForObject(object) {
|
||||
var keys = Object.keys(object);
|
||||
var valuesAndPromises = keys.map(function (name) {
|
||||
return object[name];
|
||||
});
|
||||
return Promise.all(valuesAndPromises).then(function (values) {
|
||||
return values.reduce(function (resolvedObject, value, i) {
|
||||
resolvedObject[keys[i]] = value;
|
||||
return resolvedObject;
|
||||
}, Object.create(null));
|
||||
});
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
import type { ObjMap } from './ObjMap';
|
||||
|
||||
/**
|
||||
* This function transforms a JS object `ObjMap<Promise<T>>` into
|
||||
* a `Promise<ObjMap<T>>`
|
||||
*
|
||||
* This is akin to bluebird's `Promise.props`, but implemented only using
|
||||
* `Promise.all` so it will work with any implementation of ES6 promises.
|
||||
*/
|
||||
export default function promiseForObject<T>(
|
||||
object: ObjMap<Promise<T>>,
|
||||
): Promise<ObjMap<T>> {
|
||||
const keys = Object.keys(object);
|
||||
const valuesAndPromises = keys.map(name => object[name]);
|
||||
return Promise.all(valuesAndPromises).then(values =>
|
||||
values.reduce((resolvedObject, value, i) => {
|
||||
resolvedObject[keys[i]] = value;
|
||||
return resolvedObject;
|
||||
}, Object.create(null)),
|
||||
);
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* This function transforms a JS object `ObjMap<Promise<T>>` into
|
||||
* a `Promise<ObjMap<T>>`
|
||||
*
|
||||
* This is akin to bluebird's `Promise.props`, but implemented only using
|
||||
* `Promise.all` so it will work with any implementation of ES6 promises.
|
||||
*/
|
||||
export default function promiseForObject(object) {
|
||||
var keys = Object.keys(object);
|
||||
var valuesAndPromises = keys.map(function (name) {
|
||||
return object[name];
|
||||
});
|
||||
return Promise.all(valuesAndPromises).then(function (values) {
|
||||
return values.reduce(function (resolvedObject, value, i) {
|
||||
resolvedObject[keys[i]] = value;
|
||||
return resolvedObject;
|
||||
}, Object.create(null));
|
||||
});
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = promiseReduce;
|
||||
|
||||
var _isPromise = _interopRequireDefault(require("./isPromise"));
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Similar to Array.prototype.reduce(), however the reducing callback may return
|
||||
* a Promise, in which case reduction will continue after each promise resolves.
|
||||
*
|
||||
* If the callback does not return a Promise, then this function will also not
|
||||
* return a Promise.
|
||||
*/
|
||||
function promiseReduce(values, callback, initialValue) {
|
||||
return values.reduce(function (previous, value) {
|
||||
return (0, _isPromise.default)(previous) ? previous.then(function (resolved) {
|
||||
return callback(resolved, value);
|
||||
}) : callback(previous, value);
|
||||
}, initialValue);
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
import isPromise from './isPromise';
|
||||
import type { MaybePromise } from './MaybePromise';
|
||||
|
||||
/**
|
||||
* Similar to Array.prototype.reduce(), however the reducing callback may return
|
||||
* a Promise, in which case reduction will continue after each promise resolves.
|
||||
*
|
||||
* If the callback does not return a Promise, then this function will also not
|
||||
* return a Promise.
|
||||
*/
|
||||
export default function promiseReduce<T, U>(
|
||||
values: $ReadOnlyArray<T>,
|
||||
callback: (U, T) => MaybePromise<U>,
|
||||
initialValue: MaybePromise<U>,
|
||||
): MaybePromise<U> {
|
||||
return values.reduce(
|
||||
(previous, value) =>
|
||||
isPromise(previous)
|
||||
? previous.then(resolved => callback(resolved, value))
|
||||
: callback(previous, value),
|
||||
initialValue,
|
||||
);
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
import isPromise from './isPromise';
|
||||
|
||||
/**
|
||||
* Similar to Array.prototype.reduce(), however the reducing callback may return
|
||||
* a Promise, in which case reduction will continue after each promise resolves.
|
||||
*
|
||||
* If the callback does not return a Promise, then this function will also not
|
||||
* return a Promise.
|
||||
*/
|
||||
export default function promiseReduce(values, callback, initialValue) {
|
||||
return values.reduce(function (previous, value) {
|
||||
return isPromise(previous) ? previous.then(function (resolved) {
|
||||
return callback(resolved, value);
|
||||
}) : callback(previous, value);
|
||||
}, initialValue);
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = quotedOrList;
|
||||
|
||||
var _orList = _interopRequireDefault(require("./orList"));
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Given [ A, B, C ] return '"A", "B", or "C"'.
|
||||
*/
|
||||
function quotedOrList(items) {
|
||||
return (0, _orList.default)(items.map(function (item) {
|
||||
return "\"".concat(item, "\"");
|
||||
}));
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
import orList from './orList';
|
||||
|
||||
/**
|
||||
* Given [ A, B, C ] return '"A", "B", or "C"'.
|
||||
*/
|
||||
export default function quotedOrList(items: $ReadOnlyArray<string>): string {
|
||||
return orList(items.map(item => `"${item}"`));
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
import orList from './orList';
|
||||
/**
|
||||
* Given [ A, B, C ] return '"A", "B", or "C"'.
|
||||
*/
|
||||
|
||||
export default function quotedOrList(items) {
|
||||
return orList(items.map(function (item) {
|
||||
return "\"".concat(item, "\"");
|
||||
}));
|
||||
}
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = suggestionList;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Given an invalid input string and a list of valid options, returns a filtered
|
||||
* list of valid options sorted based on their similarity with the input.
|
||||
*/
|
||||
function suggestionList(input, options) {
|
||||
var optionsByDistance = Object.create(null);
|
||||
var oLength = options.length;
|
||||
var inputThreshold = input.length / 2;
|
||||
|
||||
for (var i = 0; i < oLength; i++) {
|
||||
var distance = lexicalDistance(input, options[i]);
|
||||
var threshold = Math.max(inputThreshold, options[i].length / 2, 1);
|
||||
|
||||
if (distance <= threshold) {
|
||||
optionsByDistance[options[i]] = distance;
|
||||
}
|
||||
}
|
||||
|
||||
return Object.keys(optionsByDistance).sort(function (a, b) {
|
||||
return optionsByDistance[a] - optionsByDistance[b];
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Computes the lexical distance between strings A and B.
|
||||
*
|
||||
* The "distance" between two strings is given by counting the minimum number
|
||||
* of edits needed to transform string A into string B. An edit can be an
|
||||
* insertion, deletion, or substitution of a single character, or a swap of two
|
||||
* adjacent characters.
|
||||
*
|
||||
* Includes a custom alteration from Damerau-Levenshtein to treat case changes
|
||||
* as a single edit which helps identify mis-cased values with an edit distance
|
||||
* of 1.
|
||||
*
|
||||
* This distance can be useful for detecting typos in input or sorting
|
||||
*
|
||||
* @param {string} a
|
||||
* @param {string} b
|
||||
* @return {int} distance in number of edits
|
||||
*/
|
||||
|
||||
|
||||
function lexicalDistance(aStr, bStr) {
|
||||
if (aStr === bStr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
var i;
|
||||
var j;
|
||||
var d = [];
|
||||
var a = aStr.toLowerCase();
|
||||
var b = bStr.toLowerCase();
|
||||
var aLength = a.length;
|
||||
var bLength = b.length; // Any case change counts as a single edit
|
||||
|
||||
if (a === b) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (i = 0; i <= aLength; i++) {
|
||||
d[i] = [i];
|
||||
}
|
||||
|
||||
for (j = 1; j <= bLength; j++) {
|
||||
d[0][j] = j;
|
||||
}
|
||||
|
||||
for (i = 1; i <= aLength; i++) {
|
||||
for (j = 1; j <= bLength; j++) {
|
||||
var cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
||||
d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
|
||||
|
||||
if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {
|
||||
d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + cost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return d[aLength][bLength];
|
||||
}
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Given an invalid input string and a list of valid options, returns a filtered
|
||||
* list of valid options sorted based on their similarity with the input.
|
||||
*/
|
||||
export default function suggestionList(
|
||||
input: string,
|
||||
options: $ReadOnlyArray<string>,
|
||||
): Array<string> {
|
||||
const optionsByDistance = Object.create(null);
|
||||
const oLength = options.length;
|
||||
const inputThreshold = input.length / 2;
|
||||
for (let i = 0; i < oLength; i++) {
|
||||
const distance = lexicalDistance(input, options[i]);
|
||||
const threshold = Math.max(inputThreshold, options[i].length / 2, 1);
|
||||
if (distance <= threshold) {
|
||||
optionsByDistance[options[i]] = distance;
|
||||
}
|
||||
}
|
||||
return Object.keys(optionsByDistance).sort(
|
||||
(a, b) => optionsByDistance[a] - optionsByDistance[b],
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the lexical distance between strings A and B.
|
||||
*
|
||||
* The "distance" between two strings is given by counting the minimum number
|
||||
* of edits needed to transform string A into string B. An edit can be an
|
||||
* insertion, deletion, or substitution of a single character, or a swap of two
|
||||
* adjacent characters.
|
||||
*
|
||||
* Includes a custom alteration from Damerau-Levenshtein to treat case changes
|
||||
* as a single edit which helps identify mis-cased values with an edit distance
|
||||
* of 1.
|
||||
*
|
||||
* This distance can be useful for detecting typos in input or sorting
|
||||
*
|
||||
* @param {string} a
|
||||
* @param {string} b
|
||||
* @return {int} distance in number of edits
|
||||
*/
|
||||
function lexicalDistance(aStr, bStr) {
|
||||
if (aStr === bStr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
let i;
|
||||
let j;
|
||||
const d = [];
|
||||
const a = aStr.toLowerCase();
|
||||
const b = bStr.toLowerCase();
|
||||
const aLength = a.length;
|
||||
const bLength = b.length;
|
||||
|
||||
// Any case change counts as a single edit
|
||||
if (a === b) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (i = 0; i <= aLength; i++) {
|
||||
d[i] = [i];
|
||||
}
|
||||
|
||||
for (j = 1; j <= bLength; j++) {
|
||||
d[0][j] = j;
|
||||
}
|
||||
|
||||
for (i = 1; i <= aLength; i++) {
|
||||
for (j = 1; j <= bLength; j++) {
|
||||
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
||||
|
||||
d[i][j] = Math.min(
|
||||
d[i - 1][j] + 1,
|
||||
d[i][j - 1] + 1,
|
||||
d[i - 1][j - 1] + cost,
|
||||
);
|
||||
|
||||
if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {
|
||||
d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + cost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return d[aLength][bLength];
|
||||
}
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* strict
|
||||
*/
|
||||
|
||||
/**
|
||||
* Given an invalid input string and a list of valid options, returns a filtered
|
||||
* list of valid options sorted based on their similarity with the input.
|
||||
*/
|
||||
export default function suggestionList(input, options) {
|
||||
var optionsByDistance = Object.create(null);
|
||||
var oLength = options.length;
|
||||
var inputThreshold = input.length / 2;
|
||||
|
||||
for (var i = 0; i < oLength; i++) {
|
||||
var distance = lexicalDistance(input, options[i]);
|
||||
var threshold = Math.max(inputThreshold, options[i].length / 2, 1);
|
||||
|
||||
if (distance <= threshold) {
|
||||
optionsByDistance[options[i]] = distance;
|
||||
}
|
||||
}
|
||||
|
||||
return Object.keys(optionsByDistance).sort(function (a, b) {
|
||||
return optionsByDistance[a] - optionsByDistance[b];
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Computes the lexical distance between strings A and B.
|
||||
*
|
||||
* The "distance" between two strings is given by counting the minimum number
|
||||
* of edits needed to transform string A into string B. An edit can be an
|
||||
* insertion, deletion, or substitution of a single character, or a swap of two
|
||||
* adjacent characters.
|
||||
*
|
||||
* Includes a custom alteration from Damerau-Levenshtein to treat case changes
|
||||
* as a single edit which helps identify mis-cased values with an edit distance
|
||||
* of 1.
|
||||
*
|
||||
* This distance can be useful for detecting typos in input or sorting
|
||||
*
|
||||
* @param {string} a
|
||||
* @param {string} b
|
||||
* @return {int} distance in number of edits
|
||||
*/
|
||||
|
||||
function lexicalDistance(aStr, bStr) {
|
||||
if (aStr === bStr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
var i;
|
||||
var j;
|
||||
var d = [];
|
||||
var a = aStr.toLowerCase();
|
||||
var b = bStr.toLowerCase();
|
||||
var aLength = a.length;
|
||||
var bLength = b.length; // Any case change counts as a single edit
|
||||
|
||||
if (a === b) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (i = 0; i <= aLength; i++) {
|
||||
d[i] = [i];
|
||||
}
|
||||
|
||||
for (j = 1; j <= bLength; j++) {
|
||||
d[0][j] = j;
|
||||
}
|
||||
|
||||
for (i = 1; i <= aLength; i++) {
|
||||
for (j = 1; j <= bLength; j++) {
|
||||
var cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
||||
d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
|
||||
|
||||
if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {
|
||||
d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + cost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return d[aLength][bLength];
|
||||
}
|
||||
Reference in new issue
Block a user