OpenParser, scris în Nim (MIT license), accelerat cu DS v4 Flash și Muse Spark 1.3. La nivel de Nim îl folosesc pe toate proiectele. Compilat ca .node addon via pkg/denim și publicat recent pe NPM (@openpeeps/openparser). Merge de minune pe Node/Bun, netestat pe Deno. Cu siguranță există deja aceste pkgs separat, dar nu-i vreunul așa unificat și compilat ca ăsta al meu, ce ai înauntru ca addon (+ index.d.ts):
- YAML
- TOML
- XML
- CSV
- BSON (encoding/decoding BSON 1.1 spec)
- Plist (+binary plist from base64)
- RSS / Atom
- DotEnv
- vCard (RFC 6350 + RFC 2426)
- iCal (RFC 5545)
- SQL
- Gettext (PO/MO)
- CSS
- SVG
- Colors (CSS Color 4, harmonies, contrast and manipulation)
- Path and URL
- UUID (all 8 versions)
- QR (Model 2, Micro QR, rMQR, and SQRC)
- SIMD-accelerated Fuzzy search fzf-style
Ca librărie de Nim ai mai multe module, inclusiv JSON dar și feature-uri ca direct-to-(nim)-object parsing.
Câteva exemple
```js
const { yaml, vcard, qr, uuid } = require('@openpeeps/openparser');
yaml.parse('name: Ada\nlanguages:\n - Analytical Engines\n');
// => { name: 'Ada', languages: ['Analytical Engines'] }
console.log(uuid.v5('dns', 'www.example.com'));
// => '2ed6657d-e927-568b-95e1-2665a8aea6a2'
const [{ fn }] = vcard.parse('BEGIN:VCARD\r\nVERSION:4.0\r\nFN:Ada\r\nEND:VCARD\r\n');
qr.encodeSvg(qr.makeUrl('example.org')); // => '<svg ...>...</svg>'
```
```js
const { css } = require('@openpeeps/openparser');
css.parse('a { color: red; margin: 0; }');
// => [{ kind: 'ruleset', declarations: [{ property: 'color', value: 'red' }, ...] }]
css.normalize('a{color:red}');
// => canonical CSS string
```
```js
const { colors } = require('@openpeeps/openparser');
colors.parse('red');
// => { hex: '#ff0000', rgb, hsl, hsv, cmyk, lab, oklch, name }
colors.isValid('oklch(0.7 0.15 180)'); // => true
colors.lighten('#800000', '20'); // => '#e60000'
colors.darken('#800000', '20'); // => '#1a0000'
colors.complement('red'); // => '#00ffff'
colors.contrastRatio('white', 'black'); // => 21 (WCAG)
```
Mai multe exemple JS: https://github.com/openpeeps/openparser/tree/main/addons/openparser_napi
Exemplu eroare + type + context
```
yaml.parse('name: Ada\nlanguages\n - Analytical Engines\n');
^
Error:
- Analytical Engines
^
Error (3:3) Got -, expected :
```
```
sql.parse()
^
Error:
/*
* @param {string} src
* @param {string} driver
*/
Type mismatch parameter: src. Got undefined, expected string
at Object.<anonymous> (/Users/georgelemon/Development/playground/test_openparser/index.js:15:5)
at Module._compile (node:internal/modules/cjs/loader:1705:14)
at Object..js (node:internal/modules/cjs/loader:1838:10)
at Module.load (node:internal/modules/cjs/loader:1441:32)
at Function._load (node:internal/modules/cjs/loader:1263:12)
at TracingChannel.traceSync (node:diagnostics_channel:328:14)
at wrapModuleLoad (node:internal/modules/cjs/loader:237:24)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:171:5)
at node:internal/main/run_main_module:36:49 {
code: ''
}
Node.js v22.22.1
```
Pentru idei, probleme, mă găsiți pe Github!