Skip to content

rune v0.1.9

Choose a tag to compare

@kaen25 kaen25 released this 28 Aug 08:39
· 47 commits to main since this release

rune 0.1.9

rune: 0.1.9

016649d

Describe mobile() as it actually behaves

The doc-comments claimed rune carries no per-locale numbering plans and that
mobile() takes no locale. It carries 41 and has taken a locale since; an
unknown one raises UNSUPPORTED_LOCALE naming the ones it knows.

648a267

rune: fail loud without the Rust engine, plus the missing VineJS surface

  • assertNativeAvailable() throws RuneNativeRequiredError on the path a schema
    WOULD have run natively. A one-time warning used to let the TypeScript
    validator take over, so the same code could reach different verdicts on two
    machines — the code said so itself: "validation is platform-dependent". The
    TypeScript path stays only for what the engine cannot do (custom rules, a
    translator, a messages provider), where it is the only implementation
  • union().otherwise(cb): the name existed but aliased the else BRANCH FACTORY,
    so the documented union([...]).otherwise(cb) was "not a function"
  • record().validateKeys(cb), enum(cb) computed per validation, and getChoices()
  • RuleDef.validate receives the field context, built lazily. That also fixed
    in()/notIn(), whose callback form took NO argument where VineJS passes the
    field — a migrated in((field) => ...) read undefined
  • email({ allow_display_name }) parsed the display name with a pattern where
    \s* and [^<>@]*? could both claim a space, so N spaces had N splits and the
    engine tried them all: measured cubic, 8 KB of spaces blocking the event loop
    for 67 seconds. Replaced by a linear walk, with the length bound applied to
    the RAW input before any parsing

b59922d


Changes since v0.1.8.