๐ŸŽ‰ YINI Parser v1.2.0-beta Released

Hi folks!

I just published YINI Parser v1.2.0-beta ๐ŸŽŠ โ€” the latest beta release of the TypeScript/Node.js parser for the YINI configuration format.

This release comes with a mix of fixes, refactors, and quality-of-life improvements, especially around runtime safety and metadata handling.

โœจ What’s New

๐Ÿ› ๏ธ Fixes

  • parseFile() now correctly passes through all options (e.g. includeDiagnostics), so behavior now matches parse(..).
  • Fixed a small typo (in in) in file parsing error messages.

๐Ÿ“Š Metadata Improvements

The result metadata structure has been bumped to version 1.1.0.

preservesOrder: true // Member/section order is implementation-defined, not mandated by the spec.
orderGuarantee: 'implementation-defined'
orderNotes?: string

These fields make it easier for tooling to reason about how order is preserved.

๐Ÿ”’ Safer Runtime

The public YINI class was refactored to use per-invocation runtime state.
This prevents race conditions when multiple parse(..) / parseFile(..) calls run in parallel.

๐Ÿ—‚๏ธ File Layout & Naming

To keep things consistent and tidy:

  • src/parseEntry.ts โ†’ src/pipeline.ts (and _parseEntry(..) โ†’ runPipeline(..)).
  • core/types.ts โ†’ core/internalTypes.ts.
  • Public-facing types/interfaces moved to src/types/index.ts.
  • src/yiniHelpers.ts โ†’ src/utils/yiniHelpers.ts.

๐Ÿงน Naming Consistency

  • Renamed includeMetaData โ†’ includeMetadata.
  • Replaced old TJSObject type with the clearer ParsedObject type throughout the codebase.

๐Ÿ“š Documentation & Tests

  • Expanded and improved TSDoc comments across the public API.
  • Unit tests are now colocated with source files (src/**), ensuring 1:1 visibility between code and its tests.
    This reduces the chance of missing coverage when refactoring.

๐Ÿš€ Why This Matters

This release is all about stability and clarity:

  • You get more accurate metadata out of the box.
  • Safer runtime behavior when parsing concurrently.
  • Cleaner project layout that makes contributing and navigating the repo easier.
  • Better docs for anyone building on top of YINI Parser.

Code Example:

import { ParsedObject, YiniParseResult } from '../types'
import YINI from '../YINI'

const result: YiniParseResult = YINI.parseFile(
    'myConfigFile.yini',
    { includeMetadata: true },
)

๐Ÿ”— Links

๐Ÿ™ Feedback

As always, feedback and contributions are super welcome! Try it out and let me know if you hit any edge cases.

Similar Posts