Skip to content

Releases: bart-turczynski/pslr

pslr 1.0.2

Choose a tag to compare

@bart-turczynski bart-turczynski released this 27 Jun 19:36
c6639ad

pslr 1.0.2

Internal

  • Dropped the redundant strict = TRUE argument from punycoder::host_normalize()
    calls. punycoder removed the inert strict flag 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 keeps pslr installable against the upcoming punycoder release.
  • Refactored psl_canonicalize(), parse_psl_lines(), the core matcher
    resolution, and psl_refresh()/psl_use() into smaller helpers to clear
    goodpractice cyclomatic-complexity and function-length findings. Pure
    internal restructuring; no behavior or API change.

pslr 1.0.1

Choose a tag to compare

@bart-turczynski bart-turczynski released this 22 Jun 15:11
cd3591a

Maintenance release — launch-readiness audit follow-ups, no API changes. Now available on CRAN: install.packages("pslr").

Fixes

  • suffix_extract(output = "unicode") no longer turns an empty subdomain into NA. An absent subdomain is reported as "" for both "ascii" and "unicode" output, matching the documented schema.
  • Choice-style option arguments (section, output, unknown, invalid, and psl_use()'s source) 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 raw readRDS() error. psl_refresh(force = TRUE) ignores an unreadable marker and republishes a valid cache, and psl_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 BEGIN for 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. The valid empty character vector character(0) still returns a zero-length result.

pslr 1.0.0

Choose a tag to compare

@bart-turczynski bart-turczynski released this 15 Jun 18:48
01e27f6

First public release of pslr, a focused, spec-complete Public Suffix List engine for R.

Highlights

  • Public-suffix (eTLD) and registrable-domain (eTLD+1) queries via the official prevailing-rule algorithm (exception > longest match > implicit default), compiled with cpp11 — no external system library.
  • ICANN / PRIVATE sections with section filtering applied before rule selection.
  • Unicode, ASCII, and A-label input, with ASCII or Unicode output, canonicalized through punycoder.
  • Bundled pinned snapshot (works fully offline) plus an explicit, HTTPS-only, validated psl_refresh() — the only network path.
  • Reproducibility metadata via psl_version() (list provenance + runtime normalization identifiers).
  • Canonical-host deduplication: a repeated host costs one normalization and one C++ call regardless of multiplicity.

API

public_suffix(), registrable_domain(), is_public_suffix(), suffix_extract(), public_suffix_rule(), psl_use(), psl_refresh(), psl_version(), psl_rules().

Quality

R CMD check --as-cran: 0 errors, 0 warnings, 1 expected note. All PRD §11 v1 acceptance gates pass (see docs/acceptance-v1.md). Performance gate: 100k-host ASCII query in ~0.94s (≤ 2s).

See vignette("introduction", package = "pslr") for the full tour.

🤖 Generated with Claude Code