{"_id":"@coremarine/norsub-emru-nodered","_rev":"11-542bf2e5d00aeb4438f5205c5b6172a6","name":"@coremarine/norsub-emru-nodered","dist-tags":{"latest":"6.0.0"},"versions":{"1.0.0":{"name":"@coremarine/norsub-emru-nodered","version":"1.0.0","keywords":["node-red","mru","imu","norsub","nmea","nmea0183","0183","parser"],"author":{"name":"CoreMarine"},"license":"MIT","_id":"@coremarine/norsub-emru-nodered@1.0.0","maintainers":[{"name":"valentina-rubane","email":"vru@core-marine.com"},{"name":"crisconru","email":"crisconru@gmail.com"},{"name":"coremarinedev","email":"dev@core-marine.com"}],"homepage":"https://github.com/core-marine-dev/packages/norsub-emru-nodered#readme","bugs":{"url":"https://github.com/core-marine-dev/devices/issues"},"dist":{"shasum":"2a8770f351c190b44cbff85118b5e1c1502ce220","tarball":"https://registry.npmjs.org/@coremarine/norsub-emru-nodered/-/norsub-emru-nodered-1.0.0.tgz","fileCount":8,"integrity":"sha512-k5PrB+aG+TC4/WF/bUwLyY1D25TLqwJXK9ofOcfQRXF3Ezrrv9ReGsZUJCh7JfzvforNXkZBLP7LnWcfpxVdUA==","signatures":[{"sig":"MEUCIQCznn1G0NE819lJGjc70kcSmlNAYBf9yMYP+fCjYBQjCQIgAMMTYOEm8VsXPVi7yCte+SlRZ/v9acL1S7AWjsYtuKg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80481},"main":"index.js","engines":{"node":">=18.0.0"},"gitHead":"362862e9d3cb3c5937e4b9e6785867360b7ba488","scripts":{"test":"mocha \"tests/**/*.test.js\"","docker":"sh manual_tests.sh"},"_npmUser":{"name":"coremarinedev","email":"dev@core-marine.com"},"node-red":{"nodes":{"cma-norsub-parser":"src/parser.js"},"version":">=3.0.0"},"repository":{"url":"git+https://github.com/core-marine-dev/devices.git","type":"git"},"_npmVersion":"10.5.2","description":"Node-Red component to work with NorSub eMRU devices","directories":{},"_nodeVersion":"20.13.1","dependencies":{"@coremarine/norsub-emru":"^1.0.8"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/norsub-emru-nodered_1.0.0_1716199361214_0.8531810536542228","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@coremarine/norsub-emru-nodered","version":"1.0.1","keywords":["node-red","mru","imu","norsub","nmea","nmea0183","0183","parser"],"author":{"name":"CoreMarine"},"license":"MIT","_id":"@coremarine/norsub-emru-nodered@1.0.1","maintainers":[{"name":"valentina-rubane","email":"vru@core-marine.com"},{"name":"crisconru","email":"crisconru@gmail.com"},{"name":"coremarinedev","email":"dev@core-marine.com"}],"homepage":"https://github.com/core-marine-dev/devices/tree/main/packages/norsub-emru-nodered","bugs":{"url":"https://github.com/core-marine-dev/devices/issues"},"dist":{"shasum":"bb2059855124cb1b6fac46041c43ca8768dcde40","tarball":"https://registry.npmjs.org/@coremarine/norsub-emru-nodered/-/norsub-emru-nodered-1.0.1.tgz","fileCount":8,"integrity":"sha512-30D2k35DLXEw8i8MlXu6zGsLVhDfM0gINybM9goJKOKcoOOP7gmsuQgjelh32c6QWuDL2HXNZy3HTXJn7Iiysw==","signatures":[{"sig":"MEUCIQCfZYyZpz2/0Niq/a97ulbgK/oa6wkP6pcDvjwaaSHYngIgL6kJ9jvV9UaUMzBAof1/I7mxf2zbRDLgFKVLUkcTiOg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80492},"main":"index.js","engines":{"node":">=18.0.0"},"gitHead":"b3208594121eeff3b37ea2c1e117f11b0a4b82cc","scripts":{"test":"mocha \"tests/**/*.test.js\"","docker":"sh manual_tests.sh"},"_npmUser":{"name":"coremarinedev","email":"dev@core-marine.com"},"node-red":{"nodes":{"cma-norsub-parser":"src/parser.js"},"version":">=3.0.0"},"repository":{"url":"git+https://github.com/core-marine-dev/devices.git","type":"git"},"_npmVersion":"10.5.2","description":"Node-Red component to work with NorSub eMRU devices","directories":{},"_nodeVersion":"20.13.1","dependencies":{"@coremarine/norsub-emru":"^1.0.8"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/norsub-emru-nodered_1.0.1_1716274142503_0.02675007351702896","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@coremarine/norsub-emru-nodered","version":"1.1.0","keywords":["node-red","mru","imu","norsub","nmea","nmea0183","0183","parser"],"author":{"name":"CoreMarine"},"license":"MIT","_id":"@coremarine/norsub-emru-nodered@1.1.0","maintainers":[{"name":"valentina-rubane","email":"vru@core-marine.com"},{"name":"crisconru","email":"crisconru@gmail.com"},{"name":"coremarinedev","email":"dev@core-marine.com"}],"homepage":"https://github.com/core-marine-dev/devices/tree/main/packages/norsub-emru-nodered","bugs":{"url":"https://github.com/core-marine-dev/devices/issues"},"dist":{"shasum":"9cab6aed8ed2b347ede4deee2b3e9da116429061","tarball":"https://registry.npmjs.org/@coremarine/norsub-emru-nodered/-/norsub-emru-nodered-1.1.0.tgz","fileCount":8,"integrity":"sha512-M7yjEJ3Fl/mCYoOjY5p+oVT745Zm9xgnDTFx9oKiHn5eXi4DLNS5loTWuX52WzBShZHoQBKdBV1XyUrOmr+TeA==","signatures":[{"sig":"MEUCIQCRA+PQurryek7q6HhjAwJaoGl70NJBBJNLsXXdNlgTrQIgfB9jYaTRWE0XxL7jNNXF4ObaBXia4HwXEmTcyIQgP+M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80492},"main":"index.js","engines":{"node":">=18.0.0"},"gitHead":"c421bacf076e40ee0c5d1e2246755392bb6e8f3a","scripts":{"test":"mocha \"tests/**/*.test.js\"","docker":"sh manual_tests.sh"},"_npmUser":{"name":"coremarinedev","email":"dev@core-marine.com"},"node-red":{"nodes":{"cma-norsub-parser":"src/parser.js"},"version":">=3.0.0"},"repository":{"url":"git+https://github.com/core-marine-dev/devices.git","type":"git"},"_npmVersion":"10.7.0","description":"Node-Red component to work with NorSub eMRU devices","directories":{},"_nodeVersion":"20.15.0","dependencies":{"@coremarine/norsub-emru":"^1.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/norsub-emru-nodered_1.1.0_1720524692225_0.47418962911177887","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@coremarine/norsub-emru-nodered","version":"1.2.0","keywords":["node-red","mru","imu","norsub","nmea","nmea0183","0183","parser"],"author":{"name":"CoreMarine"},"license":"MIT","_id":"@coremarine/norsub-emru-nodered@1.2.0","maintainers":[{"name":"valentina-rubane","email":"vru@core-marine.com"},{"name":"crisconru","email":"crisconru@gmail.com"},{"name":"coremarinedev","email":"dev@core-marine.com"}],"homepage":"https://github.com/core-marine-dev/devices/tree/main/packages/norsub-emru-nodered","bugs":{"url":"https://github.com/core-marine-dev/devices/issues"},"dist":{"shasum":"f2ed95e299b764b50fe7507a46df1f5f9bffa028","tarball":"https://registry.npmjs.org/@coremarine/norsub-emru-nodered/-/norsub-emru-nodered-1.2.0.tgz","fileCount":8,"integrity":"sha512-9Ehr223f5I1n4ju5gPAkCIi3XmCzFNnXmasM1FBuGvXHqlNLikZo0SVRY1on3GZRiZ95Q8f/TLnmm/Xue8/XfQ==","signatures":[{"sig":"MEUCIQC3lSLep4zJfynI1Q/oSp8LM6QC0a4Kk1Amvkjy06at5QIgPgJWuBoca5XNqeqygxUVm0zjOfZY3ZH9TnTK+dzi2q0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80452},"main":"index.js","engines":{"node":">=18.0.0"},"gitHead":"bfd248d246ce8088b9c95e3d77d546ab04e4c7be","scripts":{"test":"mocha \"tests/**/*.test.js\"","docker":"sh manual_tests.sh"},"_npmUser":{"name":"coremarinedev","email":"dev@core-marine.com"},"node-red":{"nodes":{"cma-norsub-parser":"src/parser.js"},"version":">=3.0.0"},"repository":{"url":"git+https://github.com/core-marine-dev/devices.git","type":"git"},"_npmVersion":"10.7.0","description":"Node-Red component to work with NorSub eMRU devices","directories":{},"_nodeVersion":"20.15.1","dependencies":{"@coremarine/norsub-emru":"^2.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/norsub-emru-nodered_1.2.0_1721746674608_0.3905153485816677","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@coremarine/norsub-emru-nodered","version":"1.3.0","keywords":["node-red","mru","imu","norsub","nmea","nmea0183","0183","parser"],"author":{"name":"CoreMarine"},"license":"MIT","_id":"@coremarine/norsub-emru-nodered@1.3.0","maintainers":[{"name":"valentina-rubane","email":"vru@core-marine.com"},{"name":"coremarinedev","email":"dev@core-marine.com"},{"name":"crisconru","email":"crisconru@gmail.com"}],"homepage":"https://github.com/core-marine-dev/devices/tree/main/packages/norsub-emru-nodered","bugs":{"url":"https://github.com/core-marine-dev/devices/issues"},"dist":{"shasum":"49a419a04b7808591a2edb165ef9e48f3691f5bf","tarball":"https://registry.npmjs.org/@coremarine/norsub-emru-nodered/-/norsub-emru-nodered-1.3.0.tgz","fileCount":8,"integrity":"sha512-uPwhjnbbnEyE8XWySmD3o2uC1ARzzBUqdFm/xLECuco2DbnYSc5QfwHlrXrG9uAMoo7rwNDFMpHKBFSQi/aVWA==","signatures":[{"sig":"MEUCIQCIRp8/EGowwSjLDNIran86ozpk+VBOjDXQNyYeSpt/RQIgWzpAdOVHh78/BHAewHVEWzS/hW3XzyHMEkzLfXNuqDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80452},"main":"index.js","engines":{"node":">=18.0.0"},"gitHead":"dd94833a8fc09b8d4f803ae517cc0dbd0d22c329","scripts":{"test":"mocha \"tests/**/*.test.js\"","docker":"sh manual_tests.sh"},"_npmUser":{"name":"coremarinedev","email":"dev@core-marine.com"},"node-red":{"nodes":{"cma-norsub-parser":"src/parser.js"},"version":">=3.0.0"},"repository":{"url":"git+https://github.com/core-marine-dev/devices.git","type":"git"},"_npmVersion":"10.8.2","description":"Node-Red component to work with NorSub eMRU devices","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@coremarine/norsub-emru":"^2.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/norsub-emru-nodered_1.3.0_1760976394748_0.48347732412036093","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@coremarine/norsub-emru-nodered","version":"2.0.0","keywords":["node-red","mru","imu","norsub","nmea","nmea0183","0183","parser","protocol"],"author":"CoreMarine","license":"MIT","_id":"@coremarine/norsub-emru-nodered@2.0.0","maintainers":[{"name":"coremarinedev","email":"dev@core-marine.com"},{"name":"crisconru","email":"crisconru@gmail.com"},{"name":"egr666","email":"egr@core-marine.com"}],"homepage":"https://github.com/core-marine-dev/devices/tree/main/packages/norsub-emru-nodered","bugs":{"url":"https://github.com/core-marine-dev/devices/issues"},"dist":{"shasum":"0a6961981590b10255ca710bf9fa8c1884326ba6","tarball":"https://registry.npmjs.org/@coremarine/norsub-emru-nodered/-/norsub-emru-nodered-2.0.0.tgz","fileCount":9,"integrity":"sha512-eGw/w7+U3kFHjRuYN/NBvr9K7iNmvkslQvhKuoSDdpYCB9xW9TkCQs/+U1C20k1pYJ++8rNlb1ZyKX7eWA7GyA==","signatures":[{"sig":"MEUCIHIyVBOV02xqFc7BiMds7Jo7upLTwLIvG4vt0Fva0B9QAiEAqa20y+6yVCNpZ+ExEz05fqvgLqyzDUirug/ljUvCkkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@coremarine%2fnorsub-emru-nodered@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77797},"main":"dist/parser.js","engines":{"node":">=22"},"scripts":{"dev":"pnpm run build && node dev-server.mjs dev","lint":"eslint","test":"node --import tsx --test \"tests/**/*.test.ts\"","build":"pnpm run format && tsup && node copy-assets.mjs","format":"eslint --fix","examples":"pnpm run build && node dev-server.mjs examples","test:unit":"node --import tsx --test \"tests/*.unit.test.ts\"","test:integration":"node --import tsx --test \"tests/*.integration.test.ts\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45e8093a-eadd-46ac-b5ac-fc44c81d6258"}},"node-red":{"nodes":{"cma-norsub-parser":"dist/parser.js"},"version":">=4.0.0"},"repository":{"url":"git+https://github.com/core-marine-dev/devices.git","type":"git","directory":"packages/norsub-emru-nodered"},"description":"Node-RED component to read NorSub eMRU telegrams as CMA","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@coremarine/norsub-emru":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","@types/node-red":"1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/norsub-emru-nodered_2.0.0_1785314341898_0.5519733143484831","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@coremarine/norsub-emru-nodered","version":"3.0.0","keywords":["node-red","mru","imu","norsub","nmea","nmea0183","0183","parser","protocol"],"author":"CoreMarine","license":"MIT","_id":"@coremarine/norsub-emru-nodered@3.0.0","maintainers":[{"name":"coremarinedev","email":"dev@core-marine.com"},{"name":"crisconru","email":"crisconru@gmail.com"},{"name":"egr666","email":"egr@core-marine.com"}],"homepage":"https://github.com/core-marine-dev/devices/tree/main/packages/norsub-emru-nodered","bugs":{"url":"https://github.com/core-marine-dev/devices/issues"},"dist":{"shasum":"596e70282a3fe8c295a0758c8b7e59c96802e1f2","tarball":"https://registry.npmjs.org/@coremarine/norsub-emru-nodered/-/norsub-emru-nodered-3.0.0.tgz","fileCount":9,"integrity":"sha512-69Gjx+Wexnk4vxSfKTQVMbraxd4sHF2dR61fZ8/+0vm7esB272i9mGH1tUfjySYXFrDiKfPMYNtrUIe/Hipt8w==","signatures":[{"sig":"MEQCID7ZvIAhhwRTty6RBhv4wl8BRfsxiWCR/MnQj9vdp7HYAiBFLNVtC/jgBoFFpsXGCIQzT+FP8Jnn4JtrmSMJxpWktQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@coremarine%2fnorsub-emru-nodered@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89934},"main":"dist/parser.js","engines":{"node":">=22"},"scripts":{"dev":"pnpm run build && node dev-server.mjs dev","lint":"eslint","test":"node --import tsx --test \"tests/**/*.test.ts\"","build":"pnpm run format && tsup && node copy-assets.mjs","format":"eslint --fix","examples":"pnpm run build && node dev-server.mjs examples","test:unit":"node --import tsx --test \"tests/*.unit.test.ts\"","test:integration":"node --import tsx --test \"tests/*.integration.test.ts\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45e8093a-eadd-46ac-b5ac-fc44c81d6258"}},"node-red":{"nodes":{"cma-norsub-parser":"dist/parser.js"},"version":">=4.0.0"},"repository":{"url":"git+https://github.com/core-marine-dev/devices.git","type":"git","directory":"packages/norsub-emru-nodered"},"description":"Node-RED component to read NorSub eMRU telegrams as CMA","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@coremarine/norsub-emru":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","@types/node-red":"1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/norsub-emru-nodered_3.0.0_1785327997235_0.7944895086720853","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@coremarine/norsub-emru-nodered","version":"5.0.0","keywords":["node-red","mru","imu","norsub","nmea","nmea0183","0183","parser","protocol"],"author":"CoreMarine","license":"MIT","_id":"@coremarine/norsub-emru-nodered@5.0.0","maintainers":[{"name":"coremarinedev","email":"dev@core-marine.com"},{"name":"crisconru","email":"crisconru@gmail.com"},{"name":"egr666","email":"egr@core-marine.com"}],"homepage":"https://github.com/core-marine-dev/devices/tree/main/packages/norsub-emru-nodered","bugs":{"url":"https://github.com/core-marine-dev/devices/issues"},"dist":{"shasum":"627ffe3abc058bb1408bf3ce8a8d6cb067b69ad8","tarball":"https://registry.npmjs.org/@coremarine/norsub-emru-nodered/-/norsub-emru-nodered-5.0.0.tgz","fileCount":9,"integrity":"sha512-lc3FqBGJYwOTryLhxxDDgnhuRy1DF2kMGOZuNmrTpLH70b+bobKc3mwZFv+ONlPEVimDUIQaHoA4bKqF/VofXQ==","signatures":[{"sig":"MEUCIB285Xh4u7oMNBGZ/pZmz8hrKdhrWUy+ZHWRgD6xgnwXAiEA7A5JlO5w681YQvYZi4SpM2W/SYCdQP7Rgzmye3yfIFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@coremarine%2fnorsub-emru-nodered@5.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":91417},"main":"dist/parser.js","engines":{"node":">=22"},"scripts":{"dev":"pnpm run build && node dev-server.mjs dev","lint":"eslint","test":"node --import tsx --test \"tests/**/*.test.ts\"","build":"pnpm run format && tsup && node copy-assets.mjs","format":"eslint --fix","examples":"pnpm run build && node dev-server.mjs examples","test:unit":"node --import tsx --test \"tests/*.unit.test.ts\"","test:integration":"node --import tsx --test \"tests/*.integration.test.ts\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45e8093a-eadd-46ac-b5ac-fc44c81d6258"}},"node-red":{"nodes":{"cma-norsub-parser":"dist/parser.js"},"version":">=4.0.0"},"repository":{"url":"git+https://github.com/core-marine-dev/devices.git","type":"git","directory":"packages/norsub-emru-nodered"},"description":"Node-RED component to read NorSub eMRU telegrams as CMA","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@coremarine/norsub-emru":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","@types/node-red":"1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/norsub-emru-nodered_5.0.0_1785414294935_0.8717336818161159","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"@coremarine/norsub-emru-nodered","version":"6.0.0","author":"CoreMarine","license":"MIT","description":"Node-RED component to read NorSub eMRU telegrams as CMA","homepage":"https://github.com/core-marine-dev/devices/tree/main/packages/norsub-emru-nodered","repository":{"type":"git","url":"git+https://github.com/core-marine-dev/devices.git","directory":"packages/norsub-emru-nodered"},"bugs":{"url":"https://github.com/core-marine-dev/devices/issues"},"keywords":["node-red","cma","mru","imu","norsub","nmea","nmea0183","0183","parser","protocol"],"engines":{"node":">=22"},"node-red":{"version":">=4.0.0","nodes":{"cma-norsub-parser":"dist/parser.js"}},"main":"dist/parser.js","dependencies":{"@coremarine/norsub-emru":"^6.0.0"},"devDependencies":{"@types/node-red":"1.3.5","tsx":"4.23.1"},"scripts":{"build":"pnpm run format && tsup && node copy-assets.mjs","lint":"eslint","format":"eslint --fix","test":"node --import tsx --test \"tests/**/*.test.ts\"","test:coverage":"node --import tsx --test --experimental-test-coverage --test-coverage-include=\"src/**\" \"tests/**/*.test.ts\"","test:unit":"node --import tsx --test \"tests/*.unit.test.ts\"","test:integration":"node --import tsx --test \"tests/*.integration.test.ts\"","dev":"pnpm run build && node dev-server.mjs dev","examples":"pnpm run build && node dev-server.mjs examples"},"_nodeVersion":"24.18.0","_id":"@coremarine/norsub-emru-nodered@6.0.0","dist":{"integrity":"sha512-hX0elPDMstPCIQg08mvWI8iXECh1OZojLyBv9nGsVY43q/sbcC72Iti1sSrPTZeOadT6GmP63zvi09I7L3/yGg==","shasum":"eb0f489fb3e33f9e2f29304ef9f04ba728604c4b","tarball":"https://registry.npmjs.org/@coremarine/norsub-emru-nodered/-/norsub-emru-nodered-6.0.0.tgz","fileCount":9,"unpackedSize":91438,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@coremarine%2fnorsub-emru-nodered@6.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCH7iL6uIkAtS72/pkNwVTzothBlN09XHFyrBS/aL7OEwIhANScZ/QA495MypoTJ8o8WImsyDzNEIxSLjLBeiBqs3Q3"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45e8093a-eadd-46ac-b5ac-fc44c81d6258"}},"directories":{},"maintainers":[{"name":"coremarinedev","email":"dev@core-marine.com"},{"name":"crisconru","email":"crisconru@gmail.com"},{"name":"egr666","email":"egr@core-marine.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/norsub-emru-nodered_6.0.0_1785601935999_0.8335588716985616"},"_hasShrinkwrap":false}},"time":{"created":"2024-05-20T10:02:41.025Z","modified":"2026-08-01T16:32:16.538Z","1.0.0":"2024-05-20T10:02:41.429Z","1.0.1":"2024-05-21T06:49:02.666Z","1.1.0":"2024-07-09T11:31:32.493Z","1.2.0":"2024-07-23T14:57:54.853Z","1.3.0":"2025-10-20T16:06:34.926Z","2.0.0":"2026-07-29T08:39:02.042Z","3.0.0":"2026-07-29T12:26:37.378Z","5.0.0":"2026-07-30T12:24:55.099Z","6.0.0":"2026-08-01T16:32:16.171Z"},"bugs":{"url":"https://github.com/core-marine-dev/devices/issues"},"author":"CoreMarine","license":"MIT","homepage":"https://github.com/core-marine-dev/devices/tree/main/packages/norsub-emru-nodered","keywords":["node-red","cma","mru","imu","norsub","nmea","nmea0183","0183","parser","protocol"],"repository":{"type":"git","url":"git+https://github.com/core-marine-dev/devices.git","directory":"packages/norsub-emru-nodered"},"description":"Node-RED component to read NorSub eMRU telegrams as CMA","maintainers":[{"name":"coremarinedev","email":"dev@core-marine.com"},{"name":"crisconru","email":"crisconru@gmail.com"},{"name":"egr666","email":"egr@core-marine.com"}],"readme":"# NorSub eMRU — Node-RED\n\n![npm (scoped)](https://img.shields.io/npm/v/%40coremarine/norsub-emru-nodered)\n[![publish](https://github.com/core-marine-dev/devices/actions/workflows/norsub-emru-nodered.yml/badge.svg)](https://github.com/core-marine-dev/devices/actions/workflows/norsub-emru-nodered.yml)\n![npm](https://img.shields.io/npm/dy/%40coremarine/norsub-emru-nodered)\n\nNode-RED node that reads [NorSub](https://norsub.com) eMRU / OEM MRU telegrams — the NorSub\nproprietary sentences **and** all of NMEA 0183 — and emits them in the unified **CMA** format.\n\nWrapper of [@coremarine/norsub-emru](https://www.npmjs.com/package/@coremarine/norsub-emru); see that\npackage for the output format and the protocol details.\n\n- Node type / palette: **`cma-norsub-parser`**, under the **CoreMarine** category.\n- Requires **Node ≥ 22** and **Node-RED ≥ 4**.\n\n## Install\n\nFrom the Node-RED palette manager, or:\n\n```bash\nnpm i @coremarine/norsub-emru-nodered\n```\n\nAn example flow ships with the package — import it from **Menu → Import → Examples → NorSub eMRU**.\n\n## Configuration\n\n| field | description |\n| --- | --- |\n| **Name** | Optional node label. |\n| **Protocol** | Which protocol the eMRU is configured to emit. `NMEA` is the only one implemented today. |\n| **Memory** | Keep incomplete input buffered between messages. On by default. |\n| **Sentences file path** | Optional YAML file of **your own** extra sentence definitions, loaded at deploy. The NorSub and NMEA 0183 definitions are already built in. |\n\n## Message API\n\n`payload` is the data input; the other five keys are optional request/response channels. **Whatever\nkey you send comes back on the same key**, and any key you do not send is absent from the output. On\na bad request that key holds an **error string** instead of a result — the node does not throw.\n\n### Input\n\n| key | type | description |\n| --- | --- | --- |\n| `payload` | string | NorSub / NMEA ASCII data. Must be an *ASCII* string, not another encoding. |\n| `memory` | object | Get or set the memory setting. |\n| `protocol` | object | Get or set which protocol the device is emitting. |\n| `sentences` | object | Get the known sentence definitions, or add your own. |\n| `definition` | string | A sentence id, to read every stored definition of it. |\n| `fake` | string | A sentence id, to get a valid sample sentence. |\n\n### Output\n\n| key | type | description |\n| --- | --- | --- |\n| `payload` | array | **CMA[]** — one object per sentence, **including ones that failed to parse** (see [Failed and garbage sentences](#failed-and-garbage-sentences)). |\n| `memory` | object | `{ memory: boolean, characters: number }` |\n| `protocol` | object | `{ protocol: string, protocols: string[] }` |\n| `sentences` | object | The known definitions, grouped by protocol. |\n| `definition` | array \\| string | Every definition of that id — or an **error string** saying why not. Never `null`. |\n| `fake` | string | A sample sentence, or an **error string** saying why not. Never `null`. |\n\n## Failed and garbage sentences\n\n**Since 3.0.0 nothing is dropped silently.** Real devices break the NMEA standard, and an empty\n`msg.payload` used to hide it completely. Every piece of input now comes out in `msg.payload`, and a\nproblem is signalled by the optional **`errors`** array on the CMA:\n\n- **A malformed sentence is still fully decoded** and carries `errors` — a checksum that is not two hex\n  characters or does not match, a missing or malformed `\\r\\n`.\n- **Undecodable input** (line noise, or a device speaking a different protocol) comes out as a *garbage*\n  CMA: `id: 'unknown'`, `payload: []`, `protocol: { name: 'unknown', version: 'unknown' }`, the\n  discarded bytes in `raw`, and `errors` saying why.\n\n\nThe shipped example flow includes a **\"Failed & garbage sentences\"** group demonstrating all three\ncases — a one-character checksum, a missing `\\r\\n`, and line noise — wired through a `function` node\nto separate *clean* and *flagged* debug outputs.\n\nRoute them apart in a `function` node instead of logging the same error forever:\n\n```javascript\nconst bad = msg.payload.filter((cma) => cma.errors !== undefined)\nconst good = msg.payload.filter((cma) => cma.errors === undefined)\nreturn [{ payload: good }, bad.length ? { payload: bad } : null]\n```\n\nFull rules: [`docs/CMA.md`](https://github.com/core-marine-dev/devices/blob/main/docs/CMA.md).\n\n## Parsing\n\nFeed ASCII into `payload`; the node emits everything it could complete. Incomplete input is buffered\n(with **Memory** on), so a sentence split across two messages still parses.\n\n```jsonc\n// in\n{ \"payload\": \"$PNORSUB8,1234567,890,1.234,…,4160749567*40\\r\\n\" }\n\n// out — payload[0], trimmed\n{\n  \"id\": \"PNORSUB8\",\n  \"protocol\": { \"name\": \"NORSUB8\", \"version\": \"1.2.0\" },\n  \"payload\": [\n    { \"raw\": \"1234567\", \"name\": \"time\",  \"type\": \"uint32\",  \"value\": 1234567, \"units\": \"us\" },\n    { \"raw\": \"1.234\",   \"name\": \"roll\",  \"type\": \"float64\", \"value\": 1.234,   \"units\": \"deg\" },\n    // …\n    { \"name\": \"status\", \"type\": \"uint32\", \"value\": 4160749567,\n      \"metadata\": { \"status\": { \"main\": { \"ok\": true, \"health\": true } } } }\n  ],\n  \"metadata\": {\n    \"checksum\": \"40\",\n    \"payload\": { \"status\": { \"main\": { \"ok\": true, \"health\": true } } },\n    \"timestamp\": { \"received\": 1785308158376, \"parsed\": 1785308158376 }\n  }\n}\n```\n\n### Device status\n\nThe `PNORSUB*` sentences carry a 32-bit health/status bitfield, decoded for you into a nested object\n(`main`, `system`, `sensor`, `algorithms`, `aiding` — see the library README):\n\n- `payload[i].payload[last].metadata.status` — for the five sentences whose status is a single\n  `uint32` field (`PNORSUB`, `PNORSUB2`, `PNORSUB6`, `PNORSUB7`, `PNORSUB8`).\n- `payload[i].metadata.payload.status` — for **all six**, including `PNORSUB7b`, whose status is\n  split across two `uint16` fields that mean nothing individually.\n\n**Read it from `metadata.payload.status`** and the same path works for every variant, so swapping a\nPNORSUB7b unit for a PNORSUB8 one costs you no flow changes.\n\n`PTVG` fields are strings on the wire (the unit letter is glued to the value); the decoded degrees\nare in each field's `metadata.degrees`.\n\n## Memory\n\n- **on** — each injection is appended to whatever is still buffered.\n- **off** — each injection replaces the buffer.\n\n| Input | Output |\n| --- | --- |\n| `memory`: `{ command: 'get' }` | `memory`: `{ memory, characters }` |\n| `memory`: `{ command: 'set', payload: boolean }` | `memory`: `{ memory, characters }` |\n\n## Protocol\n\nAn eMRU is configured to emit **one** protocol, so this selects it rather than combining several.\n`nmea` is the only value implemented today; the device also supports TSS1, Atlas, Ifremer Victor,\nSimrad EM 3000 and a custom binary format, and each will simply appear in `protocols`.\n\n> ⚠️ **Setting it discards internal state** — the buffer and any parsed-but-unsent sentences are\n> dropped, because half a sentence in one protocol can never be completed by another. An unknown\n> value is refused with an error string and the current protocol is kept.\n\n| Input | Output |\n| --- | --- |\n| `protocol`: `{ command: 'get' }` | `protocol`: `{ protocol, protocols }` |\n| `protocol`: `{ command: 'set', payload: 'nmea' }` | `protocol`: `{ protocol, protocols }` |\n\n## Sentences\n\nThe NorSub and NMEA 0183 definitions are **built in**. This channel is for adding your *own*\nsentences on top, at runtime. Send `command: 'set'` with **one** of:\n\n1. `content` — the YAML **string** of the definitions.\n2. `file` — a **string** path to a YAML file, read by the node.\n\n`content` wins if both are sent. Bad YAML, a schema mismatch or an unreadable file give an error\nstring back. `get` lists everything currently known.\n\n| Input | Output |\n| --- | --- |\n| `sentences`: `{ command: 'get' }` | `sentences`: object |\n| `sentences`: `{ command: 'set', content: string }` | `sentences`: object |\n| `sentences`: `{ command: 'set', file: string }` | `sentences`: object |\n\nA ready-to-use file ships as [`examples/example-sentences.yml`](examples/example-sentences.yml), and\nthe example flow shows the before/after of hot-expanding the parser with it.\n\n## Definition & Fake\n\n| Input | Output |\n| --- | --- |\n| `definition`: `'PNORSUB8'` | `definition`: an **array** — every stored definition of that id — or an **error string** |\n| `fake`: `'PNORSUB8'` | `fake`: a valid sample sentence, or an **error string** |\n\nNeither ever answers `null`: an unknown or malformed id comes back as a readable error string saying\nwhy, which is the whole point of the library returning a `Result`.\n\nA fake sentence is structurally correct with a valid checksum; the field values are filler. Useful\nfor exercising a flow without a device attached — and the same id always gives the same sentence, so it\nis safe to use as a fixture.\n\n## Upgrading from 2.x\n\nThe **msg API is unchanged**. One behavioural change, from the underlying libraries going to `4.0.0`:\n**`msg.payload` now also contains failed and garbage sentences** (see\n[above](#failed-and-garbage-sentences)). Previously they were silently discarded, so a flow that\nassumed every CMA was usable should now check `errors` (or `id === 'unknown'`). Nothing about a good\nsentence changed.\n\n## Upgrading from 1.x\n\nThe node was rewritten for the CMA output format. Breaking changes:\n\n- **`payload` output is now `CMA[]`**, not the old `NMEASentence[]`.\n- **`msg.protocols` is now `msg.sentences`.** It always meant \"the sentence definitions\", and the\n  node now *also* has a `protocol` selection — two keys one letter apart meaning unrelated things\n  was a trap, so the definitions channel took the library's own word for them.\n- **`sentences.set` no longer accepts a pre-parsed `protocols` object** — pass `content` (a YAML\n  string) or `file`.\n- **Device status moved.** It was a top-level `metadata.status`; it is now field-level and/or\n  payload-level metadata (see [Device status](#device-status)).\n- **New `protocol` config field and message channel.**\n- Requires **Node ≥ 22** (was ≥ 18).\n\n## Development\n\n```bash\npnpm run norsub-emru:nodered:build       # tsup -> CJS + copy parser.html/icons\npnpm run norsub-emru:nodered:test        # node:test — unit + real headless Node-RED\npnpm run norsub-emru:nodered:dev         # local Node-RED on a scratch flow, no docker\npnpm run norsub-emru:nodered:examples    # local Node-RED editing the SHIPPED example flow\n```\n\n`:dev` and `:examples` boot a real Node-RED at <http://localhost:1880> with this node under the\nCoreMarine category. In this monorepo the sibling `@coremarine/*-nodered` nodes also appear, which\nis harmless and expected — an end user who installs only this package never sees them.\n\n## Upgrading from 3.x\n\nThe library it wraps went to **5.0.0**, and wrapper/library majors are now locked together, so\n`@coremarine/norsub-emru-nodered@5.x` always wraps `@coremarine/norsub-emru@5.x`. That is why the version jumps\nfrom 3.x straight to 5.0.0.\n\n- **`msg.sentence` is now `msg.definition`.** It read like \"give me a sentence\" when it actually\n  returns a definition — one word away from `msg.fake`, which *does* give you a sentence.\n- **`msg.definition` responds with an ARRAY**, one entry per version of that id. The knowledge base\n  has always held a definition per version; the old call silently returned only the newest.\n- **An unknown id is an error STRING, not `null`.** `msg.definition` and `msg.fake` both say *why*\n  now — a malformed id and an unknown id are different mistakes that `null` could not distinguish.\n\n\n## License\n\nMIT\n","readmeFilename":""}