From f6caca58511a277c693e5e564caf4224671c7e1f Mon Sep 17 00:00:00 2001 From: Stephane MEYER Date: Tue, 17 Sep 2024 15:54:48 +0200 Subject: [PATCH] Changes after code review --- @xen-orchestra/defined/.USAGE.md | 7 ++++++- @xen-orchestra/defined/README.md | 13 ++++++++++--- @xen-orchestra/defined/defined.test.mjs | 2 +- @xen-orchestra/defined/index.js | 8 ++++++-- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/@xen-orchestra/defined/.USAGE.md b/@xen-orchestra/defined/.USAGE.md index e48b4d523de..bc71fccad85 100644 --- a/@xen-orchestra/defined/.USAGE.md +++ b/@xen-orchestra/defined/.USAGE.md @@ -2,6 +2,11 @@ Returns the first non-`undefined` value from a list of arguments, evaluating functions if needed. +There is two ways to use this function: + +- either with a single array argument: it should return the first non-undefined item +- or with multiple arguments: it should return the first non-undefined argument + If only `undefined` values, return `undefined`. ```js @@ -14,7 +19,7 @@ defined([undefined, null, 10]) // Returns null defined([undefined, undefined], [undefined, undefined, 10]) -// Returns 10 +// Returns [undefined, undefined] defined(() => 'bar', 42) // Returns 'bar' diff --git a/@xen-orchestra/defined/README.md b/@xen-orchestra/defined/README.md index 6f5118ba585..942553f41aa 100644 --- a/@xen-orchestra/defined/README.md +++ b/@xen-orchestra/defined/README.md @@ -16,8 +16,15 @@ npm install --save @xen-orchestra/defined ## Usage -The defined() function returns the first non-undefined value from a list of arguments, evaluating functions if needed. -If only undefined values, return undefined. +### `defined()` + +Returns the first non-`undefined` value from a list of arguments, evaluating functions if needed. + +There is two ways to use this function: +- either with a single array argument: it should return the first non-undefined item +- or with multiple arguments: it should return the first non-undefined argument + +If only `undefined` values, return `undefined`. ```js import defined from '@xen-orchestra/defined/index.js' @@ -29,7 +36,7 @@ defined([undefined, null, 10]) // Returns null defined([undefined, undefined], [undefined, undefined, 10]) -// Returns 10 +// Returns [undefined, undefined] defined(() => 'bar', 42) // Returns 'bar' diff --git a/@xen-orchestra/defined/defined.test.mjs b/@xen-orchestra/defined/defined.test.mjs index dd9c885d86a..e9f74f0d7c2 100644 --- a/@xen-orchestra/defined/defined.test.mjs +++ b/@xen-orchestra/defined/defined.test.mjs @@ -12,7 +12,7 @@ describe('defined()', () => { assert.deepStrictEqual(defined([undefined, null, 10]), expected) }) it('should return first non undefined value in arrays', () => { - const expected = 10 + const expected = [undefined, undefined, undefined] assert.deepStrictEqual(defined([undefined, undefined, undefined], [undefined, undefined, 10]), expected) }) it('should return first non undefined value in function', () => { diff --git a/@xen-orchestra/defined/index.js b/@xen-orchestra/defined/index.js index eb81fe3adf2..c95d52c151c 100644 --- a/@xen-orchestra/defined/index.js +++ b/@xen-orchestra/defined/index.js @@ -14,8 +14,12 @@ // ]) // ``` function defined() { - const args = [].concat.apply([], arguments) - const n = args.length + let args = arguments + let n = args.length + if (n === 1) { + args = arguments[0] + n = args.length + } for (let i = 0; i < n; ++i) { let arg = args[i]