mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-22 05:27:00 +02:00
refactor: re-implement idx (safe getter) & add test
This commit is contained in:
parent
4bc010bfcc
commit
391a8b5500
2 changed files with 48 additions and 2 deletions
|
@ -97,4 +97,45 @@ describe('utils', () => {
|
||||||
expect(utils.getGitLastUpdated(tempFilePath)).toBeNull();
|
expect(utils.getGitLastUpdated(tempFilePath)).toBeNull();
|
||||||
fs.unlinkSync(tempFilePath);
|
fs.unlinkSync(tempFilePath);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('idx', () => {
|
||||||
|
const a = {};
|
||||||
|
const b = {hello: 'world'};
|
||||||
|
const env = {
|
||||||
|
translation: {
|
||||||
|
enabled: true,
|
||||||
|
enabledLanguages: [
|
||||||
|
{
|
||||||
|
enabled: true,
|
||||||
|
name: 'English',
|
||||||
|
tag: 'en',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
enabled: true,
|
||||||
|
name: '日本語',
|
||||||
|
tag: 'ja',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
versioning: {
|
||||||
|
enabled: false,
|
||||||
|
versions: [],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const variable = 'enabledLanguages';
|
||||||
|
expect(utils.idx(a, [('b', 'c')])).toBeUndefined();
|
||||||
|
expect(utils.idx(b, ['hello'])).toEqual('world');
|
||||||
|
expect(utils.idx(b, 'hello')).toEqual('world');
|
||||||
|
expect(utils.idx(env, 'typo')).toBeUndefined();
|
||||||
|
expect(utils.idx(env, 'versioning')).toEqual({
|
||||||
|
enabled: false,
|
||||||
|
versions: [],
|
||||||
|
});
|
||||||
|
expect(utils.idx(env, ['translation', 'enabled'])).toEqual(true);
|
||||||
|
expect(
|
||||||
|
utils.idx(env, ['translation', variable]).map(lang => lang.tag)
|
||||||
|
).toEqual(['en', 'ja']);
|
||||||
|
expect(utils.idx(undefined)).toBeUndefined();
|
||||||
|
expect(utils.idx(null)).toBeNull();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -29,8 +29,13 @@ function getPath(pathStr, cleanUrl = false) {
|
||||||
: removeExtension(pathStr);
|
: removeExtension(pathStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
function idx(target, path) {
|
function idx(target, keyPaths) {
|
||||||
return path.reduce((obj, key) => obj && obj[key], target);
|
return (
|
||||||
|
target &&
|
||||||
|
(Array.isArray(keyPaths)
|
||||||
|
? keyPaths.reduce((obj, key) => obj && obj[key], target)
|
||||||
|
: target[keyPaths])
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getGitLastUpdated(filepath) {
|
function getGitLastUpdated(filepath) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue