You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.6 KiB
69 lines
1.6 KiB
'use strict'; |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.getPath = getPath; |
|
exports.interpolateVariables = void 0; |
|
|
|
function _jestGetType() { |
|
const data = require('jest-get-type'); |
|
|
|
_jestGetType = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _prettyFormat() { |
|
const data = require('pretty-format'); |
|
|
|
_prettyFormat = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. 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 interpolateVariables = (title, template, index) => |
|
Object.keys(template) |
|
.reduce(getMatchingKeyPaths(title), []) // aka flatMap |
|
.reduce(replaceKeyPathWithValue(template), title) |
|
.replace('$#', '' + index); |
|
|
|
exports.interpolateVariables = interpolateVariables; |
|
|
|
const getMatchingKeyPaths = title => (matches, key) => |
|
matches.concat(title.match(new RegExp(`\\$${key}[\\.\\w]*`, 'g')) || []); |
|
|
|
const replaceKeyPathWithValue = template => (title, match) => { |
|
const keyPath = match.replace('$', '').split('.'); |
|
const value = getPath(template, keyPath); |
|
|
|
if ((0, _jestGetType().isPrimitive)(value)) { |
|
return title.replace(match, String(value)); |
|
} |
|
|
|
return title.replace( |
|
match, |
|
(0, _prettyFormat().format)(value, { |
|
maxDepth: 1, |
|
min: true |
|
}) |
|
); |
|
}; |
|
/* eslint import/export: 0*/ |
|
|
|
function getPath(template, [head, ...tail]) { |
|
if (!head || !template.hasOwnProperty || !template.hasOwnProperty(head)) |
|
return template; |
|
return getPath(template[head], tail); |
|
}
|
|
|