hz-zhhq-web/node_modules/jest-each/build/bind.js

238 lines
6.1 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var _util;
function _load_util() {
return (_util = _interopRequireDefault(require('util')));
}
var _chalk;
function _load_chalk() {
return (_chalk = _interopRequireDefault(require('chalk')));
}
var _prettyFormat;
function _load_prettyFormat() {
return (_prettyFormat = _interopRequireDefault(require('pretty-format')));
}
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
function _toArray(arr) {
return Array.isArray(arr) ? arr : Array.from(arr);
}
function _toConsumableArray(arr) {
if (Array.isArray(arr)) {
for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++)
arr2[i] = arr[i];
return arr2;
} else {
return Array.from(arr);
}
}
/**
* Copyright (c) 2018-present, Facebook, Inc. All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*
*/
const EXPECTED_COLOR = (_chalk || _load_chalk()).default.green;
const RECEIVED_COLOR = (_chalk || _load_chalk()).default.red;
const SUPPORTED_PLACEHOLDERS = /%[sdifjoOp%]/g;
const PRETTY_PLACEHOLDER = '%p';
const INDEX_PLACEHOLDER = '%#';
exports.default = function(cb) {
let supportsDone =
arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
return function() {
for (
var _len = arguments.length, args = Array(_len), _key = 0;
_key < _len;
_key++
) {
args[_key] = arguments[_key];
}
return function eachBind(title, test, timeout) {
if (args.length === 1) {
const table = args[0].every(Array.isArray)
? args[0]
: args[0].map(entry => [entry]);
return table.forEach((row, i) =>
cb(
arrayFormat.apply(
undefined,
[title, i].concat(_toConsumableArray(row))
),
applyRestParams(supportsDone, row, test),
timeout
)
);
}
const templateStrings = args[0];
const data = args.slice(1);
const keys = getHeadingKeys(templateStrings[0]);
const table = buildTable(data, keys.length, keys);
const missingData = data.length % keys.length;
if (missingData > 0) {
const error = new Error(
'Not enough arguments supplied for given headings:\n' +
EXPECTED_COLOR(keys.join(' | ')) +
'\n\n' +
'Received:\n' +
RECEIVED_COLOR(
(0, (_prettyFormat || _load_prettyFormat()).default)(data)
) +
'\n\n' +
`Missing ${RECEIVED_COLOR(missingData.toString())} ${pluralize(
'argument',
missingData
)}`
);
if (Error.captureStackTrace) {
Error.captureStackTrace(error, eachBind);
}
return cb(title, () => {
throw error;
});
}
return table.forEach(row =>
cb(
interpolate(title, row),
applyObjectParams(supportsDone, row, test),
timeout
)
);
};
};
};
const getPrettyIndexes = placeholders =>
placeholders.reduce(
(indexes, placeholder, index) =>
placeholder === PRETTY_PLACEHOLDER ? indexes.concat(index) : indexes,
[]
);
const arrayFormat = function(title, rowIndex) {
for (
var _len2 = arguments.length,
args = Array(_len2 > 2 ? _len2 - 2 : 0),
_key2 = 2;
_key2 < _len2;
_key2++
) {
args[_key2 - 2] = arguments[_key2];
}
const placeholders = title.match(SUPPORTED_PLACEHOLDERS) || [];
const prettyIndexes = getPrettyIndexes(placeholders);
var _args$reduce = args.reduce(
(acc, arg, index) => {
if (prettyIndexes.indexOf(index) !== -1) {
return {
args: acc.args,
title: acc.title.replace(
PRETTY_PLACEHOLDER,
(0, (_prettyFormat || _load_prettyFormat()).default)(arg, {
maxDepth: 1,
min: true
})
)
};
}
return {
args: acc.args.concat([arg]),
title: acc.title
};
},
{args: [], title: title}
);
const prettyTitle = _args$reduce.title,
remainingArgs = _args$reduce.args;
return (_util || _load_util()).default.format.apply(
(_util || _load_util()).default,
[prettyTitle.replace(INDEX_PLACEHOLDER, rowIndex.toString())].concat(
_toConsumableArray(
remainingArgs.slice(0, placeholders.length - prettyIndexes.length)
)
)
);
};
const applyRestParams = (supportsDone, params, test) =>
supportsDone && params.length < test.length
? done => test.apply(undefined, _toConsumableArray(params).concat([done]))
: () => test.apply(undefined, _toConsumableArray(params));
const getHeadingKeys = headings => headings.replace(/\s/g, '').split('|');
const buildTable = (data, rowSize, keys) =>
Array.from({length: data.length / rowSize})
.map((_, index) => data.slice(index * rowSize, index * rowSize + rowSize))
.map(row =>
row.reduce(
(acc, value, index) => Object.assign({}, acc, {[keys[index]]: value}),
{}
)
);
const getMatchingKeyPaths = title => (matches, key) =>
matches.concat(title.match(new RegExp(`\\$${key}[\\.\\w]*`, 'g')) || []);
const replaceKeyPathWithValue = data => (title, match) => {
const keyPath = match.replace('$', '').split('.');
const value = getPath(data, keyPath);
return title.replace(
match,
(0, (_prettyFormat || _load_prettyFormat()).default)(value, {
maxDepth: 1,
min: true
})
);
};
const interpolate = (title, data) =>
Object.keys(data)
.reduce(getMatchingKeyPaths(title), []) // aka flatMap
.reduce(replaceKeyPathWithValue(data), title);
const applyObjectParams = (supportsDone, obj, test) =>
supportsDone && test.length > 1 ? done => test(obj, done) : () => test(obj);
const pluralize = (word, count) => word + (count === 1 ? '' : 's');
const getPath = (o, _ref) => {
var _ref2 = _toArray(_ref);
let head = _ref2[0],
tail = _ref2.slice(1);
if (!head || !o.hasOwnProperty || !o.hasOwnProperty(head)) return o;
return getPath(o[head], tail);
};