{"_id":"@chess-pgn/chess-pgn","_rev":"12-0c5c31ac6c1f759effd3242f91544040","name":"@chess-pgn/chess-pgn","dist-tags":{"beta":"0.1.0-beta.5","latest":"1.4.2"},"versions":{"0.1.0-beta.1":{"name":"@chess-pgn/chess-pgn","version":"0.1.0-beta.1","keywords":["chess","pgn","typescript","parser"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@0.1.0-beta.1","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"a27874ded6f5ced8102a210aaad66bd85675bad6","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-0.1.0-beta.1.tgz","fileCount":51,"integrity":"sha512-2SE12acVVIiDPZYXcmhfFL2KSteSLeUHAi4ua6R5B+3Ifc5caKtrObtzFQwrlFK8HWKY1E/a8e0qk7C0BmHjYQ==","signatures":[{"sig":"MEUCIQCWhUE+qChtLfABBijeO9E87UnjxQjojopIeq8GIaq94AIgH4NdejpQR5cp90wkoC5Ylw8XHUwSr5PAyYW9bTM41ds=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1169752},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"b1fc3f9f6549fd8d85b63a16c6246a68926794bf","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage","update-version":"tsx update-version.ts"},"_npmUser":{"name":"jeffml","email":"jlowery2663@gmail.com"},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"9.2.0","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"18.20.4","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_0.1.0-beta.1_1763324658948_0.8450363966152625","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.2":{"name":"@chess-pgn/chess-pgn","version":"0.1.0-beta.2","keywords":["chess","pgn","typescript","parser"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@0.1.0-beta.2","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"0f5201a38eebe57f814501a637759d4019ef9bbc","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-0.1.0-beta.2.tgz","fileCount":50,"integrity":"sha512-Pv9YdYJtwWiLXMgPh+fck+Xus2jO4brIVzOHsi+Rw2j/ecauBw6lp28RcQ0hEwROIWRNVcWNvDXmjJMGQLAVmQ==","signatures":[{"sig":"MEQCIFCQ3hsKdqRmJDCME0PLJqA13SE2DSF90+dccjvfuIRMAiA1vShXyhcsbycImXI07wcr9uIPYlrriFza+IxzWSvmfQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1168175},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"f5f4673a0257b68bb81260dc62c3ddefcc9f8c6b","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage"},"_npmUser":{"name":"jeffml","email":"jlowery2663@gmail.com"},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"9.2.0","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"18.20.4","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_0.1.0-beta.2_1763421210906_0.12826015378217792","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.3":{"name":"@chess-pgn/chess-pgn","version":"0.1.0-beta.3","keywords":["chess","pgn","typescript","parser"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@0.1.0-beta.3","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"0f7a613707f90d2a217198b14dfb6579a527278b","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-0.1.0-beta.3.tgz","fileCount":50,"integrity":"sha512-Z1k8xNs8vtIlQuMDSKshqSLNP2mJK4jMjq/BPQKATJL8quF92ThyK6FqemGLOJTtTk1CnftVFfammzJ2au1zRw==","signatures":[{"sig":"MEUCIDTwySilZ4uyD3VT1V1Qq0cVuldm6afxjpgakuGNiQH6AiEA0yyAG8pbw2fCkIEx+r2iPPhe4s1+JDhmSjiM7tB1bVE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1240962},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"ddbded86c3c2a81c210261a8dcaf72d7e0254409","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage"},"_npmUser":{"name":"jeffml","email":"jlowery2663@gmail.com"},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"11.6.2","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_0.1.0-beta.3_1763598164465_0.5807599090655364","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.4":{"name":"@chess-pgn/chess-pgn","version":"0.1.0-beta.4","keywords":["chess","pgn","typescript","parser"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@0.1.0-beta.4","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"49f3cd63c73d4661ec987679d10fea019d3ce037","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-0.1.0-beta.4.tgz","fileCount":51,"integrity":"sha512-yOL+C8x2uouxBtg18fMHUYpsbIc1mYx3G/qi5mNiMtHtoepqSoVcQygFd3E9NSX9pF/YTixfXSCKRPyHPl667g==","signatures":[{"sig":"MEUCIQDNH1ziN9sRZeeH3xaROn0cPIEu115HfNj7UfsRL/DlawIgKLwjm2z7Rdj5TwFi73upuxjBNbRXRb/OwAvUrvzyBUw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1514164},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"369c771174377b1faf181882baadb1336e5c294a","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage"},"_npmUser":{"name":"jeffml","email":"jlowery2663@gmail.com"},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"11.6.2","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_0.1.0-beta.4_1763757267396_0.7643193917285191","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.5":{"name":"@chess-pgn/chess-pgn","version":"0.1.0-beta.5","keywords":["chess","pgn","typescript","parser"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@0.1.0-beta.5","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"315fa602008eb0552c08aad571acfdc49998c526","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-0.1.0-beta.5.tgz","fileCount":50,"integrity":"sha512-VPI42/ot/fIIdH29H6S8zmZIDGmp4FNxoUjk8X+3v1tGuWgbmqjLzJBZa7nIBw0Ip21HqN60RzwiJxccWPgkXw==","signatures":[{"sig":"MEQCIDu9z6yIB8gx8vyi5kLkvCGfvXPkWapSquwu6bHa1gi0AiAxvZP+4WPHbBcZA+Rb/ARBYSptRAdMputVBkN+hu8MCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1228648},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"36c1e544dffd728b81e1106abd89e7af81fb7bc6","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage"},"_npmUser":{"name":"jeffml","email":"jlowery2663@gmail.com"},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"11.6.2","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_0.1.0-beta.5_1763909200675_0.9700286844949568","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@chess-pgn/chess-pgn","version":"1.0.0","keywords":["chess","pgn","typescript","parser"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@1.0.0","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"5587079d0172798c15d1f11d90c210f6f169244c","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-1.0.0.tgz","fileCount":49,"integrity":"sha512-d2bkUY9MSuAmYBHFTupS9Z8JsOFArIonHyeC7IusIzie20YMH2j66wwPnCd7EqIts3ijLXKBQ3ndBwOxXl4vcA==","signatures":[{"sig":"MEUCIDUuOZ+703VKeTXShqy41QJ/+UlVCO5VFmM/i9OssCT5AiEAizyRgRWimAQef/OHIr7UvKNgMSjxbJSfDh/3l0//cj0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1240392},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"2243eb4053d1a1a18e6c246be1d3349205442574","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage"},"_npmUser":{"name":"jeffml","email":"jlowery2663@gmail.com"},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"11.6.2","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_1.0.0_1764000967537_0.6087478489345166","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@chess-pgn/chess-pgn","version":"1.0.1","keywords":["chess","pgn","pgn-parser","typescript","parser","chess-library","fen","chess-game","multi-game-pgn","chess-js","chess-moves","game-parser","worker-threads","chess-engine","chess-validation"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@1.0.1","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"2f67203f831b7b0ea76c51f1c54024215101705d","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-1.0.1.tgz","fileCount":49,"integrity":"sha512-yFYuuluFhQBdzA9cQjcEfmoue2sJF8CiCKl+YL3EqZ4vmRydUDKZWusjg9ijBPJddLlELIJmt3ctmvZZkmlmTw==","signatures":[{"sig":"MEUCIGmBhB3oXkcPCnKBjnka0hct1zMF1LBDdkIrrrdI71U4AiEAsIHg1gKEEYjtUcI5qGCfnybWNDri8miXGPjDeCr8gOM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1240622},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"e5ab9e2a0f614d006c7514bff2aac279f50c067a","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage"},"_npmUser":{"name":"jeffml","email":"jlowery2663@gmail.com"},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"11.6.2","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_1.0.1_1764610452749_0.356450573848611","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@chess-pgn/chess-pgn","version":"1.1.0","keywords":["chess","pgn","pgn-parser","typescript","parser","chess-library","fen","chess-game","multi-game-pgn","chess.js","chess-moves","game-parser","worker-threads","chess-engine","chess-validation"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@1.1.0","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"eece08b2505bd4b0c8f41cd5160a962aa0031a33","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-1.1.0.tgz","fileCount":54,"integrity":"sha512-go6HxEkpkN0qJG+OjW79SXL8/1euXNdF7DNn1tQ4kS9D3xVBgDEdLQzVol3eexhl+gRJaRr0Yk0Ll4cPcN68NA==","signatures":[{"sig":"MEQCIBIZcYatxNdq9BLNkTOHpkkhaIgLPKW2blgCGaZLUATOAiAha27q/sX38K3hjRsOR6a3Y9U6wHoGwR0hhukgb5yHDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1287636},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"a52745549eff622b4c20c918b5bf21570160ad59","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage"},"_npmUser":{"name":"jeffml","email":"jlowery2663@gmail.com"},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"11.6.2","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@chess-openings/eco.json":"^2.2.0","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"@chess-openings/eco.json":">=2.2.0"},"peerDependenciesMeta":{"@chess-openings/eco.json":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_1.1.0_1783017778471_0.17801253659402505","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@chess-pgn/chess-pgn","version":"1.1.1","keywords":["chess","pgn","pgn-parser","typescript","parser","chess-library","fen","chess-game","multi-game-pgn","chess.js","chess-moves","game-parser","worker-threads","chess-engine","chess-validation"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@1.1.1","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"6e2182dda09e16b2a960d553b31b72aca16eef59","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-1.1.1.tgz","fileCount":49,"integrity":"sha512-Wl2FTNLdVHpvgTDsOSD0ewNN0arsM0Q8WrWr/YJv22wHgPhLopT1NnEVbjAVKizbh7d8zl6mB61Rno0Bgoo3HQ==","signatures":[{"sig":"MEYCIQCDQP4TrUbWF+BZdlGez4/dVMM3YGFWIXZEpWiSKXl9NwIhALqwLc/GnGZvlhlMoScy4wM4zGa2Y66mWsAcP62Ngwib","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1260799},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"4bfeed8f4a0a9ddfe72d2d053cd7b13db82639b2","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage"},"_npmUser":{"name":"jeffml","email":"jlowery2663@gmail.com"},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"11.6.2","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@chess-openings/eco.json":"^2.2.0","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"@chess-openings/eco.json":">=2.2.0"},"peerDependenciesMeta":{"@chess-openings/eco.json":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_1.1.1_1783018298538_0.8960565022241063","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@chess-pgn/chess-pgn","version":"1.2.0","keywords":["chess","pgn","pgn-parser","typescript","parser","chess-library","fen","chess-game","multi-game-pgn","chess.js","chess-moves","game-parser","worker-threads","chess-engine","chess-validation"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@1.2.0","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"fe282be457b7b126779c0b09570c0d069df48280","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-1.2.0.tgz","fileCount":49,"integrity":"sha512-h9mdzUIeFz6jT6iB4vHcE3l9DM18wtVNUkyYKzJ2q4Vi4lrP2xG9XrHb00GfEA8KInoOwp5LJWW5PAg8iPdYew==","signatures":[{"sig":"MEUCIQDQSZBVfKLcwmascmNLfDCK4xBiv90lyyBhnHNmxQvF2QIgTL8Ap660jDqCr2Qn+RRlvtx2iRZ9xc/StKGRxw8ySos=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1271475},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"bdf4ba998445a227c8c8304da36a350947874f24","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage"},"_npmUser":{"name":"jeffml","email":"jlowery2663@gmail.com"},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"11.6.2","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@chess-openings/eco.json":"^2.2.0","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"@chess-openings/eco.json":">=2.2.0"},"peerDependenciesMeta":{"@chess-openings/eco.json":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_1.2.0_1783124201614_0.6230572049281764","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@chess-pgn/chess-pgn","version":"1.4.1","keywords":["chess","pgn","pgn-parser","typescript","parser","chess-library","fen","chess-game","multi-game-pgn","chess.js","chess-moves","game-parser","worker-threads","chess-engine","chess-validation"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","_id":"@chess-pgn/chess-pgn@1.4.1","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"homepage":"https://github.com/JeffML/chessPGN","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"dist":{"shasum":"67e281ec5c025d42fd6e80fb53471e90983e3446","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-1.4.1.tgz","fileCount":47,"integrity":"sha512-IlhzpdQRJsiw/pvqRVzDF8skNFLOT7rDOl52ZDiaDRFq68jNi+GZ1Ol7RC6ISfihzrTEAYmHwF3lzWEyo8BCBw==","signatures":[{"sig":"MEQCIDjKG+5LGkbGNWATWtL+QF+3gyEGdzruMzcLd3oYyKY+AiA4bSvJH62hN1P1ecA7lluLa3MhRnIx7c4j5Sx+1+gC+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@chess-pgn%2fchess-pgn@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1123520},"main":"dist/cjs/chessPGN.js","types":"dist/types/chessPGN.d.ts","module":"dist/esm/chessPGN.js","engines":{"node":">=22.15.0"},"gitHead":"bf022d48c719e9bbbbc035c960d763d46bd376f2","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest --run","bench":"tsx benchmarks/bench.ts","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","parser":"peggy -c peggy.config.mjs","prepare":"npm run build","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose","format:check":"prettier --check .","test:coverage":"vitest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eec1ca8-7c44-4787-b268-77079f5995ab"}},"repository":{"url":"git+https://github.com/JeffML/chessPGN.git","type":"git"},"_npmVersion":"11.17.0","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","peggy":"^4.2.0","tslib":"^2.8.1","eslint":"^9.29.0","rollup":"^4.41.1","vitest":"^3.2.2","esbuild":"^0.27.0","prettier":"^3.1.0","tinybench":"^4.0.1","@eslint/js":"^9.29.0","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/eslintrc":"^3.3.1","rollup-plugin-dts":"^6.2.1","@vitest/coverage-v8":"^3.2.2","@rollup/plugin-commonjs":"^28.0.3","@chess-openings/eco.json":"^2.2.0","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-typescript":"^12.1.2","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"peerDependencies":{"@chess-openings/eco.json":">=2.2.0"},"peerDependenciesMeta":{"@chess-openings/eco.json":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chess-pgn_1.4.1_1786550111065_0.08988079089141165","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@chess-pgn/chess-pgn","description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","version":"1.4.2","license":"BSD-2-Clause","main":"dist/cjs/chessPGN.js","module":"dist/esm/chessPGN.js","types":"dist/types/chessPGN.d.ts","homepage":"https://github.com/JeffML/chessPGN","keywords":["chess","pgn","pgn-parser","typescript","parser","chess-library","fen","chess-game","multi-game-pgn","chess.js","chess-moves","game-parser","worker-threads","chess-engine","chess-validation"],"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"scripts":{"prepare":"npm run build","build":"npm run parser && tsc --noEmit && rollup -c","check":"npm run format:check && npm run lint && vitest run && npm run build && api-extractor run --verbose","clean":"rm -rf ./dist; rm -f src/pgn.js src/pgn.d.ts","format":"prettier --write .","format:check":"prettier --check .","lint":"eslint src/ --ext .ts","parser":"peggy -c peggy.config.mjs","test":"vitest --run","test:coverage":"vitest --coverage","bench":"tsx benchmarks/bench.ts","api:check":"npm run build && api-extractor run --verbose","api:update":"npm run build && api-extractor run --local --verbose"},"repository":{"type":"git","url":"git+https://github.com/JeffML/chessPGN.git"},"engines":{"node":">=22.15.0"},"peerDependencies":{"@chess-openings/eco.json":">=2.2.0"},"peerDependenciesMeta":{"@chess-openings/eco.json":{"optional":true}},"devDependencies":{"@chess-openings/eco.json":"^2.2.0","@eslint/eslintrc":"^3.3.1","@eslint/js":"^9.29.0","@microsoft/api-extractor":"^7.53.1","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^8.35.0","@typescript-eslint/parser":"^8.35.0","@vitest/coverage-v8":"^3.2.2","esbuild":"^0.27.0","eslint":"^9.29.0","peggy":"^4.2.0","prettier":"^3.1.0","rollup":"^4.41.1","rollup-plugin-dts":"^6.2.1","tinybench":"^4.0.1","tslib":"^2.8.1","tsx":"^4.19.4","typescript":"^5.9.3","vitest":"^3.2.2"},"gitHead":"bac5356538765acf6addab1a37f82f658c4dd76b","_id":"@chess-pgn/chess-pgn@1.4.2","bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-2mOf0ro/dbaZIXN85+AJLY9+r2gOq9FVbTUgKL/FR2WNa5vzJSMCvIVcAIrzJLeHacQjtAC2uSaJLnx9Snmj+g==","shasum":"82181389ceeb4da9cca84b817fcbd76220c618c7","tarball":"https://registry.npmjs.org/@chess-pgn/chess-pgn/-/chess-pgn-1.4.2.tgz","fileCount":48,"unpackedSize":1123777,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@chess-pgn%2fchess-pgn@1.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHmt/JG9Z9IrWKUmQpPWKr9CijER+joq0G34eSf9w1I/AiEAjYp2rW1ZBz+46gP92TxGsuz0vWf+x6SB++NguSapW+I="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eec1ca8-7c44-4787-b268-77079f5995ab"}},"directories":{},"maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chess-pgn_1.4.2_1788883304327_0.78528931308365"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-16T20:24:18.887Z","modified":"2026-09-08T16:01:44.946Z","0.1.0-beta.1":"2025-11-16T20:24:19.147Z","0.1.0-beta.2":"2025-11-17T23:13:31.162Z","0.1.0-beta.3":"2025-11-20T00:22:44.773Z","0.1.0-beta.4":"2025-11-21T20:34:27.656Z","0.1.0-beta.5":"2025-11-23T14:46:40.875Z","1.0.0":"2025-11-24T16:16:07.854Z","1.0.1":"2025-12-01T17:34:12.942Z","1.1.0":"2026-07-02T18:42:58.607Z","1.1.1":"2026-07-02T18:51:38.680Z","1.2.0":"2026-07-04T00:16:41.837Z","1.4.1":"2026-08-12T15:55:11.247Z","1.4.2":"2026-09-08T16:01:44.486Z"},"bugs":{"url":"https://github.com/JeffML/chessPGN/issues"},"author":{"name":"Jeff Lowery","email":"jlowery2663@gmail.com"},"license":"BSD-2-Clause","homepage":"https://github.com/JeffML/chessPGN","keywords":["chess","pgn","pgn-parser","typescript","parser","chess-library","fen","chess-game","multi-game-pgn","chess.js","chess-moves","game-parser","worker-threads","chess-engine","chess-validation"],"repository":{"type":"git","url":"git+https://github.com/JeffML/chessPGN.git"},"description":"Chess library with enhanced PGN support for parsing large, multi-game PGN files.","maintainers":[{"name":"jeffml","email":"jlowery2663@gmail.com"}],"readme":"![logo](./chesspgnlogo.png)\n\n# chessPGN\n\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/JeffML/chessPGN/node.js.yml?branch=main)](https://github.com/JeffML/chessPGN/actions)\n[![npm](https://img.shields.io/npm/v/@chess-pgn/chess-pgn?color=blue)](https://www.npmjs.com/package/@chess-pgn/chess-pgn)\n[![npm](https://img.shields.io/npm/dm/@chess-pgn/chess-pgn)](https://www.npmjs.com/package/@chess-pgn/chess-pgn)\n[![GitHub stars](https://img.shields.io/github/stars/JeffML/chessPGN)](https://github.com/JeffML/chessPGN/stargazers)\n[![License](https://img.shields.io/badge/license-BSD--2--Clause-blue)](https://github.com/JeffML/chessPGN/blob/main/LICENSE)\n\n**chessPGN** is a comprehensive TypeScript chess library for chess move\ngeneration, validation, and PGN parsing. Based on a fork of\n[chess.js](https://github.com/jhlywa/chess.js), it extends the original with\npowerful multi-game PGN file parsing capabilities while maintaining full\nbackward compatibility.\n\n## ✨ Features\n\n- ♟️ **Complete Chess Rules** - Move generation, validation,\n  check/checkmate/stalemate detection\n- 📝 **PGN Support** - Parse and generate Portable Game Notation\n- 🎯 **Multi-Game Parsing** - Efficiently handle large PGN files with\n  cursor-based iteration\n- ⚡ **Worker Thread Support** - Parallel parsing for 3-5x performance boost on\n  large files\n- 🔍 **Position Analysis** - Attack detection, piece finding, board queries\n- 📚 **Rich API** - Both legacy (`ChessPGN`) and modern (`Game`) interfaces\n- 🎨 **TypeScript First** - Full type safety with comprehensive type definitions\n- ✅ **Well Tested** - 500+ tests with high code coverage\n- 📖 **Extensive Documentation** - Detailed guides and API reference\n\n## 📦 Installation\n\n```bash\nnpm install @chess-pgn/chess-pgn\n```\n\n## 🚀 Quick Start\n\n### ♻️ Drop-in Replacement for chess.js\n\n**chessPGN** is a drop-in replacement for\n[chess.js](https://github.com/jhlywa/chess.js). Simply swap the import:\n\n```typescript\n// import { Chess } from 'chess.js'\nimport { ChessPGN as Chess } from '@chess-pgn/chess-pgn'\n```\n\nThe ChessPGN class implements the same API as chess.js, so existing code works\nwithout further changes. You gain multi-game PGN parsing, worker thread support,\nand TypeScript-first types — with no rewrites required.\n\n### Basic Game\n\n```typescript\nimport { ChessPGN } from '@chess-pgn/chess-pgn'\n\nconst chess = new ChessPGN()\n\n// Make some moves\nchess.move('e4')\nchess.move('e5')\nchess.move('Nf3')\nchess.move('Nc6')\n\n// Get current position\nconsole.log(chess.fen())\n// rnbqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3\n\n// Check game state\nconsole.log(chess.isCheck()) // false\nconsole.log(chess.isCheckmate()) // false\n\n// Get legal moves\nconsole.log(chess.moves())\n// ['a3', 'a4', 'b3', 'b4', 'c3', 'c4', 'd3', 'd4', ...]\n\n// Export as PGN\nconsole.log(chess.pgn())\n// 1. e4 e5 2. Nf3 Nc6\n```\n\n### Random Game\n\n```typescript\nimport { ChessPGN } from '@chess-pgn/chess-pgn'\n\nconst chess = new ChessPGN()\n\nwhile (!chess.isGameOver()) {\n  const moves = chess.moves()\n  const move = moves[Math.floor(Math.random() * moves.length)]\n  chess.move(move)\n}\n\nconsole.log(chess.pgn())\n```\n\n### Load and Parse PGN\n\n```typescript\nimport { ChessPGN } from '@chess-pgn/chess-pgn'\n\nconst pgn = `[Event \"Casual Game\"]\n[Site \"New York\"]\n[Date \"2025.01.15\"]\n[White \"Alice\"]\n[Black \"Bob\"]\n[Result \"1-0\"]\n\n1. e4 e5 2. Nf3 Nc6 3. Bb5 1-0`\n\nconst chess = new ChessPGN()\nchess.loadPgn(pgn)\n\nconsole.log(chess.getHeaders())\n// { Event: 'Casual Game', Site: 'New York', ... }\n\nconsole.log(chess.history())\n// ['e4', 'e5', 'Nf3', 'Nc6', 'Bb5']\n```\n\n### Multi-Game PGN Files\n\nEfficiently parse large PGN files with multiple games:\n\n```typescript\nimport { indexPgnGames } from '@chess-pgn/chess-pgn'\nimport * as fs from 'fs'\n\nconst pgnContent = fs.readFileSync('games.pgn', 'utf8')\n\n// Create cursor with worker threads for parallel parsing\nconst cursor = indexPgnGames(pgnContent, {\n  workers: 4,\n  workerBatchSize: 10,\n  onError: (err, idx) => console.error(`Game ${idx}: ${err.message}`),\n})\n\n// Iterate through games\nfor await (const game of cursor) {\n  const headers = game.getHeaders()\n  console.log(`${headers.White} vs ${headers.Black}: ${headers.Result}`)\n\n  // Analyze final position\n  if (game.isCheckmate()) {\n    console.log('Checkmate!')\n  }\n}\n\n// Clean up worker threads\nawait cursor.terminate()\n```\n\n### Position Analysis\n\n```typescript\nimport { ChessPGN } from '@chess-pgn/chess-pgn'\n\nconst chess = new ChessPGN()\nchess.move('e4')\nchess.move('e5')\nchess.move('Nf3')\n\n// Check if square is attacked\nconsole.log(chess.isAttacked('e5', 'w')) // true (knight attacks e5)\n\n// Get all attackers of a square\nconsole.log(chess.attackers('e5'))\n// ['f3']\n\n// Find pieces\nconsole.log(chess.findPiece({ type: 'n', color: 'w' }))\n// ['b1', 'f3']\n\n// Get piece at square\nconsole.log(chess.get('f3'))\n// { type: 'n', color: 'w' }\n```\n\n### Verbose Move Details\n\n```typescript\nimport { ChessPGN } from '@chess-pgn/chess-pgn'\n\nconst chess = new ChessPGN()\nchess.move('e4')\nchess.move('e5')\nchess.move('Nf3')\n\n// Get detailed move history\nconst history = chess.history({ verbose: true })\nconsole.log(history)\n/*\n[\n  {\n    color: 'w',\n    from: 'e2',\n    to: 'e4',\n    piece: 'p',\n    san: 'e4',\n    before: 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1',\n    after: 'rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1'\n  },\n  ...\n]\n*/\n```\n\n### Comments and Annotations\n\n```typescript\nimport { ChessPGN } from '@chess-pgn/chess-pgn'\n\nconst chess = new ChessPGN()\n\nchess.move('e4')\nchess.setComment('The most popular opening move')\nchess.setSuffixAnnotation('!!') // Brilliant move\n\nchess.move('e5')\nchess.setComment('Symmetric response')\nchess.setSuffixAnnotation('!') // Good move\n\n// Get all comments\nconst comments = chess.getComments()\nconsole.log(comments)\n/*\n[\n  {\n    fen: 'rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1',\n    comment: 'The most popular opening move',\n    suffixAnnotation: '!!'\n  },\n  ...\n]\n*/\n\n// Export with comments\nconsole.log(chess.pgn())\n// 1. e4!! {The most popular opening move} e5! {Symmetric response}\n```\n\n## 🎓 API Overview\n\n### Core Classes\n\n- **`ChessPGN`** - Legacy wrapper class with full chess functionality\n- **`Game`** - Modern core implementation (can be used directly)\n- **`Move`** - Rich move object with detailed information\n\n### Common Methods\n\n#### Position Manipulation\n\n- `load(fen)` - Load position from FEN notation\n- `reset()` - Reset to starting position\n- `clear()` - Clear the board\n- `fen()` - Get FEN string of current position\n\n#### Making Moves\n\n- `move(move)` - Make a move (SAN string or object)\n- `moves()` - Get all legal moves\n- `undo()` - Undo last move\n- `history()` - Get move history\n\n#### Game State\n\n- `isCheck()` - Check if in check\n- `isCheckmate()` - Check if checkmate\n- `isStalemate()` - Check if stalemate\n- `isDraw()` - Check if drawn position\n- `isGameOver()` - Check if game is over\n- `turn()` - Get side to move\n\n#### Position Queries\n\n- `get(square)` - Get piece at square\n- `board()` - Get 2D board array\n- `ascii()` - Get ASCII board representation\n- `attackers(square)` - Get pieces attacking a square\n- `isAttacked(square, color)` - Check if square is attacked\n\n#### PGN Operations\n\n- `pgn()` - Export game as PGN string\n- `loadPgn(pgn)` - Load game from PGN\n- `setHeader(key, value)` - Set PGN header\n- `getHeaders()` - Get all headers\n\n#### Comments and Annotations\n\n- `setComment(comment)` - Add comment to position\n- `getComment()` - Get comment for position\n- `getComments()` - Get all comments\n- `setSuffixAnnotation(suffix)` - Add move annotation (!!, !, ?, etc.)\n\n### Multi-Game API\n\n- **`indexPgnGames(pgn, options)`** - Create cursor for multi-game PGN files\n\nOptions:\n\n- `workers` - Enable parallel parsing with worker threads\n- `workerBatchSize` - Games per batch (default: 10)\n- `strict` - Strict PGN parsing mode\n- `onError` - Error callback for malformed games\n\n## 📚 Documentation\n\n- **[Full API Documentation](https://jeffml.github.io/chessPGN/)** - Complete\n  API reference\n- **[Advanced Features](./ADVANCED_FEATURES.md)** - Multi-game parsing, worker\n  threads, cursor API\n- **[Contributing Guide](./CONTRIBUTING.md)** - How to contribute to the project\n\n## 🏗️ Architecture\n\nchessPGN uses a **delegation pattern** where `ChessPGN` wraps the core `Game`\nclass:\n\n- **`Game`** - Core chess logic, single source of truth\n- **`ChessPGN`** - Legacy wrapper, delegates to `Game`\n- **`IChessGame`** - Common interface for both classes\n\nBoth classes implement the same interface and produce identical results,\nverified through extensive parity testing across 469 real games.\n\n## 🔧 Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Run all checks (format, lint, test, build)\nnpm run check\n\n# Build the project\nnpm run build\n\n# Format code\nnpm run format\n```\n\n## 🧪 Testing\n\nchessPGN has comprehensive test coverage:\n\n- ✅ 527+ tests covering all functionality\n- ✅ Unit tests for individual features\n- ✅ Integration tests for real-world scenarios\n- ✅ Parity tests ensuring `ChessPGN` ≡ `Game`\n- ✅ Perft tests for move generation correctness\n\n## 📊 Browser and Node.js Support\n\n- **Node.js**: 20.x, 22.x, 24.x\n- **Browsers**: All modern browsers (Chrome, Firefox, Safari, Edge)\n- **TypeScript**: Full type definitions included\n\n## 🤝 Contributing\n\nContributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md)\nto get started.\n\nWays to contribute:\n\n- 🐛 Report bugs\n- 💡 Suggest features\n- 📝 Improve documentation\n- ✨ Submit pull requests\n- ⭐ Star the repository\n\n## 📄 License\n\nThis project is licensed under the **BSD 2-Clause License** - see the\n[LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- Based on [chess.js](https://github.com/jhlywa/chess.js) v1.4.0 (October 2025)\n  by Jeff Hlywa\n- Extended and maintained by Jeff Lowery\n- Thanks to all\n  [contributors](https://github.com/JeffML/chessPGN/graphs/contributors)\n\n## 📞 Support\n\n- 📖 [Documentation](https://jeffml.github.io/chessPGN/)\n- 🐛 [Issue Tracker](https://github.com/JeffML/chessPGN/issues)\n- 💬 [Discussions](https://github.com/JeffML/chessPGN/discussions)\n","readmeFilename":"README.md"}