Releases: CLDMV/jsonv-eslint-plugin-jsonv
Release list
v1.0.15
release: v1.0.15 - update expectations for @cldmv/jsonv 1.1.1 behavior…
🚀 What's Changed
💥 Breaking Changes
No breaking changes
✨ Features
No new features
🐛 Bug Fixes
No bug fixes
📦 Dependencies
🔧 Other Changes
| Metric | Coverage |
|---|---|
| Statements | 100.0% |
| Branches | 100.0% |
| Functions | 100.0% |
| Lines | 100.0% |
Avg: 100.0% · 813a790 · Node lts/*
👥 Contributors
v1.0.14
release: v1.0.14 - adopt the shared CLDMV fix-headers config and stamp…
🚀 What's Changed
💥 Breaking Changes
No breaking changes
✨ Features
No new features
🐛 Bug Fixes
No bug fixes
📦 Dependencies
No dependency updates
🔧 Other Changes
| Metric | Coverage |
|---|---|
| Statements | 100.0% |
| Branches | 100.0% |
| Functions | 100.0% |
| Lines | 100.0% |
Avg: 100.0% · ef49187 · Node lts/*
👥 Contributors
v1.0.14
v1.0.13
release: v1.0.13 - publish real types for the plugin, language and AST
@cldmv/eslint-plugin-jsonv v1.0.13 Changelog
Release Date: September 2026
Release Type: Patch
Branch: release/1.0.13
Overview
Version 1.0.13 makes the plugin's published types real. dist/index.d.mts used to declare the default export as a bare Object; it now types the plugin, the jsonv/jsonv language, JsonvSourceCode, and every AST node against @eslint/core's generics, and the JSDoc that generates those declarations is now type-checked in CI. The release also closes a gap the new types surfaced: engines.node and a missing eslint peer range now match what the plugin's runtime dependencies actually require. Alongside that, the plugin accepts three more @cldmv/jsonv language options, and the repository adopts the CLDMV lint/format tooling.
No configuration changes are required to pick this up — existing eslint.config.mjs files, rules, and languageOptions keep working unchanged.
🐛 Bug Fixes
Published types describe a real ESLint plugin (#30, fixes #28)
dist/index.d.mts declared const plugin: Object, so a TypeScript (or // @ts-check) config got no type for plugin.configs.recommended, plugin.languages.jsonv, or languageOptions, and nothing for a rule author to use for the AST node types the language exposes. The JSDoc in index.mjs is now typed against @eslint/core's Language, TextSourceCode, OkParseResult, and Plugin generics, the way @eslint/json types its JSON language, and tsconfig.types.json now type-checks it (checkJs: true) instead of only emitting from it. The package exports typedefs for every AST node (JsonvProgram, JsonvObjectExpression, JsonvProperty, JsonvLiteral, JsonvIdentifier, JsonvMemberExpression, JsonvTemplateLiteral, JsonvTemplateElement), for JsonvLanguageOptions, and for a rule's visitor (JsonvRuleDefinition, JsonvRuleVisitor), plus the JsonvSourceCode class itself, and JsonvSourceCode is now a named export alongside the default plugin. A new test:types script compiles a type-level consumer test against the built declarations the way an eslint.config.mts would, and build:ci runs it.
The declared Node floor and ESLint range match what the plugin needs (#37, fixes #32)
engines.node still said >=18.0.0, but the runtime dependencies added for real types — @eslint/core and @eslint/plugin-kit — both require ^20.19.0 || ^22.13.0 || >=24, and so does ESLint 10 itself. Installing on Node 18 could fail or warn while engines claimed support. engines.node now states that real floor, and a new eslint peer dependency (^9.13.0 || ^10.0.0) tells consumers which ESLint versions the plugin's languages API needs — ^9.13.0 is the first release with defaultLanguageOptions support for plugin languages.
mode, strictOctal, and allowInternalReferences language options (#39, fixes #34)
The README documented a mode option, and the plugin rejected it (Unknown language option "mode") because it was never actually forwarded to the parser. mode ("jsonv", "json5", or "json", default "jsonv"), strictOctal (boolean, default false), and allowInternalReferences (boolean, default true) are now accepted, validated, and passed through to both parseWithOptions() and parseToAst(), matching @cldmv/jsonv's own ParseOptions. reviver, preserveComments, and tolerant stay unsupported, and validateLanguageOptions now names the reason when one of those three is set instead of reporting it as merely unknown. The README's Configuration Options table documents all five options with their defaults, and a new test extracts the README's own languageOptions examples and runs them through validateLanguageOptions and a live Linter, so the docs and the code can't drift apart again.
🔧 CI & tooling
- The CLDMV eslint + prettier config,
lint/lint:fix/format/format:checkscripts, and the.githookspre-commit hook are added, and the existing sources and README are reformatted repo-wide (#38, fixes #33). release-mergeis re-armed on every check-producing workflow, instead of only the ones that existed when it was first wired (#40).- The v4 workflows are synced with the
CLDMV/.githubv4.29.2 templates (#42). - The bundle-size workflow is added, and the
release-mergerequired-workflow list is restored to the full set (#43).
📚 Documentation
- NEW: docs/changelog/v1/v1.0.13.md — this changelog.
- README Installation now states the Node and ESLint requirements (#37).
- README Configuration Options documents
mode,strictOctal, andallowInternalReferencesalongsideyearandstrictBigInt(#39).
🔧 Dependencies
- NEW runtime dependency:
@eslint/core^1.2.1, which provides theLanguage,TextSourceCode, andPlugintypes the published declarations are built against (#30). - NEW dev dependency:
@types/node^26.6.3, needed by the type-checked JSDoc (#30). - NEW peer dependency:
eslint^9.13.0 || ^10.0.0(#37). - NEW dev dependencies for lint/format:
@cldmv/prettier-plugin-jsonv^1.0.6,@eslint/css^2.0.0,@eslint/js^10.0.1,@eslint/json^2.1.0,@eslint/markdown^8.0.3,globals^17.12.0,prettier^3.9.9(#38).
Upgrade notes
- No breaking changes — this is a drop-in upgrade for existing configs.
- If you're on Node below
^20.19.0/^22.13.0/24, or ESLint below 9.13.0, upgrade both: the newenginesandeslintpeer ranges now state a requirement the plugin's dependencies already carried since v1.0.12. mode,strictOctal, andallowInternalReferencesare opt-in language options with backward-compatible defaults — no existinglanguageOptionsneed to change.- If you consume the published types, the default export and its language are now real ESLint/
@eslint/coretypes instead ofObject; a config that previously cast around the missing types can drop the cast.
| Metric | Coverage |
|---|---|
| Statements | 100.0% |
| Branches | 100.0% |
| Functions | 100.0% |
| Lines | 100.0% |
Avg: 100.0% · 43b8980 · Node lts/*
👥 Contributors
v1.0.12
release: v1.0.12 - build a real ESLint AST from the jsonv parser
@cldmv/eslint-plugin-jsonv v1.0.12 Changelog
Release Date: September 2026
Release Type: Patch
Branch: release/1.0.12
Overview
Version 1.0.12 makes the jsonv/jsonv language a real ESLint language. Until now parse() ran the jsonv parser but handed ESLint a hard-coded empty Program, so the plugin could only say whether a file parsed: rules had no nodes to visit, a report on a node landed at 1:0, and inline eslint-disable comments were ignored. The language now builds a positioned AST from @cldmv/jsonv's parseToAst(), exposes comments and tokens, and supports ESLint's inline configuration comments.
Parse-error reporting is unchanged, except that unresolved and circular references now report at the reference itself instead of 1:1. The release raises the @cldmv/jsonv peer range to ^1.1.0 (the first version with parseToAst()) and adds @eslint/plugin-kit as a runtime dependency — see the upgrade notes.
🐛 Bug Fixes
The language returns a real AST (#26, fixes #19)
languages.jsonv.parse() now returns an ESTree-style AST whose Program.body is the document's root value, built from @cldmv/jsonv's parseToAst(). Node types: Program, ObjectExpression, Property, ArrayExpression, Literal, Identifier, MemberExpression, TemplateLiteral and TemplateElement. Every node carries a loc with 1-based lines and columns (matching the language's declared columnStart: 1) and a range, Program carries the document's Line/Block comments and its tokens, and the language declares visitorKeys so selectors such as "Property > Literal.value" work.
createSourceCode() returns a JsonvSourceCode built on TextSourceCodeBase from @eslint/plugin-kit, the same foundation @eslint/json uses. It provides traversal, getParent() / getAncestors(), and inline configuration: // eslint-disable, /* eslint-disable <rule> */, /* eslint-enable */, // eslint-disable-line, // eslint-disable-next-line and /* eslint <rule>: "off" */ now work inside .jsonv files, and malformed directives are reported. Line handling matches jsonv's own (CRLF, CR, LF, U+2028, U+2029), so range and loc agree on every line-break style.
Parse errors are still produced by parseWithOptions() at their real position. Unresolved and circular references, which @cldmv/jsonv 1.1.0 now throws as a positioned JsonvReferenceError, report at the reference: { a: missing } reports at 1:6 rather than 1:1.
The README gains Inline Configuration and Writing Rules sections with the node-type table and a selector example. Test coverage went from 114 to 167 tests, with index.mjs at 100% statements, branches, functions and lines.
🔧 Dependencies
@cldmv/jsonv^1.0.10→^1.1.0, as both the peer dependency and the dev dependency; 1.1.0 is the first release withparseToAst()(#26).- NEW runtime dependency:
@eslint/plugin-kit^0.7.3, which providesTextSourceCodeBaseand the inline-config directive types (#26). typescript5.9.3→7.0.2(dev only; builds the published type declarations, which are unchanged apart from keeping the file's header doc comment) (#25).
📚 Documentation
- NEW: docs/changelog/v1/v1.0.12.md — this changelog.
- NEW: README ✨ What's New section.
- README Inline Configuration and Writing Rules sections (#26).
Upgrade notes
- Upgrade
@cldmv/jsonvto 1.1.0 or later alongside this release. The peer range is now^1.1.0; with@cldmv/jsonv1.0.x installed, npm reports a peer-dependency conflict. - Rules that report on nodes now land on the node's real position instead of
1:0, and inlineeslint-disablecomments now take effect — findings that were previously suppressed by nothing, or mis-positioned, will move or disappear accordingly. JsonvSourceCode#getLoc()/getRange()now throw for an object with no position rather than returning a1:0fallback. This only affects custom code that passes hand-built objects to those methods.- No configuration changes are required: the
jsonv/jsonvlanguage id, the language options andconfigs.recommendedare unchanged.
| Metric | Coverage |
|---|---|
| Statements | 100.0% |
| Branches | 100.0% |
| Functions | 100.0% |
| Lines | 100.0% |
Avg: 100.0% · a85c2f5 · Node lts/*
👥 Contributors
v1.0.11
release: v1.0.11 - validate language options and clean up the language…
🚀 What's Changed
💥 Breaking Changes
No breaking changes
✨ Features
No new features
🐛 Bug Fixes
-
- fix: report parse errors at their real position (b58568b)
-
- fix: validate language options and clean up the language object (b89f044)
📦 Dependencies
No dependency updates
🔧 Other Changes
-
- chore: restore the verbatim Apache-2.0 license text (fbcd397)
| Metric | Coverage |
|---|---|
| Statements | 100.0% |
| Branches | 100.0% |
| Functions | 100.0% |
| Lines | 100.0% |
Avg: 100.0% · 2d59de5 · Node lts/*