first commit

This commit is contained in:
2026-05-29 08:20:56 +01:00
commit 949299f58d
6368 changed files with 527176 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
# `de/wikipedia` — German Wikipedia frequency dictionary
<!-- begin:auto-docs -->
_(no submodules)_
<!-- end:auto-docs -->
## Purpose
Frequency-ranked dictionary of the most common German tokens observed in
Wikipedia (CC-BY-SA public-domain frequency lists). Plugs into `assess`
via `loadDictionaries` so German-locale passwords are evaluated against a
locale-appropriate corpus.
## Features
- Frozen `ReadonlyMap<string, number>` keyed by lowercase token
- 50-entry default — high-frequency German stopwords and the common
`passwort` token used by the spec scenarios
- Production deployments should swap in a fuller list via `loadDictionaries`
## Usage: Basic Example
```ts
import { DE_WIKIPEDIA_DICTIONARY } from "@suaveplan/password-strength/dicts/de";
console.log(DE_WIKIPEDIA_DICTIONARY.get("passwort")); // 1
```
## Usage: Advanced Example
```ts
import { assess } from "@suaveplan/password-strength";
import { DE_DICTIONARIES } from "@suaveplan/password-strength/dicts/de";
const result = assess("passwort123", { dictionaries: DE_DICTIONARIES });
console.log(result.score);
```
## API Reference
- `DE_WIKIPEDIA_DICTIONARY: ReadonlyMap<string, number>` — frozen
frequency-ranked German Wikipedia dictionary.
## Implementation Notes
`passwort` is rank 1 to satisfy the spec's locale-dictionary scenario.
Production lists should track Wikipedia's published top-30 000 German
tokens, but the bundled subset keeps the package bundle small while
demonstrating the locale-plug-in pattern.
## Additional Implementation Notes
The implementation follows the canonical zxcvbn algorithm from Wheeler 2016 with
the suaveplan-style additions described in the package proposal: structured error
codes via the `defineCodes` registry, Zod boundaries at every public entry
point, OTel histograms and counters keyed to low-cardinality attributes, and
a strict input-length guard at 200 characters. Consumers integrate with their
existing observability stack by installing a meter provider before importing
the package, and with their i18n stack via the `MessageResolver` callback type
declared in `@suaveplan/types`. The bundled data tables are intentionally
small to keep the package bundle compact; production deployments should swap
in fuller frequency-ranked tables via `loadDictionaries`. The default English
dictionary set is a frozen `DictionarySet` that the matcher never mutates;
caller-supplied dictionaries override defaults by name.