Skip to content

feat: a require condition for grounding and registry — jest consumers need no workaround - #21

Merged
catomean merged 2 commits into
mainfrom
feat/cjs-condition
Aug 29, 2026
Merged

feat: a require condition for grounding and registry — jest consumers need no workaround#21
catomean merged 2 commits into
mainfrom
feat/cjs-condition

Conversation

@catomean

Copy link
Copy Markdown
Collaborator

OrangeCat's jest (ts-jest, CJS mode) cannot transform an ESM-only .js
dependency — its config documents this in its own words, and it is the
failure class that broke AOZ's Jest inside ai-forms in v0.3. The v0.4 lesson
applies unchanged: fix it in the package, not with a per-adopter mapper.

The two subpaths a test suite actually loads (grounding, registry) now ship
a CommonJS twin in dist-cjs/ behind an exports require condition. A CJS
loader resolves it automatically; every ESM consumer keeps resolving dist/
exactly as before. Scoped to those two subpaths on purpose: forms re-exports
ai-forms, which is ESM-only, so a CJS twin there would promise a load it
cannot deliver.

cjs-condition.test.js pins both loaders serving the same surface AND the
same verdict, and was mutation-proven: deleting the dist-cjs type marker
fails it, rebuilding greens it.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01WqKqMnHQHSmkGFfc5t7Rxn

catomean and others added 2 commits August 29, 2026 11:27
… need no workaround

OrangeCat's jest (ts-jest, CJS mode) cannot transform an ESM-only .js
dependency — its config documents this in its own words, and it is the
failure class that broke AOZ's Jest inside ai-forms in v0.3. The v0.4 lesson
applies unchanged: fix it in the package, not with a per-adopter mapper.

The two subpaths a test suite actually loads (grounding, registry) now ship
a CommonJS twin in dist-cjs/ behind an exports require condition. A CJS
loader resolves it automatically; every ESM consumer keeps resolving dist/
exactly as before. Scoped to those two subpaths on purpose: forms re-exports
ai-forms, which is ESM-only, so a CJS twin there would promise a load it
cannot deliver.

cjs-condition.test.js pins both loaders serving the same surface AND the
same verdict, and was mutation-proven: deleting the dist-cjs type marker
fails it, rebuilding greens it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WqKqMnHQHSmkGFfc5t7Rxn
@catomean
catomean merged commit ace11f1 into main Aug 29, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant