=============== # NSR 0.1.1 =============== ## NEW FEATURES * NSR_from_coordinates(), added during this release cycle to check native status from species names and coordinates, is deprecated and not exported: the separate coordinates service it calls is offline. For native status by coordinates use NSR_local(use_coordinates = TRUE). The function is kept, as NSR:::NSR_from_coordinates(), for when the service returns; it now reports an unreachable service in a message and returns NULL instead of stopping with an error, and its address can be set with options(NSR.coordinates_url = "https://..."). * Added an offline implementation: NSR_local() answers without an internet connection from a local cache built by NSR_local_build(), with NSR_local_status(), NSR_local_remove() and NSR_local_by_region() alongside it. The checklist sources are acquired on the user's machine; nothing derived ships with the package. The offline path needs data.table, nanoparquet, terra, sf and TNRS, all of which are Suggests. * NSR_local() gains exclude_extinct (default TRUE). WCVP flags a distribution extinct without a date, so the cache keeps those records and the query decides: the default answers about the present day, FALSE models a past distribution. Either way a region a taxon has been lost from stays part of its native range, so such a record is reported absent rather than introduced. * NSR_local() answers from political division names by default. Coordinates are echoed but not used unless use_coordinates = TRUE: placing every record by point costs a raster lookup per call, and turning coordinates into political divisions is what GVS already does. * Where a record gives both coordinates and division names and the two resolve to different places, NSR_local() no longer pools them. Neither is treated as authoritative: place_conflict flags the record, native_status is UNK, and the two bases are answered separately in native_status_coordinates and native_status_names. ## Bug fixes * NSR_metadata() stopped with an error ("'names' attribute [3] must be the same length as the vector [0]") when the NSR API could not be reached, which broke the package's examples and vignette on CRAN's Windows check machines and led to its archival. It now gives a message and returns NULL, like the package's other API functions. Tests now put every exported API function through an unreachable API, an HTTP error and an empty reply, with the request mocked. * NSR_metadata() had its sources and version elements named the wrong way round: metadata$version held the sources and metadata$sources the version. * NSR() sent any input in a single request, although the API accepts at most 5,000 records per call. Larger inputs are now sent in batches of up to 5,000 and the results recombined in input order; if any batch fails, NSR() returns NULL with a message, as it does for a single failed request. =============== # NSR 0.1.0 =============== ## NEW FEATURES * CRAN release ## Bug fixes