diff --git a/nodejs-p-locate.spec b/nodejs-p-locate.spec new file mode 100644 index 0000000..010f620 --- /dev/null +++ b/nodejs-p-locate.spec @@ -0,0 +1,49 @@ +%{?nodejs_find_provides_and_requires} +%global packagename p-locate +%global enable_tests 0 +Name: nodejs-p-locate +Version: 2.0.0 +Release: 1 +Summary: Get the first fulfilled promise that satisfies the provided testing function +License: MIT +URL: https://github.com/sindresorhus/p-locate +Source0: https://registry.npmjs.org/%{packagename}/-/%{packagename}-%{version}.tgz +Source1: https://raw.githubusercontent.com/sindresorhus/p-locate/v%{version}/test.js +ExclusiveArch: %{nodejs_arches} noarch +BuildArch: noarch +BuildRequires: nodejs-packaging npm(p-limit) +%if 0%{?enable_tests} +BuildRequires: ava +%endif +%description +Get the first fulfilled promise that satisfies the provided testing function + +%prep +%autosetup -n package +cp -p %{SOURCE1} . + +%build + +%install +mkdir -p %{buildroot}%{nodejs_sitelib}/%{packagename} +cp -pr package.json index.js \ + %{buildroot}%{nodejs_sitelib}/%{packagename} +%nodejs_symlink_deps + +%check +%nodejs_symlink_deps --check +%{__nodejs} -e 'require("./")' +%if 0%{?enable_tests} +%{_bindir}/ava +%else +%{_bindir}/echo -e "\e[101m -=#=- Tests disabled -=#=- \e[0m" +%endif + +%files +%doc readme.md +%license license +%{nodejs_sitelib}/%{packagename} + +%changelog +* Mon Aug 17 2020 wutao - 2.0.0-1 +- Package init diff --git a/nodejs-p-locate.yaml b/nodejs-p-locate.yaml new file mode 100644 index 0000000..2bac5c0 --- /dev/null +++ b/nodejs-p-locate.yaml @@ -0,0 +1,4 @@ +version_control: github +src_repo: sindresorhus/p-locate +tag_prefix: "^v" +seperator: "." diff --git a/p-locate-2.0.0.tgz b/p-locate-2.0.0.tgz new file mode 100644 index 0000000..604acd6 Binary files /dev/null and b/p-locate-2.0.0.tgz differ diff --git a/test.js b/test.js new file mode 100644 index 0000000..5501549 --- /dev/null +++ b/test.js @@ -0,0 +1,41 @@ +import {serial as test} from 'ava'; +import delay from 'delay'; +import inRange from 'in-range'; +import timeSpan from 'time-span'; +import m from './'; + +const input = [ + [1, 300], + [2, 400], + [3, 200], + Promise.resolve([4, 100]) // ensures promises work in the input +]; + +const tester = ([val, ms]) => delay(ms).then(() => val === 2 || val === 3); + +test('main', async t => { + const end = timeSpan(); + t.is((await m(input, tester))[0], 2); + t.true(inRange(end(), 370, 450), 'should be time of item `2`'); +}); + +test('option {preserveOrder:false}', async t => { + const end = timeSpan(); + t.is((await m(input, tester, {preserveOrder: false}))[0], 3); + t.true(inRange(end(), 170, 250), 'should be time of item `3`'); +}); + +test('option {concurrency:1}', async t => { + const end = timeSpan(); + t.is((await m(input, tester, {concurrency: 1}))[0], 2); + t.true(inRange(end(), 670, 750), 'should be time of items `1` and `2`, since they run serially'); +}); + +test('returns `undefined` when nothing could be found', async t => { + t.is((await m([1, 2, 3], () => false)), undefined); +}); + +test('rejected return value in `tester` rejects the promise', async t => { + const fixtureErr = new Error('fixture'); + await t.throws(m([1, 2, 3], () => Promise.reject(fixtureErr)), fixtureErr.message); +});