Changelog
Source:NEWS.md
pslr 1.0.2
Internal
- Dropped the redundant
strict = TRUEargument frompunycoder::host_normalize()calls.punycoderremoved the inertstrictflag in favour of explicit UTS #46 flags (all defaulting to the strict profile), so the bare call is behavior-preserving and forward-compatible with that release. No user-visible change; this keepspslrinstallable against the upcomingpunycoderrelease.
pslr 1.0.1
Launch-readiness audit follow-ups (no API changes).
-
suffix_extract(output = "unicode")no longer turns an empty subdomain intoNA. An absent subdomain is reported as""for both"ascii"and"unicode"output, matching the documented schema. - Choice-style option arguments (
section,output,unknown,invalid, andpsl_use()’ssource) now abort when a caller supplies a non-scalar value, even one that happens to equal the formal’s default vector (e.g.invalid = c("na", "error")). Previously such a call was mistaken for the untouched default and silently used the first choice. Omitted options still default to their first choice. - A corrupt cache marker (
current.rds) is now handled gracefully instead of leaking a rawreadRDS()“unknown input format” error.psl_refresh(force = TRUE)ignores an unreadable marker and republishes a valid cache, andpsl_use("cache")reports a pslr cache-corruption error with remediation. - PSL sources with a repeated ICANN or PRIVATE section are now rejected. The official format carries exactly one complete section of each; a second
BEGINfor either aborts the parse instead of loading both copies. - A zero-length non-character
domain(e.g.numeric(0),NULL) now aborts with the documented type error instead of being silently coerced to an empty result. This is consistent with the input contract: a wrong argument type is a programming error regardless of length. The valid empty character vectorcharacter(0)still returns a zero-length result.
pslr 1.0.0
First public release: a spec-complete Public Suffix List engine for R.
- Bundled the Public Suffix List snapshot pinned to upstream commit
9186eee(list date 2026-06-13), with a deterministicdata-raw/regeneration script, an internal validated rule index, generation metadata (commit, source URL, checksum, normalization profile, Unicode version), and MPL-2.0 data licensing separate from the package’s MIT code license. - Added the public query API:
public_suffix(),registrable_domain(),is_public_suffix(),suffix_extract(), andpublic_suffix_rule(). All are vectorised, length- and name-preserving, NA-safe, and share thesection/output/unknown/invalidpolicies. Input is canonicalized throughpunycoderwith terminal-dot preservation and dotted-decimal IPv4 literal rejection, and repeated queries are served from a bounded session cache keyed by host, active-list identity, and section. - Added refresh and activation:
psl_refresh(),psl_use(),psl_version(), andpsl_rules().psl_refresh()is the only network path – an explicit, https-only, credential- and downgrade-redirect-rejecting download with a size ceiling, full validation, a 24-hour reuse throttle, and an atomic cache publish that never exposes a partial snapshot or replaces a valid cache after a failed refresh.psl_use()switches the session’s active list between the bundled snapshot, the user cache, and a custom path, validating before any state changes and clearing the result cache on a successful switch. The bundled index is rebuilt in memory from source when its normalization profile or Unicode version differs from the runtime normalizer, never mixing profiles.psl_version()reports the active-list identity and runtime normalization identifiers needed to reproduce a result;psl_rules()exposes the active rule table. - Canonical-host deduplication: a repeated host costs a single
punycodernormalization and a single C++ matcher call regardless of multiplicity. A non-CRAN benchmark and its release gate live inbench/benchmark.R.