diff --git a/package.json b/package.json index 4b976a3..d2ae247 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "description": "The lightest signal library.", "packageManager": "pnpm@9.12.0", "types": "./types/index.d.ts", + "main": "./cjs/index.cjs", + "module": "./esm/index.mjs", "exports": { ".": { "types": "./types/index.d.ts", diff --git a/tests/build.spec.ts b/tests/build.spec.ts index 4624d56..e4567ec 100644 --- a/tests/build.spec.ts +++ b/tests/build.spec.ts @@ -1,3 +1,4 @@ +import { existsSync } from 'node:fs'; import { expect } from 'vitest'; import { test } from 'vitest'; @@ -18,3 +19,21 @@ test('build: esm', async () => { expect(typeof index.getActiveSub).toBe('function'); expect(typeof system.createReactiveSystem).toBe('function'); }); + +test('build: entry fields', () => { + const pkg = require('../package.json'); + const root = new URL('../', import.meta.url); + + // Resolvers that predate `exports`, such as webpack 4, only see these. + expect(pkg.main).toBe('./cjs/index.cjs'); + expect(pkg.module).toBe('./esm/index.mjs'); + + const entries: string[] = [pkg.main, pkg.module, pkg.types]; + for (const conditions of Object.values(pkg.exports)) { + entries.push(...Object.values(conditions as Record)); + } + + for (const entry of entries) { + expect(existsSync(new URL(entry, root)), entry).toBe(true); + } +});