You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(tools): port 27 tools from the upstream PR backlog
Upstream has 327 open PRs with a median age of two years and no maintainer
triage. Rather than replay individual PR branches - which all collide on the
same region of src/tools/index.ts - these are taken from sharevb/it-tools,
where the same PRs are already merged and conflict-resolved. Both repositories
are GPL-3.0.
Crypto: argon2-hash (CorentinTh#363, the maintainer's own PR, open 3.3 years),
file-hasher (CorentinTh#1141), crc-calculator (CorentinTh#1140),
htpasswd-generator (CorentinTh#902), passphrase-generator (CorentinTh#1260)
Text: sensitive-data-masker (CorentinTh#1182), smart-text-replacer (CorentinTh#1290),
list-comparer (CorentinTh#1303)
Converter: morse-converter (CorentinTh#1021), punycode-converter (CorentinTh#1258),
html-to-markdown (CorentinTh#904), json-to-typescript (CorentinTh#1002),
json-to-schema (CorentinTh#1166), json-escaper (CorentinTh#966)
Development: json-sort-master (CorentinTh#943), html-cleaner (CorentinTh#961),
markdown-toc-generator (CorentinTh#1106)
Network: ipv6-subnet-calculator (CorentinTh#963), ip-cidr-to-range (CorentinTh#871),
ip-range-to-cidr (CorentinTh#869), url-cleaner (CorentinTh#959), port-numbers (CorentinTh#1029)
Date & time: timezone-converter (CorentinTh#1284), duration-calculator (CorentinTh#1324) [new category]
Measurement: many-units-converter (CorentinTh#1330), sla-calculator (CorentinTh#1304)
Data: luhn-validator (CorentinTh#1320)
Reconciling the two forks' conventions:
- icons move from defineAsyncComponent(() => import('@vicons/tabler/es/X')) to
a plain named import;
- the per-tool `category` field is dropped, since categories live in
toolsByCategory here;
- i18n keys are merged into the root locale files for all nine languages this
fork ships, so the ports arrive translated rather than showing raw keys.
Small compatibility additions rather than importing sharevb's wider
infrastructure: useQueryParam accepts and ignores a `tool` property (it
namespaces against a per-tool settings store this fork does not have),
useITStorage wraps useStorage, multiRandFromArray joins utils/random,
Tool gains an optional externAccessDescription, and src/utils/ip.ts plus the
IANA registries back the three new network tools. The locale-aware number
input is ported as src/ui/n-input-number-i18n.
Two upstream behaviours had to be adapted:
- json-sort-master used a big-number-preserving JSON.parse that sharevb patches
onto the global object; plain JSON.parse is used instead, with a comment.
- duration-calculator formatted negative durations as positive ISO 8601,
because date-fns v2's intervalToDuration returns absolute components. The
sign is now restored per component, which makes its own test pass.
Nine candidates were deliberately not ported, each for a stated reason:
unicode-search, text-to-unicode-names and iso-3166-searcher need a full Unicode
database or countries-db plus a search composable this fork lacks;
certificate-key-parser pulls in openpgp and sshpk; jq-tester needs jq-wasm;
stacktrace-prettier needs four stack-parsing libraries and a style store;
json-linter and docker-compose-to-docker-run-converter need a Monaco editor
wrapper; jwt-generator is written against jose v6 and jwt-decode v4.
All 27 verified in a real browser: every route renders with no console errors,
and spot checks confirm real behaviour (Luhn validates 79927398713 with key 3,
the URL cleaner strips utm parameters, port 80/tcp resolves to www-http).
Lint, 347 unit tests, typecheck and build all pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019u4HjVENAajio7cxNSDzir
0 commit comments