Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Changelog

All notable changes to this project are documented here.

The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

Releases before 1.1.0 were tagged without notes and are not back-filled here.

## [1.1.0] - 2026-09-21

Full notes: [docs/releases/v1.1.0.md](docs/releases/v1.1.0.md)

### Added

- CI workflow running install, build, ESM check, lint and tests on Node 20, 22
and 24, on every push to master and every pull request (issue 25, PR 24).
- `npm run check:esm`, which imports the built ESM entry from a real Node
context and parses through it (PR 24).

### Fixed

- A failed `load()` no longer reports its error against every later `load()` in
the same process (issue 22, PR 23).
- `//` line comments are skipped instead of lexing as a division slash
(issue 21, PR 23).
- The ESM build resolves in Node. Emitted relative specifiers carry `.js` and
both halves of `lib/` carry their own `type` marker, so `import "notations"`
works without a bundler (issue 20, PR 24).

### Changed

- Dependency updates from dependabot (PR 15, PR 16).

[1.1.0]: https://github.com/panyam/notations/releases/tag/v1.1.0
62 changes: 62 additions & 0 deletions docs/releases/v1.1.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# v1.1.0

A packaging and parser release. Three bugs reported from downstream use of the
DSL are fixed, and the project gets its first build and test workflow. Nothing
in the public API changed. The minor bump is for the shape of the published
package rather than for anything a caller writes code against: `lib/esm` and
`lib/cjs` now carry their own `type` markers, which changes how Node and every
bundler classify those files.

## Fixed

- **A failed `load()` no longer poisons later `load()` calls** (issue 22, PR 23).
The parser held one token buffer for the lifetime of the module and never
drained it when a parse threw, so the token that caused the failure was read
back as the first token of the next parse. Any process that parsed more than
once, a build step, a test suite, a server, reported the first failure against
every input that followed it.

- **`//` line comments work** (issue 21, PR 23). The grammar declared them
through a flex-syntax rule where a quoted run is a literal, so the rule
matched the six characters `//.*$` and `//` lexed as a division slash. Block
comments were never broken; they only appeared to be, because the `//` case
ran first and left the parser holding a stale token.

- **The ESM build resolves in Node** (issue 20, PR 24). `lib/esm/index.js`
shipped `export * from "./entity"`, which Node's ESM resolver rejects because
it needs the full specifier. `import "notations"` failed with
`ERR_MODULE_NOT_FOUND` outside a bundler. The build now rewrites the emitted
specifiers and writes the `type` markers for both halves of `lib/`. The
`require()` path was unaffected and stays unaffected.

## Added

- **CI** (issue 25, PR 24). A workflow runs install, build, ESM check, lint and
tests on Node 20, 22 and 24, on every push to master and every pull request.
Before this, those ran only in the pre-commit hook, on the machine of whoever
was committing, and only if `pre-commit` was installed there.

- `npm run check:esm` imports the built ESM entry from a real Node context and
parses through it. It is in the pre-commit chain as well as in CI, because a
bundler does its own resolution and will happily load a tree Node refuses.

## Changed

- Dependency updates from dependabot (PR 15, PR 16).

## Upgrading

No code changes are needed. If you worked around the ESM problem with
`createRequire(import.meta.url)("notations")`, a plain
`import * as N from "notations"` now works and the workaround can come out.

If you have notation files that contain `//`, they parsed as an error before
and are skipped as comments now, so previously failing documents may start
loading. Nothing that parsed cleanly before parses differently.

## Known gaps

Bar separators inside a role line (issue 19), `___` silent spaces (issue 17)
and the parser pulling in the renderer (issue 18) are all still open. The docs
site has examples that depend on the first two and do not render because of
them.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "notations",
"version": "1.0.9",
"version": "1.1.0",
"author": "Sriram Panyam",
"description": "A package for modelling, parsing, laying out carnatic musical notation",
"homepage": "https://github.com/panyam/notations#readme",
Expand Down
Loading