{"_id":"@aehrc/ecl-core","_rev":"13-c566916090ba74ce2dd23ea682890631","name":"@aehrc/ecl-core","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.0":{"name":"@aehrc/ecl-core","version":"1.0.0","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.0.0","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"504770f6613b81e5790e8ae31ac5a674a62a2713","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.0.0.tgz","fileCount":231,"integrity":"sha512-hYE6STWUbiCTvlKsBdwnZH7LP5y5OS69Wvd7IqRt9Qhbof/pGAxdxyFZ5guH9bxRI6uCYOCQDr8AM23gGCDSDA==","signatures":[{"sig":"MEQCIB7ErFsU8RVZx2ILJoyOJlFctTA9g9joEMCEZRHMkzpZAiBOof152ALbqbUQxBBbvNvpY2hTdcJMTCbYi7WXCW12rA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5136569},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"903566b49ac56f33096f0ff37e1ebd07b4928227","scripts":{"test":"npm run compile && node --test dist/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.6.2","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"25.2.1","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.5","typescript":"^5.3.3","@types/node":"^20.10.6","antlr4ts-cli":"^0.5.0-alpha.4","@types/node-fetch":"^2.6.9"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.0.0_1774483036319_0.12506455751787415","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aehrc/ecl-core","version":"1.0.1","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.0.1","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"3e684a17b765ab6fdd13c7e64136d4a9fed50a8c","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.0.1.tgz","fileCount":231,"integrity":"sha512-tuemf3V+B/VpKwsi2LyfZ2TzzWCY+w2a7CIkZztN2pFF2TiKCjOPEoyWUlyADwb5vOwmwy0zMtQOUK+Ljh+Vfg==","signatures":[{"sig":"MEQCIBQpT2DAKu2fFh3vJqJRseH+zyHaZmAaByqScR/pON4YAiAuKJhkKJNwOTIaFlOCzY0e5shEDM3BPRTKBBZCLq4P2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5136670},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"8bb179d9dbedc4ba206c5549b9d19a2668a65329","scripts":{"test":"npm run compile && node --test dist/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.12.1","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"22.22.1","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.5","typescript":"^5.3.3","@types/node":"^20.10.6","antlr4ts-cli":"^0.5.0-alpha.4","@types/node-fetch":"^2.6.9"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.0.1_1774592085817_0.8773121583357337","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aehrc/ecl-core","version":"1.0.2","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.0.2","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"8e1efc4ccce75022b8f797cbb22bfa2623f4c34d","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.0.2.tgz","fileCount":231,"integrity":"sha512-KJblwSo+x/lR4lBatoKpSc6naG8/85dncjTbdPBYyh2Vk0Y7F6o8VhXCxGOVjO9MKXrn93HpzdMO61FJXLci9A==","signatures":[{"sig":"MEUCIQCpaJzhQMHkqoAzSb/5HbHbBGrDEYndw+8I67fGH3j2nQIgGT2mmbDqxOa4YG0NV+AftkuoHM5zOF/Dt4cky6mKv/o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5136670},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"29a09176f50015ce9372a60c2e618dec51b7a382","scripts":{"test":"npm run compile && node --test dist/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.12.1","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"22.22.1","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.5","typescript":"^5.3.3","@types/node":"^20.10.6","antlr4ts-cli":"^0.5.0-alpha.4","@types/node-fetch":"^2.6.9"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.0.2_1774950819307_0.3154570624318347","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aehrc/ecl-core","version":"1.0.3","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.0.3","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"5a6927cef8cf47bc28181fc2b01e68b531b6d307","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.0.3.tgz","fileCount":6,"integrity":"sha512-OyN3AE7QdlHfw04PDsrS8JqizmxzePG8PjQ56NShKafHYhs2L+eEDbxoInKGVZd6NEuWQEVbn+H7hZko30TWFQ==","signatures":[{"sig":"MEUCIQDrYsfgErLHIKGQkxXUltBWVCAX1fi70V6reDDQ53MxygIgEduvtXIm0y3PPnXQ/PlR7gUHQJPQ1FdvcNJFY4ffikg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4003272},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"24a6ce265ec3c8d32ea1f2f08848eed8e96bb839","scripts":{"test":"tsc -b && node --test dist-tsc/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b && vite build","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.12.1","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"22.22.1","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.1","rimraf":"^5.0.5","typescript":"^5.3.3","@types/node":"^20.10.6","antlr4ts-cli":"^0.5.0-alpha.4","vite-plugin-dts":"^4.5.4","@types/node-fetch":"^2.6.9","vite-plugin-node-polyfills":"^0.25.0"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.0.3_1774964050884_0.25129164337721854","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aehrc/ecl-core","version":"1.0.4","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.0.4","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"4870683713ede38bf294fa01d4cd910586695ee4","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.0.4.tgz","fileCount":6,"integrity":"sha512-amoAhGA+ZII0EJKdQQg6QehYZgdPwZ8+mtpDa1HQjuwJGraYdvcpsodJrhr7YE4xN+jDyuAgzA35poDsLsTWPw==","signatures":[{"sig":"MEQCIHHmXV+Gim49SMUXXRji2Jkz+otEE8UdxEmLzilaUlZoAiArm7cn1B0B2dEU2auwy3BXU3xdn1pypbfYRpJZKtsDrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4003412},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"82ee208b2f7f5b3a58619a6a947eb61baf9e6562","scripts":{"test":"tsc -b && node --test dist-tsc/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b && vite build","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.12.1","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"22.22.1","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.1","rimraf":"^5.0.5","typescript":"^5.3.3","@types/node":"^20.10.6","antlr4ts-cli":"^0.5.0-alpha.4","vite-plugin-dts":"^4.5.4","@types/node-fetch":"^2.6.9","vite-plugin-node-polyfills":"^0.25.0"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.0.4_1774967931560_0.3642192614603692","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aehrc/ecl-core","version":"1.1.0","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.1.0","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"3da3cff61dd78fa81326b7116587ef645b815aaf","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.1.0.tgz","fileCount":6,"integrity":"sha512-NdBGwr/yyhB6YBdEbHHQiWZ4u72i4R9li2giRBPf3xPEUYiujw2vk1empVe+Lxo8ofcAqqok9I+Ti8UY4JkZhQ==","signatures":[{"sig":"MEQCIFcBMz3sTuO+9Wblx5BgNRNj2i2QtU1pMWXJHv2NS51DAiBj3XMQiHaA6NbWuK7kRr4tYnznyBWdS6noHB3M9QI9aA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4036579},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"658f464f3ab53a72cd03fa1c560737b8b86c8e3b","scripts":{"test":"tsc -b && node --test dist-tsc/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b && vite build","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.12.1","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"22.22.2","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.1","rimraf":"^5.0.5","typescript":"^5.3.3","@types/node":"^20.10.6","antlr4ts-cli":"^0.5.0-alpha.4","vite-plugin-dts":"^4.5.4","@types/node-fetch":"^2.6.9","vite-plugin-node-polyfills":"^0.25.0"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.1.0_1775301454408_0.17189593013323123","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@aehrc/ecl-core","version":"1.1.1","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.1.1","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"f8e10ede2356b811b0aa328ae7da61719f1fbbfe","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.1.1.tgz","fileCount":6,"integrity":"sha512-6rKmJSuLPBOVXs+KdgdU3pPv0dINWI8VDy2P5RD8+YaRDQwzun6F5KRPrI2IWL0U7H18AkRg/7oh9bkPVbcoIQ==","signatures":[{"sig":"MEQCIH5fJmodZmAhrxGwN4JdDnXpx8/idTv659VHZSiSsjXpAiBKZTXM2bb52u6hmEGk3SNjWmTICwLusUUYiuqlGlWcdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4036579},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"20a06df2b501d2568c79d7946ecb1bbb6086186e","scripts":{"test":"tsc -b && node --test dist-tsc/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b && vite build","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.12.1","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"22.22.2","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.1","rimraf":"^5.0.5","typescript":"^5.3.3","@types/node":"^20.10.6","antlr4ts-cli":"^0.5.0-alpha.4","vite-plugin-dts":"^4.5.4","@types/node-fetch":"^2.6.9","vite-plugin-node-polyfills":"^0.25.0"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.1.1_1775609328793_0.6236260082962066","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@aehrc/ecl-core","version":"1.1.2","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.1.2","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"614f843870d65ff4472eca97d168041d98c28ff9","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.1.2.tgz","fileCount":6,"integrity":"sha512-1z3Vz2U5SgWFB+QTiT1xrqx3syTMVxnd5xnFuGunUfzBtHrz8QK4ymhfRJvjZtHS5oZWlQMNh6kAGcu5q90Ljw==","signatures":[{"sig":"MEYCIQCryiTFjcmzf1VzSmpe8uSe/VajLyL6dlmbJVsZS1ko3gIhAMI0HOq7V+6ZGT2TyWIngEk0yE+9SpT6MwqhVdMBT5iE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4036579},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"1360bb4842948b1974f46cc371fa191c91cfa541","scripts":{"test":"tsc -b && node --test dist-tsc/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b && vite build","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.12.1","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"22.22.2","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.1","rimraf":"^5.0.5","typescript":"^5.3.3","@types/node":"^20.10.6","antlr4ts-cli":"^0.5.0-alpha.4","vite-plugin-dts":"^4.5.4","@types/node-fetch":"^2.6.9","vite-plugin-node-polyfills":"^0.25.0"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.1.2_1775708025824_0.33234419998494147","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aehrc/ecl-core","version":"1.2.0","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.2.0","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"cd80b03752b0adf76e8dbf80741468f004d3a7a4","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.2.0.tgz","fileCount":6,"integrity":"sha512-m/bP3raMcHKV0c5iqsMMpoMKTIBZRW7e4ixqET4Rc0i4kSSuHkWeeX4LVgTkjuE+mHOqjzx2w+tg7G1JFsseeA==","signatures":[{"sig":"MEYCIQC7sQwK2Khr3hf+MnPP28sBbPS88J8UQyCtnUv1euES8AIhAJ1StdAQQoz0YytOJ09QXY9USUtuGXqF9P+hWvlK5TLZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4099764},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"13a206ad54f603ffef6438be479ada7ec53d67dd","scripts":{"test":"tsc -b && node --test dist-tsc/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b && vite build","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.19.0","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"22.23.2","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.1","rimraf":"^5.0.5","typescript":"^6.0.2","@types/node":"^25.5.0","antlr4ts-cli":"^0.5.0-alpha.4","vite-plugin-dts":"^4.5.4","@types/node-fetch":"^2.6.9","vite-plugin-node-polyfills":"^0.28.0"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.2.0_1787312441734_0.2605823781596728","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@aehrc/ecl-core","version":"1.3.0","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.3.0","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"a38ad566a936c2521ed6ae80ab2be42c44c8fcc1","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.3.0.tgz","fileCount":6,"integrity":"sha512-b/OUjSg5X8GpCPX3NmmOpeFLuvZIl7zXnWMmpuKXg7/rbSY41wiIWNJcn420uXtecDxkE1zGLh50QMOVoqHOvg==","signatures":[{"sig":"MEQCIAmmrkL6mk0DKp09S3KRkL8J0lOZp71xAd6XT68kasv5AiAGk7GBSPA/Lr0cxVY1VnnP+ilPb7xl5YGZ/rK1x2GJtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4099360},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"3418f96b2920db6f0fba981274564fec1f9c6d39","scripts":{"test":"tsc -b && node --test dist-tsc/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b && vite build","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.19.0","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"22.23.2","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.1","rimraf":"^5.0.5","typescript":"^6.0.2","@types/node":"^25.5.0","antlr4ts-cli":"^0.5.0-alpha.4","vite-plugin-dts":"^4.5.4","@types/node-fetch":"^2.6.9","vite-plugin-node-polyfills":"^0.28.0"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.3.0_1787531066771_0.32333835083862894","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@aehrc/ecl-core","version":"1.3.1","author":{"url":"CSIRO","name":"Commonwealth Scientific and Industrial Research Organisation"},"license":"Apache-2.0","_id":"@aehrc/ecl-core@1.3.1","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"dist":{"shasum":"4e859257983fe908fcaef78b08b279eaa7aeb393","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.3.1.tgz","fileCount":6,"integrity":"sha512-CKdVwMHWhU3lXxGBqZP+PVFaVi56k8Xb9LzXuFbGtJPX7zruCJv6EVxFEo1aHXWjygUSlJh6iX7XsfqWyP/Cgg==","signatures":[{"sig":"MEYCIQDrTglErPHAX/4lshHD4WbJ9Ro8n0Jzvhxf7tLiWmatHwIhAPXMZ6XSzEUSCIc/S/45wVPMlhVOHKNO5c2yrB8HoY9R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4099360},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"19e4835ae23e8e3da1c0b7b674037dd3dc5fbfee","scripts":{"test":"tsc -b && node --test dist-tsc/test/*.test.js","clean":"rimraf dist src/parser/generated","watch":"tsc -b --watch","compile":"tsc -b && vite build","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"repository":{"url":"git+https://github.com/aehrc/ecl-lsp.git","type":"git","directory":"packages/ecl-core"},"_npmVersion":"11.19.1","description":"Core ECL parsing, formatting, validation, and terminology library","directories":{},"_nodeVersion":"22.23.2","dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.1","rimraf":"^5.0.5","typescript":"^6.0.2","@types/node":"^25.5.0","antlr4ts-cli":"^0.5.0-alpha.4","vite-plugin-dts":"^4.5.4","@types/node-fetch":"^2.6.9","vite-plugin-node-polyfills":"^0.28.0"},"optionalDependencies":{"node-fetch":"^2.7.0"},"_npmOperationalInternal":{"tmp":"tmp/ecl-core_1.3.1_1788220261130_0.8715849770622799","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@aehrc/ecl-core","version":"1.4.0","publishConfig":{"access":"public"},"license":"Apache-2.0","author":{"name":"Commonwealth Scientific and Industrial Research Organisation","url":"CSIRO"},"repository":{"type":"git","url":"git+https://github.com/aehrc/ecl-lsp.git","directory":"packages/ecl-core"},"homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"description":"Core ECL parsing, formatting, validation, and terminology library","main":"dist/index.cjs","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"scripts":{"prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","antlr4ts":"antlr4ts -visitor -no-listener -o src/parser/generated ../../grammar/*.g4","precompile":"npm run antlr4ts","compile":"tsc -b && vite build","watch":"tsc -b --watch","clean":"rimraf dist src/parser/generated","test":"tsc -b && node --test dist-tsc/test/*.test.js"},"engines":{"node":">=22.0.0"},"dependencies":{"antlr4ts":"^0.5.0-alpha.4"},"optionalDependencies":{"node-fetch":"^2.7.0"},"devDependencies":{"@types/node":"^26.4.0","@types/node-fetch":"^2.6.9","antlr4ts-cli":"^0.5.0-alpha.4","rimraf":"^5.0.5","typescript":"^6.0.2","vite":"^8.2.2","vite-plugin-dts":"^5.0.3","vite-plugin-node-polyfills":"^0.28.0"},"gitHead":"b0165496091ab63a876c2ae04ff05fe7894092d3","_id":"@aehrc/ecl-core@1.4.0","_nodeVersion":"22.23.2","_npmVersion":"11.19.1","dist":{"integrity":"sha512-6W2e0cc6VS74ILcakW55h2/NBV9mX+S0qOJAEz9OR7eh3QM3irE7yM4/JOG0uQB9/o1RyuSQWpzuYE6tJAth/g==","shasum":"6ab4b1f6df073da6bd872ca815bd2fea246077fe","tarball":"https://registry.npmjs.org/@aehrc/ecl-core/-/ecl-core-1.4.0.tgz","fileCount":131,"unpackedSize":4294231,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aehrc%2fecl-core@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCfF3adEl1yPblPsXtJzaDuvHKrNkXlF8dy5ZRCfFu7cwIgQdRqm+FTDT8cIXLFQ+WbL+mZUTzYetXdos6idlz7pXo="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae8d4904-d1cb-439c-9a76-d7d8f84f4bfc"}},"directories":{},"maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ecl-core_1.4.0_1788490300297_0.0806420607359799"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-25T23:57:16.200Z","modified":"2026-09-04T02:51:40.986Z","1.0.0":"2026-03-25T23:57:16.507Z","1.0.1":"2026-03-27T06:14:46.055Z","1.0.2":"2026-03-31T09:53:39.536Z","1.0.3":"2026-03-31T13:34:11.145Z","1.0.4":"2026-03-31T14:38:51.766Z","1.1.0":"2026-04-04T11:17:34.651Z","1.1.1":"2026-04-08T00:48:48.987Z","1.1.2":"2026-04-09T04:13:46.005Z","1.2.0":"2026-08-21T11:40:41.904Z","1.3.0":"2026-08-24T00:24:26.948Z","1.3.1":"2026-08-31T23:51:01.323Z","1.4.0":"2026-09-04T02:51:40.487Z"},"bugs":{"url":"https://github.com/aehrc/ecl-lsp/issues"},"author":{"name":"Commonwealth Scientific and Industrial Research Organisation","url":"CSIRO"},"license":"Apache-2.0","homepage":"https://github.com/aehrc/ecl-lsp/tree/main/packages/ecl-core#readme","repository":{"type":"git","url":"git+https://github.com/aehrc/ecl-lsp.git","directory":"packages/ecl-core"},"description":"Core ECL parsing, formatting, validation, and terminology library","maintainers":[{"name":"johngrimes","email":"John.Grimes@csiro.au"},{"name":"dionmcm","email":"dion.mcmurtrie@csiro.au"},{"name":"jgsuess","email":"jgsuess@gmail.com"}],"readme":"# @aehrc/ecl-core\n\nZero-dependency core library for SNOMED CT Expression Constraint Language (ECL) 2.2 — parsing, formatting, validation, completion, refactoring, and terminology integration.\n\n## Install\n\n```bash\nnpm install @aehrc/ecl-core\n```\n\n**Runtime dependencies:**\n\n- `antlr4ts` — ANTLR4 TypeScript runtime (required)\n- `node-fetch` — HTTP client for FHIR integration (optional; not needed if you provide your own `ITerminologyService`)\n\n## API Overview\n\n### Parsing\n\n```typescript\nimport { parseECL, extractConceptIds, groupIntoExpressions } from '@aehrc/ecl-core';\n\n// Parse an ECL expression into an AST\nconst result = parseECL('< 404684003 |Clinical finding|');\nconsole.log(result.ast); // ExpressionNode\nconsole.log(result.errors); // ParseError[]\n\n// Extract all concept IDs referenced in the AST\nconst concepts = extractConceptIds(result.ast);\n// [{ id: '404684003', term: 'Clinical finding', range: { ... } }]\n\n// Split a multi-expression document into individual expressions\nconst expressions = groupIntoExpressions(text);\n```\n\n**AST types:** `ExpressionNode`, `CompoundExpressionNode`, `RefinedExpressionNode`, `SubExpressionNode`, `AttributeNode`, `FilterConstraintNode`, `HistorySupplementNode`\n\n### Formatting\n\n```typescript\nimport { formatDocument, defaultFormattingOptions } from '@aehrc/ecl-core';\n\nconst formatted = formatDocument('<<404684003:246075003=<<19829001', {\n  ...defaultFormattingOptions,\n  maxLineLength: 80,\n});\n```\n\n**Options:** `indentSize`, `indentStyle`, `spaceAroundOperators`, `maxLineLength`, `alignTerms`, `wrapComments`, `breakOnOperators`, `breakOnRefinementComma`, `breakAfterColon`\n\nRange formatting is also supported via `expandToExpressionBoundaries`, `getExpressionsInRange`, and `formatRangeExpressions`.\n\n### Validation\n\n```typescript\nimport { refineParseError } from '@aehrc/ecl-core';\n\n// Convert ANTLR error messages to user-friendly diagnostics\nconst refined = refineParseError({ line, column, message, expression });\n```\n\n### Semantic Validation\n\n```typescript\nimport { validateSemantics, FhirTerminologyService } from '@aehrc/ecl-core';\n\nconst terminology = new FhirTerminologyService('https://tx.ontoserver.csiro.au/fhir');\nconst diagnostics = await validateSemantics(ast, text, terminology);\n```\n\n### Completion\n\n```typescript\nimport { getCompletionItems, getCompletionItemsWithSearch } from '@aehrc/ecl-core';\n\n// Synchronous completions (operators, keywords, snippets)\nconst items = getCompletionItems(text, offset);\n\n// With FHIR concept search (async)\nconst items = await getCompletionItemsWithSearch(text, offset, terminology);\n```\n\n### Refactoring\n\n```typescript\nimport { getRefactoringActions } from '@aehrc/ecl-core';\n\nconst actions = getRefactoringActions({ text, range, ast, errors });\n// Returns: strip/add display terms, simplify, add/remove parentheses,\n//          history supplement, description filter\n```\n\n### Terminology\n\n```typescript\nimport { FhirTerminologyService } from '@aehrc/ecl-core';\n\nconst fhir = new FhirTerminologyService(\n  'https://tx.ontoserver.csiro.au/fhir', // server URL\n  2000, // lookup timeout (ms)\n  '', // SNOMED version URI (empty = server default)\n);\n\nconst concept = await fhir.lookupConcept('404684003');\n// { id, fsn, pt, active }\n\nconst results = await fhir.evaluateEcl('< 404684003');\n// { concepts: [...], total }\n```\n\n### Canonical Comparison\n\n```typescript\nimport { canonicalise, compareExpressions } from '@aehrc/ecl-core';\n\n// Normalise to a deterministic canonical form (strips terms, sorts operands/attributes)\ncanonicalise('< 404684003 |Clinical finding| OR < 19829001');\n// → '<19829001 OR <404684003'\n\n// Compare two expressions for structural equivalence\ncompareExpressions('< 404684003 OR < 19829001', '< 19829001 OR < 404684003');\n// → 'structurally_equivalent'\n```\n\nReturns `'identical'`, `'structurally_equivalent'`, or `'different'`. Throws `CanonicaliseError` for unparseable input. Pure, synchronous, zero-network-dependency.\n\n### Historical Associations\n\n```typescript\nimport { FhirTerminologyService } from '@aehrc/ecl-core';\n\nconst fhir = new FhirTerminologyService({ baseUrl: 'https://tx.ontoserver.csiro.au/fhir' });\n\n// Look up historical association targets for an inactive concept\nconst associations = await fhir.getHistoricalAssociations('261282001');\n// [{ type: 'same-as', refsetId: '900000000000527005', targets: [{ code: '52323007', display: 'Helleborus niger' }] }]\n```\n\nQueries SNOMED CT historical association reference sets (SAME AS, REPLACED BY, POSSIBLY EQUIVALENT TO, ALTERNATIVE) via FHIR `ConceptMap/$translate`.\n\n### Knowledge\n\nStructured ECL reference documentation — 50 articles across 6 categories.\n\n```typescript\nimport { getArticle, getArticlesByCategory, getOperatorHoverDoc, getGuide } from '@aehrc/ecl-core';\n\nconst doc = getOperatorHoverDoc('<<'); // Hover documentation for descendantOrSelfOf\nconst articles = getArticlesByCategory('operators');\n```\n\n### Semantic Tokens\n\n```typescript\nimport { computeSemanticTokens, eclTokenTypes, eclTokenModifiers } from '@aehrc/ecl-core';\n\nconst tokens = computeSemanticTokens(text);\n```\n\n### Utility\n\n```typescript\nimport { isValidSnomedId, isValidConceptId, isValidDescriptionId } from '@aehrc/ecl-core';\nimport { checkMixedRefinementOperators } from '@aehrc/ecl-core';\nimport { analyzeExpression } from '@aehrc/ecl-core';\n```\n\n## License\n\nCopyright 2026 Commonwealth Scientific and Industrial Research Organisation (CSIRO) ABN 41 687 119 230\n\nApache License 2.0 — see [LICENSE](../../LICENSE).\n","readmeFilename":"README.md"}