From de2a410bf4bccfc3fbf799b905fdbb043903c522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20ESTIENNE?= Date: Mon, 12 Sep 2022 10:54:02 +0200 Subject: [PATCH] Merge branch 'v3.x', qquashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 60d909ad8a4ede824ca9f59fdfe853be5887249c Author: Sébastien ESTIENNE Date: Mon Sep 12 10:48:25 2022 +0200 release(v3.8.2) commit 5c8e08410bd8fe9613eb24758c540ca87b60f46b Author: sestienne <55140956+sestienne@users.noreply.github.com> Date: Mon Sep 12 10:30:24 2022 +0200 build(android): updated AltBeacon library to 2.19.4 to be compliant with android 12 Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details. commit de97d22c912b4c36836c701972a48360d1cf4b56 Author: sestienne <55140956+sestienne@users.noreply.github.com> Date: Mon Sep 12 10:22:49 2022 +0200 fix(build) : Migrate gradle configuration to be compatible with gradle 7 Compile & runtime configurations are no more supported More information can be found on gradle website : https://docs.gradle.org/current/userguide/upgrading_version_6.html commit 270ffbbc12159861a16e5e81481103c1e09139cb Author: AustinHaigh Date: Mon May 13 13:02:22 2019 -1000 docs: disable request for bt permission commit 1336c1c5e335c690d76799acfbd3b813896f2a6c Author: AustinHaigh Date: Mon May 13 12:54:34 2019 -1000 feat: add config option to request BT permissions commit bc6d0c7f690c9f62d03e23aef537856f86c4fa71 Author: Peter Metz Date: Sun May 12 12:52:37 2019 -0700 chore(release): v3.8.1 hotfix for plugin id issues in package commit f153474dd584f1ddc4d35fbf0b4b0337a225458b Author: AustinHaigh Date: Sun May 12 09:02:55 2019 -1000 docs: add documentation for ARMA filter commit 725ad2b3c8dd189bf108c3d11beb3006071f4d83 Author: Peter Metz Date: Sat May 11 16:51:26 2019 -0700 docs: readme gets release checklist commit f137178e7d7e8c39e71a21595337f3d41c7f83a1 Author: Peter Metz Date: Sat May 11 16:38:14 2019 -0700 chore: v3.8.0 release commit 96a86d26bc318edae72b8251df1d85472d52b527 Author: Juergen Kienhoefer Date: Fri May 10 15:50:52 2019 -0700 fix(android): #417 startAdvertising does not honor MeasuredPower commit fcbe46375be09312b38db2187ea22eb48be8fe57 Author: AustinHaigh Date: Wed May 8 10:43:33 2019 -1000 docs: add commitlint info to README.md commit 40abc3b3f80e2c1b6c9f98eeb77aae7e9cee4e38 Author: AustinHaigh Date: Wed May 8 10:00:13 2019 -1000 feat: add ARMA filter support for distance calcs commit f2fe545f5cefe14bd7043a6e18cfa357f8f5b80b Author: Shane McCarron Date: Tue Apr 9 07:49:03 2019 -0500 build(android): updated to latest published altbeacon library commit f096cb1cd5cf0908cb8d9b82e3b2c9353439e256 Author: Martin S. Kyukov Date: Mon Mar 25 14:52:27 2019 +0100 build: remove git+ from repo url If the git+ is present, when removing adding platforms, cordova cannot find the plugin because the repository gives an error. Removing git+ from line 14 fixes the issue. commit fa02d06e08207dbd202a910e4d19c57c6eb81bb9 Author: Peter Metz Date: Sat May 11 15:23:53 2019 -0700 build: husky dev dep. for instant commit message validation Without this I had to wait for the CI server to tell me that I had an uppercase typo in the commit message. commit 9e221fede0f764a1d07f7ac4021840cc4042da5b Author: Peter Metz Date: Sat May 11 15:20:16 2019 -0700 fix(ios): equality check for location manager corrected commit 0fa7553e77a06d09b8583ad86b680de9c4c0a628 Author: Peter Metz Date: Sat May 11 15:10:45 2019 -0700 fix(build): upgrades commitlint CLI due to vulnerability commit 7a0472ad379765529fc15926a38c6f3e0f195d09 Author: Peter Metz Date: Sat May 11 01:00:01 2019 -0700 fix(ios): location manager no longer handles other instances messages This is to avoid conflicts with other plugins which the developer may have installed for their project. commit 16beb23b05a6d9c1d2086fb0c48603b530db9b31 Author: Shane McCarron Date: Wed Dec 5 18:55:47 2018 -0600 build(android): updated AltBeacon library to 2.15.2 commit 3d94fc73001e46388b8159bf86c1d8347ff530bb Merge: 9b29069 16581c5 Author: Darrel O'Pry Date: Wed Jul 25 20:56:29 2018 -0400 Merge pull request #389 from dopry/circleci_basic chore: add circleci and commitlint validation commit 16581c5c746eca10d84f7066be649a6edafd6fec Author: Darrel O'Pry Date: Wed Jul 25 18:49:53 2018 -0400 chore: remove spurious characters from README.md commit 76fb1c1d95f1912aef886c5b2a72c20e07616ade Author: Darrel O'Pry Date: Wed Jul 25 17:19:37 2018 -0400 chore: add circleci and commitlint validation commit 9b29069224b399641d8412755299bf1c5cc6f66a Author: Darrel O'Pry Date: Mon Jul 23 14:16:47 2018 -0400 chore: create issue_template.md commit 4a53a27598fe520f844f06b1849ef18065f1f0b5 Merge: 1a637b8 4c8ed86 Author: Darrel O'Pry Date: Mon Jul 23 13:58:53 2018 -0400 Merge pull request #379 from dopry/altbeacon_2_14 chore: upgrade altbeacon to 2.14 commit 4c8ed86b4d30e45287038f1521b1eec0f6540c18 Author: Darrel O'Pry Date: Sat Jun 23 00:05:16 2018 -0400 chore: upgrade altbeacon to 2.14 require directly from jcenter so a local copy is no longer necessary. commit 1a637b8d2dd028cf56963fcc678a352b5788f0c9 Merge: 928f9f4 7f5830b Author: Darrel O'Pry Date: Thu Jun 14 19:43:48 2018 -0400 Merge branch 'alt_beacon_2_13_1' into petermetz_v3.x commit 7f5830b11bc8196d68169b9f0faeac4dc1e1ea0e Author: Darrel O'Pry Date: Mon Apr 23 20:53:52 2018 -0400 chore: remove configuration inherited altbeacon AndroidManifest.xml Since AltBeacon is included as an dependency in grade through the `` tag its AndroidManifest.xml is included during builds. The plugin no longer needs to reconstruct the manifest simplifying manifest maintenance. commit 9d0b818af1f661a5e0183d7b3c5845baf2b8f821 Author: Darrel O'Pry Date: Fri Apr 13 16:54:50 2018 -0400 chore: upgrade altbeacon to 2.13.1 see: https://github.com/AltBeacon/android-beacon-library/releases 2.13.1 Changelog * fix: incorrect immediateScanJobId meta-data name in manifest causing crash 2.13 Changelog * feat: Add BluetoothMedic to fix crashing bluetooth stacks * feat: Allow configuring job ids * fix: Allow scans with screen off on Android 8.1 commit 928f9f47110cee40f2abb86e369c6e1fdcfa5bf6 Merge: 5f088cb 80e2f4b Author: Darrel O'Pry Date: Thu Jun 14 19:41:58 2018 -0400 Merge branch 'beacons_crashing_android_8_1' into petermetz_v3.x commit 80e2f4bb5bff60ec4c127a5c0eefb0be56e9821f Author: Darrel O'Pry Date: Mon Apr 23 19:12:00 2018 -0400 fix: add new permissions required for android 8 In testing errors were thrown without these permissions. * BIND_JOB_SERVICE ``` Unhandled Promise rejection: No such service ComponentInfo{com.sprygroup.automata/org.altbeacon.beacon.service.ScanJob} ; Zone: ; Task: ; Value: No such service ComponentInfo{com.sprygroup.automata/org.altbeacon.beacon.service.ScanJob} ``` * RECEIVE_BOOT_COMPLETED ``` Unhandled Promise rejection: Error: requested job be persisted without holding RECEIVE_BOOT_COMPLETED permission. ; Zone: ; Task: ; Value: Error: requested job be persisted without holding RECEIVE_BOOT_COMPLETED permission. ``` commit 5dc13b55346d93176159824ae3153da3292003e9 Author: Darrel O'Pry Date: Fri Apr 13 16:30:09 2018 -0400 fix: add reference to com.android.support.support-core-utils * including only core-utils to streamline size, 1.23MB smaller than support-v4 in demo: v4 size: 12.10MB, core-utils size: 10.87Mb commit 5f088cb77bdecd08722d8b8c5d5f04b693feebd8 Author: Peter (Somogyvari) Metz Date: Sun Apr 22 20:45:55 2018 -0700 release(v3.6.1) commit 0e16c6a1546524d1b2d8908deead09b81d30f33d Author: João Gonçalves Date: Thu Jan 11 17:23:04 2018 +0000 Removed eager queue resume commit 202001f1c3f48dab9d61521cc795dd7c9e3478b8 Author: Peter (Somogyvari) Metz Date: Mon Dec 25 23:07:41 2017 -0800 release(v3.6.0) commit 4553ee751a8854dcfc30d392f714484ca7cc5690 Author: Peter (Somogyvari) Metz Date: Mon Dec 25 22:45:16 2017 -0800 feat(BeaconRegion.js): On Android wild-card UUIDs are now allowed. iOS is still a no-go. commit 094e449b49c22f539b8302032c664525861ec7ed Author: Peter (Somogyvari) Metz Date: Mon Dec 25 21:45:07 2017 -0800 release(v.3.5.6) commit 98bbc57ff01319dcd93741c19745a08c07878772 Author: Peter (Somogyvari) Metz Date: Mon Dec 25 21:29:22 2017 -0800 patch(plugin.xml): fixes https://github.com/petermetz/cordova-plugin-ibeacon/issues/322 iOS 11 requires a new key in the plist for the messages regarding permissions. plugin.xml now declares this along with the others. commit ecd7b112a5195990d91b4370804b23602fdec15a Author: Peter (Somogyvari) Metz Date: Mon Dec 25 20:57:17 2017 -0800 release(v3.5.5) commit a2d5da34e97a664a21d1ea30438796085cf26b16 Author: Peter (Somogyvari) Metz Date: Mon Dec 25 20:57:05 2017 -0800 build(altbeacon.jar): upgrades AltBeacon to v2.12.4 commit 47ff8de3fe8b82e98440b0fc4141912caa3a1aab Author: Peter (Somogyvari) Metz Date: Mon Dec 25 11:28:22 2017 -0800 docs(FAQ.md): explanation for configuration changes in managed services commit b162696a5529f4c0b2dee87493abdb6b515b3772 Author: Peter (Somogyvari) Metz Date: Mon Dec 25 11:02:02 2017 -0800 release(v5.3.4) commit 02393091a4eb557ec2f0caf5f66bed3c9b3a164b Author: KIHARA Hideto Date: Sat Dec 23 12:40:36 2017 +0900 Fix cordova build error on cordova-android@7.0.0 commit a9e47ac7802aa58655cfc17fd822c7ce6f78e273 Author: Peter (Somogyvari) Metz Date: Fri Dec 22 22:19:53 2017 -0800 release(v3.5.3) commit fd39a69c61a8695c69e00a2733154a09a2f6643e Author: Michael de Wit Date: Tue Nov 7 10:15:56 2017 +0100 Remove allowsBackgroundLocationUpdates from iOS LocationManager commit cd57ea7af711c4e089aaac1dd138c2dcbbfc56b2 Author: Martin Grubinger Date: Thu Sep 14 17:44:06 2017 +0200 Update README.md add description on required background mode for advertising on iOS. fix typo in startAdvertising sample code. commit 2eb091c3212e0778fe83db4af20e5de697fad485 Author: Peter (Somogyvari) Metz Date: Fri Sep 8 23:03:47 2017 -0700 release(v3.5.2) commit 477e59d8ab92fbe9189c83a9dfc249461df97aa5 Author: Peter (Somogyvari) Metz Date: Fri Sep 8 23:02:46 2017 -0700 feat(android): BLE stop advertising implemented commit 3bb2600d6c9b2103f4ce30222bac1edfafd826ab Author: Peter (Somogyvari) Metz Date: Wed Aug 23 19:40:33 2017 -0700 v3.5.1 commit bee8354d5652cbd65bd08d68ab888d2a855a25aa Author: Peter (Somogyvari) Metz Date: Wed Aug 23 19:37:23 2017 -0700 patch(android): fixing silly merge mistake commit e3fe3d5ec3f65bcf0e77ec368c4ff65bec3f9723 Author: Peter (Somogyvari) Metz Date: Wed Aug 23 00:22:44 2017 -0700 v3.5.0 commit a1ecd8079230261029eb2ea5331469cc26bf44f9 Merge: be63d3b 1f4b83b Author: Peter (Somogyvari) Metz Date: Wed Aug 23 00:06:28 2017 -0700 Merge pull request #305 from 'CorvexConnectedSafety-lib2.11' into v3.x commit 1f4b83b5b13be90ced1cc6a0f5920099d8d1496d Author: Shane McCarron Date: Wed Jul 5 09:44:37 2017 -0500 Updated to version 1.11 Added option to enable long scanning commit 1f679d39df3b1dc9f7ea428df3a8a30c98aa06e5 Author: Shane McCarron Date: Sat Jun 17 11:49:28 2017 -0500 Upgraded altbeacon to 2.10 commit 90f4e7ba02f0813d93a0732216deaac0bc0d9683 Author: Shane McCarron Date: Fri Jun 9 15:04:05 2017 -0500 Added ability to set FORGROUND_SCAN_PERIOD from config.xml commit e3fe391a582c509c201815e27b7bc903d2aad02b Author: Shane McCarron Date: Fri Jun 9 09:31:31 2017 -0500 Downgraded to 2.9.2 commit be63d3b0a073f8556349bbb836d0efb9f175343a Author: Vincenzo Luongo Date: Wed May 11 17:34:20 2016 +0200 implemented beacontrasmit protocol with android >= 5.0 implemented beacontrasmit protocol and valid with android >= 5.0 commit 9ff56b33979f33761526785522d3c0417a44f939 Author: Szekeres Bálint Date: Wed Jan 25 14:03:20 2017 +0100 added NSBluetoothPeripheralUsageDescription to plist file commit c8a4052d49501849bfaa21ce1b70d6c703a9182a Author: Joanna SanDretto Date: Wed Aug 23 01:44:28 2017 -0500 Updating altbeacon library to version 2.9.2 (#277) * updating altbeacon library * Updating albeacon library to 2.9.2 commit 73c3cb61fa6945cb5a748e89bba9fc13bf552bff Author: Julián Mesa Llopis Date: Wed Aug 23 08:10:35 2017 +0200 Added SampleExpirationMilliseconds parameter. (#258) Adjusting the averaging filter time commit 93562ce05e93f6c799da55d0b4fed3008b1f5646 Author: Rodrigo Graça Date: Mon Jun 13 16:16:20 2016 +0100 Remove empty space There's two examples: "Start monitoring a single iBeacon" and "Start ranging a single iBeacon" They are pretty much the same thing except two diferences, one has "startMonitoringForRegion" and the other "startRangingBeaconsInRegion", and one had two more line breaks, this PR fixes that... commit 77619d158f85762d81e8d8df8b2e29e51484b1d1 Merge: 4a432e2 4f1d3de Author: Peter (Somogyvari) Metz Date: Tue Aug 22 22:47:32 2017 -0700 Merge pull request #237 from 'olegdizus-v3.x' into v3.x commit 4f1d3defee66b259aeaad3b631a1915e58af0f00 Author: Oleg Dizus Date: Fri May 20 11:28:37 2016 +0300 Added foregroundScanPeriod parameter (+2 squashed commits) Squashed commits: [8e6fa83] Addd [0ab3144] Set foreground scan period commit 4a432e28cf2ce7b9f1c8b2bba51772f09cd4b2f5 Merge: 4d9aca1 c51a010 Author: Peter (Somogyvari) Metz Date: Sat Apr 23 17:09:29 2016 +0100 Merge pull request #225 from machty/patch-2 Fix illegal console.error usage in README commit c51a010c16bc945000fba8df1a5283e0c9fb7839 Author: Alex Matchneer Date: Fri Apr 22 15:37:57 2016 -0400 Fix illegal console.error usage in README Passing `console.error` as a standalone function without calling `.bind()` on it first results in an `Illegal invocation` when you eventually call it. I opted instead to just wrap in a function for some of the mobile browsers that still don't implement `Function.bind` commit 4d9aca1147491160a4bd4af2d0c9ce82f3c7ed58 Merge: 0bba495 b4ba3fe Author: Peter (Somogyvari) Metz Date: Mon Apr 4 09:20:07 2016 +0200 Merge pull request #217 from Ritzlgrmft/patch-1 Update FAQ.md commit b4ba3fe1ca929f512f77228dc866378b9e6208f2 Author: Markus Wagner Date: Mon Apr 4 08:25:24 2016 +0200 Update FAQ.md Empty lines added, because otherwise the preference was not displayed --- .circleci/config.yml | 51 + .github/issue_template.md | 8 + .gitignore | 3 +- CHANGELOG.md | 69 +- FAQ.md | 22 +- README.md | 96 +- libs/android/altbeacon.jar | Bin 146076 -> 0 bytes package-lock.json | 1542 +++++++++++++++++++++ package.json | 21 +- plugin.xml | 52 +- src/android/LocationManager.java | 162 ++- src/android/cordova-plugin-ibeacon.gradle | 14 + src/ios/CDVLocationManager.m | 12 +- www/model/BeaconRegion.js | 94 +- 14 files changed, 2029 insertions(+), 117 deletions(-) create mode 100644 .circleci/config.yml create mode 100644 .github/issue_template.md delete mode 100644 libs/android/altbeacon.jar create mode 100644 package-lock.json create mode 100644 src/android/cordova-plugin-ibeacon.gradle diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..250432c7 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,51 @@ +# Javascript Node CircleCI 2.0 configuration file +# +# Check https://circleci.com/docs/2.0/language-javascript/ for more details +# +version: 2 + +aliases: + x-ignore-master: &x-ignore-master + filters: + branches: + ignore: master + + x-only-master: &x-only-master + filters: + branches: + only: master + + +jobs: + lint: + docker: + - image: circleci/node:8.9 + steps: + - checkout + - restore_cache: + keys: + - npm-{{ checksum "package-lock.json" }}-{{ arch }} + - npm- + - run: npm install + - save_cache: + paths: + - node_modules + key: npm-{{ checksum "package-lock.json" }}-{{ arch }} + - run: + command: | + LAST_TAG=`git describe --tags --abbrev=0` + echo commitlint --from ${LAST_TAG} + npx commitlint --from ${LAST_TAG} + + +workflows: + version: 2 + pullrequest: + jobs: + - lint: + <<: *x-ignore-master + + master: + jobs: + - lint: + <<: *x-only-master \ No newline at end of file diff --git a/.github/issue_template.md b/.github/issue_template.md new file mode 100644 index 00000000..fee307c9 --- /dev/null +++ b/.github/issue_template.md @@ -0,0 +1,8 @@ +Please include the following to help us address your issue. + +1. Expected behavior and actual behavior. +2. Steps to reproduce the problem. +3. cordova-android version +4. cordova-ios version +5. cordova-plugin-ibeacon version +6. If running on a device, device model and os version. diff --git a/.gitignore b/.gitignore index 10ace647..9c401857 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ Thumbs.db .idea/ -nbproject/ \ No newline at end of file +nbproject/ +node_modules/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 275071d6..07cd6b33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,60 @@ +# 3.8.2 +- build(android): updated AltBeacon library to 2.19.4 (to be compliant with android 12) +- fix(build) : Migrate gradle configuration to be compatible with gradle 7 + +# 3.8.1 +- Fixing botched plugin id in release of v3.8.0. + +# 3.8.0 + +- 40abc3b feat: add ARMA filter support for distance calcs +- f2fe545 build(android): updated to latest published altbeacon library +- 0fa7553 fix(build): upgrades commitlint CLI due to vulnerability +- 7a0472a fix(ios): location manager no longer handles other instances messages + +# 3.6.1 + +* Fixes: https://github.com/petermetz/cordova-plugin-ibeacon/issues/259 + +# 3.6.0 + +* Android now allows the usage of wildcard UUIDs by passing in `cordova.plugins.locationManager.BeaconRegion.WILDCARD_UUID` + as the UUID of a BeaconRegion (constructor) + +# 3.5.6 + +* iOS 11 .plist compatibility added (`NSLocationAlwaysAndWhenInUseUsageDescription`) + - https://github.com/petermetz/cordova-plugin-ibeacon/issues/322 + +# 3.5.5 + +* Fixes: https://github.com/petermetz/cordova-plugin-ibeacon/issues/323 + - Upgrades to the latest stable AltBeacon library at present (v2.12.4) + +# 3.5.4 + +* Fix: Cordova Android 7.0.0 build issues averted: + - https://github.com/petermetz/cordova-plugin-ibeacon/pull/337 + +# 3.5.3 + +* Fix: WKWebView crash no longer happens + - https://github.com/petermetz/cordova-plugin-ibeacon/pull/326 + +# 3.5.2 + +* Feature: Stop advertising as iBeacon is now implemented on the Android platform as well. + +# 3.5.1 + +* Hot-fix: syntax errors fixed in Android + +# 3.5.0 + +* Upgraded AltBeacon to v2.11 +* iBeacon advertising added for Android: https://github.com/petermetz/cordova-plugin-ibeacon/pull/282/commits/85967c962acd0ba50b5f1ccce89c3e28873e4530 +* Smaller fixes/updates + # 3.4.1 ## Backwards Compatibility @@ -6,7 +63,7 @@ # 3.4.0 ## Features -* New Feature: You can now configure the foreground scan between period (Android) directly from +* New Feature: You can now configure the foreground scan between period (Android) directly from the config.xml file of your Cordova project. * Dependency updated: AltBeacon jar is now on version 2.7.1. * Important for contributors: The Android source code has been reformatted with Android Studio, the @@ -31,7 +88,7 @@ that have no other changes contained in them. ## Breaking Changes -* Klass dependency has been removed. Therefore ```cordova.plugins.LocationManager.Delegate``` entity no longer supports +* Klass dependency has been removed. Therefore ```cordova.plugins.LocationManager.Delegate``` entity no longer supports implements and any callbacks mys override the default callbacks directly. See ```ReadMe.md``` for examples of how to use Delegate since this change @@ -39,8 +96,8 @@ implements and any callbacks mys override the default callbacks directly. See `` ## Fixed bugs -* Fixed a bug when installing the plugin sometimes resulted in broken Javascript source files that contained syntax -errors and stopped apps from working after the plugin has been added to the project. +* Fixed a bug when installing the plugin sometimes resulted in broken Javascript source files that contained syntax +errors and stopped apps from working after the plugin has been added to the project. # 3.1.0 @@ -59,7 +116,7 @@ errors and stopped apps from working after the plugin has been added to the proj ## Breaking Changes -* The plugin received a new ID. Previously it was ```org.apache.cordova.ibeacon``` and now it runs as +* The plugin received a new ID. Previously it was ```org.apache.cordova.ibeacon``` and now it runs as ```com.unarin.cordova.beacon```. To perform an upgrade from earlier versions with the old ID, you'll have to remove and add the plugin again with the cordova cli commands: ```cordova plugin rm org.apache.cordova.ibeacon``` and then ```cordova plugin add com.unarin.cordova.beacon``` to get the latest version. You can have a look at the PhoneGap Build @@ -73,7 +130,7 @@ submission [here](https://build.phonegap.com/plugins/986). # 2.0.0 (06.07.2014) * Redesigned to use **Promise** .then() .fail(), .done() for method callbacks * Singleton **Delegate** object implementation for event handling -* Android support added +* Android support added * Monitoring and Ranging support for iOS and Android # 1.0.0 (05.04.2014) diff --git a/FAQ.md b/FAQ.md index ef476eea..5d965da2 100644 --- a/FAQ.md +++ b/FAQ.md @@ -1,19 +1,29 @@ # iBeacon Cordova Plugin - Frequently Asked Questions -### How do I debug notifications in the background? +## How do I debug notifications in the background? Enable the debug logging and inspect the console logs of your device through XCode. -### I would like to customise how frequently the AltBeacon library scans for proximity devices (beacons). How do I do that? +## I would like to customise how frequently the AltBeacon library scans for proximity devices (beacons). How do I do that? Introduce an Android specific preference in your config.xml, something like this: + + This will ensure that the AltBeacon library will wait five seconds in-between foreground scans. The default is 0 for the mentioned configuration value. -### 'NSInternalInconsistencyException' Exception at Application Startup: ```Assertion failure in -[CLLocationManager setAllowsBackgroundLocationUpdates:]``` +## How do I configure the permissions when working with a managed service (Phonegap Build, Ionic Cloud, etc.) + +The newer versins of the cordova CLI come with features to help you do that: + +```xml + + + location + + +``` -This most likely happens because you forgot to enable the ```Background Modes``` capability by switching -it to ```ON``` and then ticking ```Location updates``` as well. The messages and the stack trace may lead -you to think that this is something to do with the UIWebView/WKWebView that you are using, but it is not. +https://github.com/petermetz/cordova-plugin-ibeacon/issues/310#issuecomment-329564186 diff --git a/README.md b/README.md index 79e78145..c7b2ab90 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,16 @@ * Ranging * Monitoring - + #### Features exclusive to iOS * Region Monitoring (or geo fencing), works in all app states. * Advertising device as an iBeacon +#### Features exclusive to Android + * ARMA filter for distance calculations + * Disable request for bluetooth permissions + ### Installation ``` @@ -54,6 +58,8 @@ On iOS 8, you have to request permissions from the user of your app explicitly. See the [LocationManager](https://github.com/petermetz/cordova-plugin-ibeacon/blob/master/www/LocationManager.js)'s related methods: ```requestWhenInUseAuthorization``` and ```requestAlwaysAuthorization``` for further details. +In order to use Advertising (e.g ```startAdvertising```), the iOS-Capability "Location updates" is required. (set in Xcode -> [your Target] -> Capabilities -> Background Modes -> Location updates) + #### Standard [CLLocationManager](https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html) functions @@ -127,7 +133,7 @@ cordova.plugins.locationManager.requestWhenInUseAuthorization(); // or cordova.plugins.locationManager.requestAlwaysAuthorization() cordova.plugins.locationManager.startMonitoringForRegion(beaconRegion) - .fail(console.error) + .fail(function(e) { console.error(e); }) .done(); ``` @@ -142,7 +148,7 @@ var major = 5; var beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid, major, minor); cordova.plugins.locationManager.stopMonitoringForRegion(beaconRegion) - .fail(console.error) + .fail(function(e) { console.error(e); }) .done(); ``` @@ -183,8 +189,6 @@ delegate.didRangeBeaconsInRegion = function (pluginResult) { logToDom('[DOM] didRangeBeaconsInRegion: ' + JSON.stringify(pluginResult)); }; - - var uuid = '00000000-0000-0000-0000-000000000000'; var identifier = 'beaconOnTheMacBooksShelf'; var minor = 1000; @@ -198,7 +202,7 @@ cordova.plugins.locationManager.requestWhenInUseAuthorization(); // or cordova.plugins.locationManager.requestAlwaysAuthorization() cordova.plugins.locationManager.startRangingBeaconsInRegion(beaconRegion) - .fail(console.error) + .fail(function(e) { console.error(e); }) .done(); ``` @@ -212,7 +216,7 @@ var major = 5; var beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid, major, minor); cordova.plugins.locationManager.stopRangingBeaconsInRegion(beaconRegion) - .fail(console.error) + .fail(function(e) { console.error(e); }) .done(); ``` @@ -224,7 +228,7 @@ cordova.plugins.locationManager.isAdvertisingAvailable() .then(function(isSupported){ console.log("isSupported: " + isSupported); }) - .fail(console.error) + .fail(function(e) { console.error(e); }) .done(); ``` @@ -236,7 +240,7 @@ cordova.plugins.locationManager.isAdvertising() .then(function(isAdvertising){ console.log("isAdvertising: " + isAdvertising); }) - .fail(console.error) + .fail(function(e) { console.error(e); }) .done(); ``` @@ -271,13 +275,13 @@ cordova.plugins.locationManager.isAdvertisingAvailable() if (isSupported) { cordova.plugins.locationManager.startAdvertising(beaconRegion) - .fail(conole.error) + .fail(console.error) .done(); } else { console.log("Advertising not supported"); } }) - .fail(console.error) + .fail(function(e) { console.error(e); }) .done(); ``` @@ -285,7 +289,7 @@ cordova.plugins.locationManager.isAdvertisingAvailable() ##### Stopping the advertising (iOS only) ``` cordova.plugins.locationManager.stopAdvertising() - .fail(console.error) + .fail(function(e) { console.error(e); }) .done(); ``` @@ -302,17 +306,83 @@ cordova.plugins.locationManager.isBluetoothEnabled() cordova.plugins.locationManager.enableBluetooth(); } }) - .fail(console.error) + .fail(function(e) { console.error(e); }) .done(); ``` +##### Specify wildcard UUID (Android only) + +```javascript +var uuid = cordova.plugins.locationManager.BeaconRegion.WILDCARD_UUID; //wildcard +var identifier = 'SomeIdentifier'; +var major = undefined; +var minor = undefined; +var beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid, major, minor); + +var logToDom = function (message) { + console.warn(message); +}; + +var delegate = new cordova.plugins.locationManager.Delegate(); + +delegate.didDetermineStateForRegion = function (pluginResult) { + + logToDom('[DOM] didDetermineStateForRegion: ' + JSON.stringify(pluginResult)); + + cordova.plugins.locationManager.appendToDeviceLog('[DOM] didDetermineStateForRegion: ' + + JSON.stringify(pluginResult)); +}; + +delegate.didStartMonitoringForRegion = function (pluginResult) { + console.log('didStartMonitoringForRegion:', pluginResult); + + logToDom('didStartMonitoringForRegion:' + JSON.stringify(pluginResult)); +}; + +delegate.didRangeBeaconsInRegion = function (pluginResult) { + logToDom('[DOM] didRangeBeaconsInRegion: ' + JSON.stringify(pluginResult)); +}; + +cordova.plugins.locationManager.setDelegate(delegate); + +cordova.plugins.locationManager.startMonitoringForRegion(beaconRegion) + .fail(function(e) { console.error(e); }) + .done(); + +``` + +##### Enable ARMA filter for distance calculations (Android only) + +The underlying library uses the moving average to calculate distance by default, but an ARMA filter can be enabled which will weigh more recent measurements higher than older measurements. It can be enabled by adding the following preference to your `config.xml` file: + +`````` + +#### Disable request for bluetooth permission +By default, this library requests the user for bluetooth permissions when the app starts. If you would like to request permission in a different way or at a different time, set the following preference in your `config.xml` file. + +`````` + + ## Contributions > Contributions are welcome at all times, please make sure that the tests are running without errors > before submitting a pull request. The current development branch that you should submit your pull requests against is > "v3.x" branch. +This project uses [commitlint](https://github.com/conventional-changelog/commitlint#what-is-commitlint), please ensure all commit messages pass commitlint before submitting a pull request. + +### Release checklist + +* `CHANGELOG.md` list meaningful changes since last release, use the format of `git log --pretty=oneline --abbrev-commit` +* `package.json` bump the version +* `plugin.xml` bump the version +* Publish to both npm packages (due to historical reasons) + * `$ npm publish` (this publishes under `com.unarin.cordova.beacon` in npm) + * Edit `name` property in the `package.json` file from `com.unarin.cordova.beacon` to `cordova-plugin-ibeacon` (do not commit the change) + * `$ npm publish` again to publish under the legacy package name as well + * revert the change you just did in `package.json` + ### How to execute the tests - OS X #### Prerequisites Of The Test Runner diff --git a/libs/android/altbeacon.jar b/libs/android/altbeacon.jar deleted file mode 100644 index e6135574da942052d14c864f9312536b0e222e88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146076 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 CTBc|K diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..d65d81bc --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1542 @@ +{ + "name": "com.unarin.cordova.beacon", + "version": "3.6.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@commitlint/cli": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-7.6.1.tgz", + "integrity": "sha512-HEJwQ/aK0AOcAwn77ZKbb/GZhlGxBSPhtVp07uoJFVqM12l2Ia2JHA+MTpfHCFdVahKyYGREZgxde6LyKyG8aQ==", + "dev": true, + "requires": { + "@commitlint/format": "^7.6.1", + "@commitlint/lint": "^7.6.0", + "@commitlint/load": "^7.6.1", + "@commitlint/read": "^7.6.0", + "babel-polyfill": "6.26.0", + "chalk": "2.3.1", + "get-stdin": "7.0.0", + "lodash": "4.17.11", + "meow": "5.0.0", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0" + } + }, + "@commitlint/config-conventional": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-7.0.1.tgz", + "integrity": "sha1-J2l3+O5g2MVtf91DKWr3bf7ptfc=", + "dev": true + }, + "@commitlint/ensure": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-7.6.0.tgz", + "integrity": "sha512-pSUrNud5L/8y+cLWo3LEa8Ce4bAAR33xMderFUhuNPHj7TwpNS7L4ROMnhL4ZlCYRazCRDlnPaJLPikMoWThfA==", + "dev": true, + "requires": { + "lodash": "4.17.11" + } + }, + "@commitlint/execute-rule": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-7.6.0.tgz", + "integrity": "sha512-0inGOIlLefPDtiDOaZ6WoE1p+GEZZIj2VwUftUozD3C71TiwP9UfKAVVtUDFPIeL6RgSqCkCf7zsy6NKNxwkBg==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "@commitlint/format": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-7.6.1.tgz", + "integrity": "sha512-Ldzf5N2Sr9RQqvlYwaQn4vz1WOZ7byYinspC/WCrbfcETGy28j7QE4OueZU6nNB9TjwwEorKm13uy7tDWPR7dg==", + "dev": true, + "requires": { + "babel-runtime": "^6.23.0", + "chalk": "^2.0.1" + } + }, + "@commitlint/is-ignored": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-7.6.0.tgz", + "integrity": "sha512-By/mLNhz+6Rtix9+Kyof1gdKiELchAnQHpdeKIHIOe9sjbvd3HqDoFHh/mGMMRnGIPMZOX5TO8Fqy3A/2HqlTw==", + "dev": true, + "requires": { + "semver": "6.0.0" + } + }, + "@commitlint/lint": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-7.6.0.tgz", + "integrity": "sha512-aUIFX0lPRZL7WmT8W8qzogJD4LmHk6JPG3XUAX+K0pOHGjC/0ALvSAytvoLXy4fvmSnGJkXmWhzSW7c0Spa14Q==", + "dev": true, + "requires": { + "@commitlint/is-ignored": "^7.6.0", + "@commitlint/parse": "^7.6.0", + "@commitlint/rules": "^7.6.0", + "babel-runtime": "^6.23.0", + "lodash": "4.17.11" + } + }, + "@commitlint/load": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-7.6.2.tgz", + "integrity": "sha512-I+xk+BkXAG1roXNrPsR1eOd5hEa+oLc6HLYnHAT/HLGKKB3E01IGg3O5SGlg7lpf1yiAaYI+wAnNTr3f3sIbWQ==", + "dev": true, + "requires": { + "@commitlint/execute-rule": "^7.6.0", + "@commitlint/resolve-extends": "^7.6.0", + "babel-runtime": "^6.23.0", + "cosmiconfig": "^5.2.0", + "lodash": "4.17.11", + "resolve-from": "^5.0.0" + } + }, + "@commitlint/message": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-7.6.0.tgz", + "integrity": "sha512-PtP4jhBYGXLaQQC5jel+RQczG2tS3Cy6rRxQioUfCUaEg/LV029ao/KcL1kHEBJ8hSW/SUmnvDaD9Y6nozLQMA==", + "dev": true + }, + "@commitlint/parse": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-7.6.0.tgz", + "integrity": "sha512-1x60kTqz2VBCjYE+8MV5BhE+ShPo7MgVlrMWSlxiiJDWP5CvWa+SBbUayDJ7rtOXimjTASZ9ZNZTuFPdJE/Y7A==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^1.3.3", + "conventional-commits-parser": "^2.1.0", + "lodash": "^4.17.11" + } + }, + "@commitlint/read": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-7.6.0.tgz", + "integrity": "sha512-OyligtK/e4xnQklrQqTcSMM27eNhq+LqXfoeVouuPx059oDEw9wZYNN4HGzyxs4Pb6GdMpzRHLdeMQ24M+AiYw==", + "dev": true, + "requires": { + "@commitlint/top-level": "^7.6.0", + "@marionebl/sander": "^0.6.0", + "babel-runtime": "^6.23.0", + "git-raw-commits": "^1.3.0" + } + }, + "@commitlint/resolve-extends": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-7.6.0.tgz", + "integrity": "sha512-fk8KvNiEbRc+p8nPFuysVP2O95+sb8vlIDTjqtGVObqrzFINRfERXwqBmTBtcu556BoDAR2hwRVXmuwhns+Duw==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "import-fresh": "^3.0.0", + "lodash": "4.17.11", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + } + }, + "@commitlint/rules": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-7.6.0.tgz", + "integrity": "sha512-shLJdMUwdVeE5UgOE8E+c+PFS7+0FFGfheMa3s6ZK+xX8pTUxseXZu9iCF4mwF+WWkVk518xPuNLvmYE96salQ==", + "dev": true, + "requires": { + "@commitlint/ensure": "^7.6.0", + "@commitlint/message": "^7.6.0", + "@commitlint/to-lines": "^7.6.0", + "babel-runtime": "^6.23.0" + } + }, + "@commitlint/to-lines": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-7.6.0.tgz", + "integrity": "sha512-L/Vl5ThRuBHnSNZBtc+p2LCs2ayxWodC+I/X3NKUywSmr6kKpJJCFqHHHqPu+yXwGUPwqCMQhogIGLuv9TtWWw==", + "dev": true + }, + "@commitlint/top-level": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-7.6.0.tgz", + "integrity": "sha512-R2RzJZDuT2TU2dZMrRd7olax5IDVcUB/O8k76d1LW13CQ9/2ArJi3TCFXSZIaGpCUnyAYA5KiCZ+c1opnyQuog==", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "@marionebl/sander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@marionebl/sander/-/sander-0.6.1.tgz", + "integrity": "sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.2.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "compare-func": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", + "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^3.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "conventional-changelog-angular": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", + "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "q": "^1.5.1" + } + }, + "conventional-commits-parser": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz", + "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.0", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0", + "trim-off-newlines": "^1.0.0" + }, + "dependencies": { + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + } + } + } + }, + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz", + "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.0", + "parse-json": "^4.0.0" + }, + "dependencies": { + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dargs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", + "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "git-raw-commits": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", + "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==", + "dev": true, + "requires": { + "dargs": "^4.0.1", + "lodash.template": "^4.0.2", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0" + }, + "dependencies": { + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + } + } + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "husky": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-2.2.0.tgz", + "integrity": "sha512-lG33E7zq6v//H/DQIojPEi1ZL9ebPFt3MxUMD8MR0lrS2ljEPiuUUxlziKIs/o9EafF0chL7bAtLQkcPvXmdnA==", + "dev": true, + "requires": { + "cosmiconfig": "^5.2.0", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^7.0.0", + "is-ci": "^2.0.0", + "pkg-dir": "^4.1.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^5.0.0", + "run-node": "^1.0.0", + "slash": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "read-pkg": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz", + "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^4.0.0", + "type-fest": "^0.4.1" + } + } + } + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.template": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", + "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "dev": true, + "requires": { + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", + "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "dev": true, + "requires": { + "lodash._reinterpolate": "~3.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pkg-dir": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.1.0.tgz", + "integrity": "sha512-55k9QN4saZ8q518lE6EFgYiu95u3BWkSajCifhdQjvLvmr8IpnRbhI+UGpWJQfa0KzDguHeeWT1ccO1PmkOi3A==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "please-upgrade-node": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", + "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "resolve": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "requires": { + "global-dirs": "^0.1.1" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "dev": true + }, + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "dev": true, + "requires": { + "through2": "^2.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true + }, + "type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } +} diff --git a/package.json b/package.json index da557ad2..92fe28a4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.unarin.cordova.beacon", - "version": "3.4.1", + "version": "3.8.2", "description": "Proximity Beacon Monitoring and Transmission Plugin (supporting iBeacons)", "cordova": { "id": "com.unarin.cordova.beacon", @@ -11,7 +11,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/petermetz/cordova-plugin-ibeacon.git" + "url": "https://github.com/petermetz/cordova-plugin-ibeacon.git" }, "keywords": [ "cordova", @@ -23,10 +23,25 @@ "cordova-ios", "cordova-android" ], + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, "author": "Peter Metz (Somogyvari) ", "license": "Apache 2.0", "bugs": { "url": "https://github.com/petermetz/cordova-plugin-ibeacon/issues" }, - "homepage": "https://github.com/petermetz/cordova-plugin-ibeacon" + "homepage": "https://github.com/petermetz/cordova-plugin-ibeacon", + "devDependencies": { + "@commitlint/cli": "^7.6.1", + "@commitlint/config-conventional": "^7.0.1", + "husky": "^2.2.0" + }, + "husky": { + "hooks": { + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + } } diff --git a/plugin.xml b/plugin.xml index 6f34877e..f70bbfd1 100644 --- a/plugin.xml +++ b/plugin.xml @@ -1,5 +1,5 @@ - + Proximity Beacon Plugin Proximity Beacon Monitoring and Transmission Plugin (supporting iBeacons) @@ -7,15 +7,20 @@ cordova,ibeacon,beacon,bluetooth,le https://github.com/petermetz/cordova-plugin-ibeacon.git + + + - + - + @@ -46,20 +51,25 @@ - + - + This app would like to scan for iBeacons even when in the background. This app would like to scan for iBeacons while it is in use. - + + This app would like to scan for iBeacons. + + + This app would like to scan for iBeacons both while in use and while in the background. + @@ -83,42 +93,16 @@ - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/src/android/LocationManager.java b/src/android/LocationManager.java index 9f825fb0..0d3c97f1 100644 --- a/src/android/LocationManager.java +++ b/src/android/LocationManager.java @@ -42,11 +42,19 @@ Licensed to the Apache Software Foundation (ASF) under one import org.altbeacon.beacon.BeaconConsumer; import org.altbeacon.beacon.BeaconManager; import org.altbeacon.beacon.BeaconParser; + +import org.altbeacon.beacon.BeaconTransmitter; +import android.bluetooth.le.AdvertiseCallback; +import android.bluetooth.le.AdvertiseSettings; + import org.altbeacon.beacon.BleNotAvailableException; import org.altbeacon.beacon.Identifier; import org.altbeacon.beacon.MonitorNotifier; import org.altbeacon.beacon.RangeNotifier; import org.altbeacon.beacon.Region; +import org.altbeacon.beacon.service.RunningAverageRssiFilter; +import org.altbeacon.beacon.service.ArmaRssiFilter; +import org.altbeacon.beacon.service.RangedBeacon; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaInterface; import org.apache.cordova.CordovaPlugin; @@ -70,10 +78,19 @@ public class LocationManager extends CordovaPlugin implements BeaconConsumer { public static final String TAG = "com.unarin.beacon"; private static final int PERMISSION_REQUEST_COARSE_LOCATION = 1; private static final String FOREGROUND_BETWEEN_SCAN_PERIOD_NAME = "com.unarin.cordova.beacon.android.altbeacon.ForegroundBetweenScanPeriod"; + private static final String FOREGROUND_SCAN_PERIOD_NAME = "com.unarin.cordova.beacon.android.altbeacon.ForegroundScanPeriod"; private static final int DEFAULT_FOREGROUND_BETWEEN_SCAN_PERIOD = 0; + private static final String SAMPLE_EXPIRATION_MILLISECOND = "com.unarin.cordova.beacon.android.altbeacon.SampleExpirationMilliseconds"; + private static final int DEFAULT_SAMPLE_EXPIRATION_MILLISECOND = 20000; + private static final String ENABLE_ARMA_FILTER_NAME = "com.unarin.cordova.beacon.android.altbeacon.EnableArmaFilter"; + private static final boolean DEFAULT_ENABLE_ARMA_FILTER = false; + private static final String REQUEST_BT_PERMISSION_NAME = "com.unarin.cordova.beacon.android.altbeacon.RequestBtPermission"; + private static final boolean DEFAULT_REQUEST_BT_PERMISSION = true; + private static final int DEFAULT_FOREGROUND_SCAN_PERIOD = 1100; private static int CDV_LOCATION_MANAGER_DOM_DELEGATE_TIMEOUT = 30; private static final int BUILD_VERSION_CODES_M = 23; + private BeaconTransmitter beaconTransmitter; private BeaconManager iBeaconManager; private BlockingQueue queue; private PausableThreadPoolExecutor threadPoolExecutor; @@ -107,11 +124,33 @@ public void initialize(CordovaInterface cordova, CordovaWebView webView) { final int foregroundBetweenScanPeriod = this.preferences.getInteger( FOREGROUND_BETWEEN_SCAN_PERIOD_NAME, DEFAULT_FOREGROUND_BETWEEN_SCAN_PERIOD); - Log.i(TAG, "Determined config value FOREGROUND_BETWEEN_SCAN_PERIOD: " + - String.valueOf(foregroundBetweenScanPeriod)); + final int foregroundScanPeriod = this.preferences.getInteger( + FOREGROUND_SCAN_PERIOD_NAME, DEFAULT_FOREGROUND_SCAN_PERIOD); + + Log.i(TAG, "Determined config value FOREGROUND_SCAN_PERIOD: " + + String.valueOf(foregroundScanPeriod)); iBeaconManager = BeaconManager.getInstanceForApplication(cordovaActivity); iBeaconManager.setForegroundBetweenScanPeriod(foregroundBetweenScanPeriod); + iBeaconManager.setForegroundScanPeriod(foregroundScanPeriod); + + final int sampleExpirationMilliseconds = this.preferences.getInteger( + SAMPLE_EXPIRATION_MILLISECOND, DEFAULT_SAMPLE_EXPIRATION_MILLISECOND); + + Log.i(TAG, "Determined config value SAMPLE_EXPIRATION_MILLISECOND: " + + String.valueOf(sampleExpirationMilliseconds)); + + final boolean enableArmaFilter = this.preferences.getBoolean( + ENABLE_ARMA_FILTER_NAME, DEFAULT_ENABLE_ARMA_FILTER); + + if(enableArmaFilter){ + iBeaconManager.setRssiFilterImplClass(ArmaRssiFilter.class); + } + else{ + iBeaconManager.setRssiFilterImplClass(RunningAverageRssiFilter.class); + RunningAverageRssiFilter.setSampleExpirationMilliseconds(sampleExpirationMilliseconds); + } + RangedBeacon.setSampleExpirationMilliseconds(sampleExpirationMilliseconds); initBluetoothListener(); initEventQueue(); @@ -126,7 +165,11 @@ public void initialize(CordovaInterface cordova, CordovaWebView webView) { } //TODO AddObserver when page loaded - tryToRequestMarshmallowLocationPermission(); + final boolean requestPermission = this.preferences.getBoolean( + REQUEST_BT_PERMISSION_NAME, DEFAULT_REQUEST_BT_PERMISSION); + + if(requestPermission) + tryToRequestMarshmallowLocationPermission(); } /** @@ -155,7 +198,7 @@ public void onDestroy() { * @param callbackContext The callback id used when calling back into JavaScript. * @return True if the action was valid, false if not. */ - public boolean execute(String action, JSONArray args, CallbackContext callbackContext) { + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if (action.equals("onDomDelegateReady")) { onDomDelegateReady(callbackContext); } else if (action.equals("disableDebugNotifications")) { @@ -199,7 +242,7 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo } else if (action.equals("isAdvertising")) { isAdvertising(callbackContext); } else if (action.equals("startAdvertising")) { - startAdvertising(args.optJSONObject(0), callbackContext); + startAdvertising(args, callbackContext); } else if (action.equals("stopAdvertising")) { stopAdvertising(callbackContext); } else if (action.equals("isBluetoothEnabled")) { @@ -221,6 +264,16 @@ private void initLocationManager() { iBeaconManager.bind(this); } + private BeaconTransmitter createOrGetBeaconTransmitter() { + if (this.beaconTransmitter == null) { + final BeaconParser beaconParser = new BeaconParser() + .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"); + + this.beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser); + } + return this.beaconTransmitter; + } + @TargetApi(BUILD_VERSION_CODES_M) private void tryToRequestMarshmallowLocationPermission() { @@ -1089,9 +1142,16 @@ private void isAdvertisingAvailable(CallbackContext callbackContext) { public PluginResult run() { //not supported at Android yet (see Android L) - PluginResult result = new PluginResult(PluginResult.Status.OK, false); - result.setKeepCallback(true); - return result; + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + // only for ANDROID >= 5.0 + PluginResult result = new PluginResult(PluginResult.Status.OK, true); + result.setKeepCallback(true); + return result; + }else{ + PluginResult result = new PluginResult(PluginResult.Status.OK, false); + result.setKeepCallback(true); + return result; + } } }); @@ -1114,14 +1174,82 @@ public PluginResult run() { } - private void startAdvertising(JSONObject arguments, CallbackContext callbackContext) { + private void startAdvertising(final JSONArray args, CallbackContext callbackContext) throws JSONException { + debugLog("Advertisement start START BEACON "); + debugLog(args.toString(4)); + /* + Advertisement start START BEACON + [ + { + "identifier": "beaconAsMesh", + "uuid": "e80300fe-ff4b-0c37-5149-d9f394b5ca39", + "major": 0, + "minor": 30463, + "notifyEntryStateOnDisplay": true, + "typeName": "BeaconRegion" + }, + 7 + ] + */ + + JSONObject arguments = args.optJSONObject(0); // get first object + String identifier = arguments.getString("identifier"); + + //For Android, uuid can be null when scanning for all beacons (I think) + final String uuid = arguments.has("uuid") && !arguments.isNull("uuid") ? arguments.getString("uuid") : null; + final String major = arguments.has("major") && !arguments.isNull("major") ? arguments.getString("major") : null; + final String minor = arguments.has("minor") && !arguments.isNull("minor") ? arguments.getString("minor") : null; + + // optinal second member in JSONArray is just a number + final int measuredPower = args.length() > 1 ? args.getInt(1) : -55; + + if (major == null && minor != null) + throw new UnsupportedOperationException("Unsupported combination of 'major' and 'minor' parameters."); _handleCallSafely(callbackContext, new ILocationManagerCommand() { @Override public PluginResult run() { + debugLog("Advertisement start STEP Beacon.Builder "); + + Beacon beacon = new Beacon.Builder() + .setId1(uuid) // UUID for beacon + .setId2(major) // Major for beacon + .setId3(minor) // Minor for beacon + .setManufacturer(0x004C) // Radius Networks.0x0118 Change this for other beacon layouts//0x004C for iPhone + .setTxPower(measuredPower) // Power in dB + .setDataFields(Arrays.asList(new Long[] {0l})) // Remove this for beacon layouts without d: fields + .build(); + debugLog("[DEBUG] Beacon.Builder: "+beacon); + /* + Beacon beacon = new Beacon.Builder() + .setId1("00000000-2016-0000-0000-000000000000") // UUID for beacon + .setId2("5") // Major for beacon + .setId3("2000") // Minor for beacon + .setManufacturer(0x004C) // Radius Networks.0x0118 Change this for other beacon layouts//0x004C for iPhone + .setTxPower(-56) // Power in dB + .setDataFields(Arrays.asList(new Long[] {0l})) // Remove this for beacon layouts without d: fields + .build(); + */ + debugLog("Advertisement start STEP BeaconParser "); + + debugLog("Advertisement start STEP BeaconTransmitter "); + final BeaconTransmitter beaconTransmitter = LocationManager.this.createOrGetBeaconTransmitter(); + + debugLog("[DEBUG] BeaconTransmitter: "+beaconTransmitter); + beaconTransmitter.startAdvertising(beacon, new AdvertiseCallback() { + + @Override + public void onStartFailure(int errorCode) { + debugWarn("Advertisement start failed with code: "+errorCode); + } - //not supported on Android - PluginResult result = new PluginResult(PluginResult.Status.ERROR, "iBeacon Advertising is not supported on Android"); + @Override + public void onStartSuccess(AdvertiseSettings settingsInEffect) { + debugWarn("startAdvertising start succeeded."); + } + }); + + final PluginResult result = new PluginResult(PluginResult.Status.OK, false); result.setKeepCallback(true); return result; } @@ -1135,8 +1263,13 @@ private void stopAdvertising(CallbackContext callbackContext) { @Override public PluginResult run() { + debugInfo("LocationManager::stopAdvertising::STOPPING..."); + final BeaconTransmitter beaconTransmitter = LocationManager.this.createOrGetBeaconTransmitter(); + beaconTransmitter.stopAdvertising(); + debugInfo("LocationManager::stopAdvertising::DONE"); + //not supported on Android - PluginResult result = new PluginResult(PluginResult.Status.ERROR, "iBeacon Advertising is not supported on Android"); + PluginResult result = new PluginResult(PluginResult.Status.OK, "iBeacon Advertising stopped."); result.setKeepCallback(true); return result; @@ -1379,6 +1512,11 @@ private void _sendResultOfCommand(CallbackContext callbackContext, PluginResult callbackContext.sendPluginResult(pluginResult); } + private void debugInfo(String message) { + if (debugEnabled) { + Log.i(TAG, message); + } + } private void debugLog(String message) { if (debugEnabled) { Log.d(TAG, message); diff --git a/src/android/cordova-plugin-ibeacon.gradle b/src/android/cordova-plugin-ibeacon.gradle new file mode 100644 index 00000000..a10f90f8 --- /dev/null +++ b/src/android/cordova-plugin-ibeacon.gradle @@ -0,0 +1,14 @@ +repositories{ + jcenter() +} + +dependencies { + implementation 'org.altbeacon:android-beacon-library:2.19.4' +} + +android { + packagingOptions { + exclude 'META-INF/NOTICE' + exclude 'META-INF/LICENSE' + } +} diff --git a/src/ios/CDVLocationManager.m b/src/ios/CDVLocationManager.m index 9d3459eb..10ebd7c0 100644 --- a/src/ios/CDVLocationManager.m +++ b/src/ios/CDVLocationManager.m @@ -37,17 +37,11 @@ - (void)pluginInitialize self.debugLogEnabled = true; self.debugNotificationsEnabled = false; - [self resumeEventPropagationToDom]; // DOM propagation when Location Manager, PeripheralManager initiated } - (void) initLocationManager { self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; - - - if (IsAtLeastiOSVersion(@"9.0")) { - self.locationManager.allowsBackgroundLocationUpdates = YES; - } } - (void) initPeripheralManager { @@ -95,6 +89,7 @@ - (void) checkIfDomSignaldDelegateReady { - (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region { + if (manager != self.locationManager) return; [self.commandDelegate runInBackground:^{ [[self getLogger] debugLog:@"didDetermineState: %@ for region: %@", [self regionStateAsString:state], region]; @@ -113,6 +108,7 @@ - (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegion -(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { + if (manager != self.locationManager) return; [self.queue addOperationWithBlock:^{ [self _handleCallSafely:^CDVPluginResult *(CDVInvokedUrlCommand *command) { @@ -134,6 +130,7 @@ -(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)r -(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region { + if (manager != self.locationManager) return; [self.queue addOperationWithBlock:^{ [self _handleCallSafely:^CDVPluginResult *(CDVInvokedUrlCommand *command) { @@ -155,6 +152,7 @@ -(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)re - (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region { + if (manager != self.locationManager) return; [self.queue addOperationWithBlock:^{ [self _handleCallSafely:^CDVPluginResult *(CDVInvokedUrlCommand *command) { @@ -175,6 +173,7 @@ - (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion - (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error { + if (manager != self.locationManager) return; [self.queue addOperationWithBlock:^{ [self _handleCallSafely:^CDVPluginResult *(CDVInvokedUrlCommand *command) { @@ -196,6 +195,7 @@ - (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion: - (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { + if (manager != self.locationManager) return; NSMutableArray* beaconsMapsArray = [NSMutableArray new]; for (CLBeacon* beacon in beacons) { NSDictionary* dictOfBeacon = [self mapOfBeacon:beacon]; diff --git a/www/model/BeaconRegion.js b/www/model/BeaconRegion.js index c268662c..604839f5 100644 --- a/www/model/BeaconRegion.js +++ b/www/model/BeaconRegion.js @@ -6,9 +6,9 @@ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -22,73 +22,95 @@ var Region = require('com.unarin.cordova.beacon.Region'); /** * Constructor for {CLBeaconRegion}. - * + * * @param {String} identifier @see {CLRegion} - * - * @param {String} uuid The proximity ID of the beacon being targeted. + * + * @param {String} uuid The proximity ID of the beacon being targeted. * This value must not be blank nor invalid as a UUID. - * + * * @param {Number} major The major value that you use to identify one or more beacons. * @param {Number} minor The minor value that you use to identify a specific beacon. * * @param {BOOL} notifyEntryStateOnDisplay - * + * * @returns {BeaconRegion} An instance of {BeaconRegion}. */ function BeaconRegion (identifier, uuid, major, minor, notifyEntryStateOnDisplay){ - // Call the parent constructor, making sure (using Function#call) - // that "this" is set correctly during the call - Region.call(this, identifier); - - BeaconRegion.checkUuid(uuid); - BeaconRegion.checkMajorOrMinor(major); - BeaconRegion.checkMajorOrMinor(minor); - - this.uuid = uuid; + // Call the parent constructor, making sure (using Function#call) + // that "this" is set correctly during the call + Region.call(this, identifier); + + BeaconRegion.checkUuid(uuid); + BeaconRegion.checkMajorOrMinor(major); + BeaconRegion.checkMajorOrMinor(minor); + + // Coerce the wildcard UUID into a value of `undefined` which is the actual wildcard value for the Android Java code + if (uuid === BeaconRegion.WILDCARD_UUID) { + this.uuid = undefined; + } else { + this.uuid = uuid; + } + this.major = major; this.minor = minor; this.notifyEntryStateOnDisplay = notifyEntryStateOnDisplay; - this.typeName = 'BeaconRegion'; + this.typeName = 'BeaconRegion'; }; // Create a BeaconRegion.prototype object that inherits from Region.prototype. // Note: A common error here is to use "new Region()" to create the -// BeaconRegion.prototype. That's incorrect for several reasons, not least -// that we don't have anything to give Region for the "identifier" -// argument. The correct place to call Region is above, where we call +// BeaconRegion.prototype. That's incorrect for several reasons, not least +// that we don't have anything to give Region for the "identifier" +// argument. The correct place to call Region is above, where we call // it from BeaconRegion. BeaconRegion.prototype = Object.create(Region.prototype); // Set the "constructor" property to refer to BeaconRegion BeaconRegion.prototype.constructor = BeaconRegion; +/** + * @public + * @static + * + * Use this property as the value of the `UUID` parameter to express the intent of specifying a wild-card UUID. + */ +BeaconRegion.WILDCARD_UUID = {}; + BeaconRegion.isValidUuid = function (uuid) { - var uuidValidatorRegex = this.getUuidValidatorRegex(); - return uuid.match(uuidValidatorRegex) != null; + + // https://github.com/petermetz/cordova-plugin-ibeacon/issues/328 + // If we are on Android, then allow the UUID to be specified as a wild-card (omitted) + var isAndroid = device && device.platform === "Android"; + if (uuid === BeaconRegion.WILDCARD_UUID && isAndroid) { + return true; + } + + var uuidValidatorRegex = this.getUuidValidatorRegex(); + return uuid.match(uuidValidatorRegex) != null; }; BeaconRegion.getUuidValidatorRegex = function () { - return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; + return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; }; BeaconRegion.checkUuid = function (uuid) { - if (!BeaconRegion.isValidUuid(uuid)) { - throw new TypeError(uuid + ' is not a valid UUID'); - } + if (!BeaconRegion.isValidUuid(uuid)) { + throw new TypeError(uuid + ' is not a valid UUID'); + } }; BeaconRegion.checkMajorOrMinor = function (majorOrMinor) { - if (!_.isUndefined(majorOrMinor)) { - if (!_.isFinite(majorOrMinor)) { - throw new TypeError(majorOrMinor + ' is not a finite value'); - } - - if (majorOrMinor > BeaconRegion.U_INT_16_MAX_VALUE || - majorOrMinor < BeaconRegion.U_INT_16_MIN_VALUE) { - throw new TypeError(majorOrMinor + ' is out of valid range of values.'); - } - } + if (!_.isUndefined(majorOrMinor)) { + if (!_.isFinite(majorOrMinor)) { + throw new TypeError(majorOrMinor + ' is not a finite value'); + } + + if (majorOrMinor > BeaconRegion.U_INT_16_MAX_VALUE || + majorOrMinor < BeaconRegion.U_INT_16_MIN_VALUE) { + throw new TypeError(majorOrMinor + ' is out of valid range of values.'); + } + } }; BeaconRegion.U_INT_16_MAX_VALUE = (1 << 16) - 1;