{"_id":"ppu-ocv","_rev":"29-ef5426249abaaeb025966eb7bfac5051","name":"ppu-ocv","dist-tags":{"latest":"4.0.0"},"versions":{"0.0.1":{"name":"ppu-ocv","version":"0.0.1","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@0.0.1","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"2f3bdb941bd69cb6b6653d10b811c816307452ec","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-0.0.1.tgz","fileCount":42,"integrity":"sha512-RLCfv4EE5npezfDY6WZwr3AYkn0VNn2MtMlTftc3RoEIB0Q/3kpJeZjPV120jmXpbyZBiV/wHljjTDy/IeV/3Q==","signatures":[{"sig":"MEUCICRapKtljlul7IAFVJRw58qw9BiYbs+g8I16/9p7+0oeAiEA8dkfnEHnKZhSbWMazI53YZe9QqqnR5OHW74SDkJqKi0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50547},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"2f3bdb941bd69cb6b6653d10b811c816307452ec","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-RLCfv4EE5npezfDY6WZwr3AYkn0VNn2MtMlTftc3RoEIB0Q/3kpJeZjPV120jmXpbyZBiV/wHljjTDy/IeV/3Q==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_0.0.1_1746290255342_0.501892679978946","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"ppu-ocv","version":"0.0.2","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@0.0.2","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"22c816f728d99f148e16968f27cb595d04e3acf1","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-0.0.2.tgz","fileCount":42,"integrity":"sha512-iCR3BH4JtQfiXPgU31eNwetsR23GuDaXUs9ZaEkYeauqzTMrrK8a4kY0faK+dV9aAmXDPltYW7yIYyADPkv40A==","signatures":[{"sig":"MEUCIHMhsfBBdMvlCEbMLc6q2tSPf+7Pvp5a2GVYdDNvIdYlAiEAv10pm8OqR/8zxJSgwgLVY4KVEtIU0s2IMNPDK445TWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50547},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"22c816f728d99f148e16968f27cb595d04e3acf1","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-iCR3BH4JtQfiXPgU31eNwetsR23GuDaXUs9ZaEkYeauqzTMrrK8a4kY0faK+dV9aAmXDPltYW7yIYyADPkv40A==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_0.0.2_1746291185662_0.2223536157431869","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"ppu-ocv","version":"0.0.3","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@0.0.3","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"d3bab0da6df0290d474e68d2cc3a431f734af35d","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-0.0.3.tgz","fileCount":42,"integrity":"sha512-ZKJ1BEoSdTt/FwxOp8tgarCgyURKqtoZLz+Zkwpono7FEAnAoM0+hQgbaIOCjgpDkn0lu9AmrPdbSTb91r+hFQ==","signatures":[{"sig":"MEQCIB2p8GHMk9S4DdZ0ZszU71656vaXh1TymVZG7iXy9nAsAiBhxVu/hqk+bLb+8CrI9MUePNoiXRv3tdWYOc7g28yZaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50515},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"d3bab0da6df0290d474e68d2cc3a431f734af35d","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-ZKJ1BEoSdTt/FwxOp8tgarCgyURKqtoZLz+Zkwpono7FEAnAoM0+hQgbaIOCjgpDkn0lu9AmrPdbSTb91r+hFQ==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_0.0.3_1746292087641_0.8479605173403824","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"ppu-ocv","version":"1.0.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.0.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"3411d1a8efc3cf8e367f1de33b18742ebf6b1798","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.0.0.tgz","fileCount":42,"integrity":"sha512-1JrMdjfQgjoHEKX1Pzbka8xrXHqQdPf97tLGorAob0fCbY97uPRLozUlpwSBIeWeVIsb0ArkGFI2aKNgSkGlSQ==","signatures":[{"sig":"MEYCIQDCiLRLUSJkxNLLrHTTcyWoMTuiTMdSZqXJRC5vZpRpnwIhAPoTdl6CsK3mIuTz0jhCiRtVITjfyNGP2hMdaEHsbcev","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50515},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"3411d1a8efc3cf8e367f1de33b18742ebf6b1798","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-1JrMdjfQgjoHEKX1Pzbka8xrXHqQdPf97tLGorAob0fCbY97uPRLozUlpwSBIeWeVIsb0ArkGFI2aKNgSkGlSQ==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.0.0_1746293569819_0.7023955306076","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"ppu-ocv","version":"1.1.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.1.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"44bd8515c1d2a9607b43d6dae2fb7e00921fc84c","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.1.0.tgz","fileCount":42,"integrity":"sha512-fKFKQgrN59AkJz3YMELX5b8cNHPA5QHSlCuNLBO7joQOcWybuQQbdR0U/oXurnsvMRymXsxXGmaygYU0peGunA==","signatures":[{"sig":"MEYCIQC1JAw63+Dj1ipYRNJlgt72vuoKD/I0+efcTWELdBImKQIhANqHcVjc7BZv1D7glH7lApYZZp8ZngHf7YCxpy1PyHbw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51134},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"44bd8515c1d2a9607b43d6dae2fb7e00921fc84c","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-fKFKQgrN59AkJz3YMELX5b8cNHPA5QHSlCuNLBO7joQOcWybuQQbdR0U/oXurnsvMRymXsxXGmaygYU0peGunA==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.1.0_1746415751397_0.20267700763977503","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"ppu-ocv","version":"1.1.1","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.1.1","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"ae5062b2343aeda26caaff28c0b72dce0b186b0f","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.1.1.tgz","fileCount":42,"integrity":"sha512-yA3V+3cS4l5/rsXsaH4M4Q5el4yd7S72Wtu8BxSyAE0KxGrP+vjIbU3WoTGdlqhByY+csO6asPK/4wuiU4n7tA==","signatures":[{"sig":"MEQCIE4jBe1YR5jb1zio1bK8PnRWpo0KdbrTYGTXLmrQ7fJ8AiB+qhS2viZiSiPeG8xnK7X8AWR69kM47Bymj+A7OJbxhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51050},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"ae5062b2343aeda26caaff28c0b72dce0b186b0f","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-yA3V+3cS4l5/rsXsaH4M4Q5el4yd7S72Wtu8BxSyAE0KxGrP+vjIbU3WoTGdlqhByY+csO6asPK/4wuiU4n7tA==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.1.1_1746416214456_0.26563608321174503","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"ppu-ocv","version":"1.2.1","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.2.1","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"c5848825f1f9646f1b97b95384688ef2826c9ffa","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.2.1.tgz","fileCount":42,"integrity":"sha512-8zSwCT4PYpCOAZdUhsiSr/yXAAVaHGzB5vuonEVT0DtjoIEpCL2hjC4rz5IjazICNKOO5Vl2vu9xO2dw7u17zw==","signatures":[{"sig":"MEUCIQDeGuym9LepL6TiXRr+LrDsG/1h9NWfXOGbwBDXAEZVWgIgNKZGIT50f+pVaNsEKPGy2ltS5VtSirj7lOcswpZPzlM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52152},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"c5848825f1f9646f1b97b95384688ef2826c9ffa","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-8zSwCT4PYpCOAZdUhsiSr/yXAAVaHGzB5vuonEVT0DtjoIEpCL2hjC4rz5IjazICNKOO5Vl2vu9xO2dw7u17zw==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.2.1_1746515823421_0.7346466772933102","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"ppu-ocv","version":"1.2.2","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.2.2","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"74e347b10eac01dc673cfd08914aac6a305961d3","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.2.2.tgz","fileCount":42,"integrity":"sha512-9z65AhFmtCVu0Nme8Cc4jjK07NSgooq9kzH0MDRfmA1VDqie3I++7qswx/2fHuo1Oz4gAVz6KHnVI+Taduu57g==","signatures":[{"sig":"MEUCIQCfEnlBC2Sm2ahjcjPbpvTR6c1Qd6G/6cnwIWqTQo0gSAIgKUleHDQXRDxH8oMCIU1dkU/lxyo+erwyyw5f04KMpRM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52173},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"74e347b10eac01dc673cfd08914aac6a305961d3","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-9z65AhFmtCVu0Nme8Cc4jjK07NSgooq9kzH0MDRfmA1VDqie3I++7qswx/2fHuo1Oz4gAVz6KHnVI+Taduu57g==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.2.2_1746673143317_0.5731234735720543","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"ppu-ocv","version":"1.2.3","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.2.3","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"cce20a9f5fedee8258d0cc8f15793c7c8873d45d","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.2.3.tgz","fileCount":44,"integrity":"sha512-IJF5sP0LyYca10ybxeZo84JdeIT1zQzP9Adrs3DlXryJVDybN2RdEanLDgFMZjfNYTeBfedhomLtdTjKbmC2qg==","signatures":[{"sig":"MEYCIQCfN08uDwRYMz4ovLoZcWTWA+d6TY+RKcH8Ba2rN5aXVQIhAMvt8PxcUswmQDdlvVTxi4T4K3EXoXkS+PEZYu89OGvK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53402},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"cce20a9f5fedee8258d0cc8f15793c7c8873d45d","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-IJF5sP0LyYca10ybxeZo84JdeIT1zQzP9Adrs3DlXryJVDybN2RdEanLDgFMZjfNYTeBfedhomLtdTjKbmC2qg==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.2.3_1746675556766_0.12813957576667767","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"ppu-ocv","version":"1.3.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.3.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"cd14c45e6d1a5c12d85ab8b7447a8812151144a8","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.3.0.tgz","fileCount":46,"integrity":"sha512-7SIFteAel0oZ047eQCiVhpVv7TRDKEz9QsK+HSU0Kp10Om2Lptf2gh14X1SyiA5jKXoascZnuwoYWE3Ss2xe6g==","signatures":[{"sig":"MEQCIE37uwfzBBO20m1GT2qtGPCCz8/XKk78KprJico1jtSTAiANVHd1LArDngqQWidnzpN7/F605Ss+JBe6DTs8u5TbhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55089},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"cd14c45e6d1a5c12d85ab8b7447a8812151144a8","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","actor":{"name":"snowfluke","type":"user","email":"awalariansyah7@gmail.com"},"email":"awalariansyah7@gmail.com"},"_integrity":"sha512-7SIFteAel0oZ047eQCiVhpVv7TRDKEz9QsK+HSU0Kp10Om2Lptf2gh14X1SyiA5jKXoascZnuwoYWE3Ss2xe6g==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.3.0_1750671454688_0.37004847742701785","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"ppu-ocv","version":"1.4.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.4.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"9e81d270bb32020c092caa5e2c661891d11d1a55","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.4.0.tgz","fileCount":46,"integrity":"sha512-SM6osmxKhFeuxyyEI/lD7O8BEzq9yGn0ZxDFsHZa/ng57M0UMXeEOb3XXKr24dVCjh/k9w0x3YvBq/vuSdLvfA==","signatures":[{"sig":"MEYCIQCa3lSTOU00AFsCk5jKbf6Ap/dcebYdWpL36hjISiqDaAIhAJpwgZo4AWZca17+INuzvp0dkc8hj7M/Ldh+PceXEQxo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56227},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"9e81d270bb32020c092caa5e2c661891d11d1a55","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-SM6osmxKhFeuxyyEI/lD7O8BEzq9yGn0ZxDFsHZa/ng57M0UMXeEOb3XXKr24dVCjh/k9w0x3YvBq/vuSdLvfA==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","prettier":"^3.6.2","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.4.0_1763611219780_0.25491096752777986","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"ppu-ocv","version":"1.5.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.5.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"5b2793de896108cee8535a55f47cf4a97a828aae","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.5.0.tgz","fileCount":48,"integrity":"sha512-P7V0iu0+ofC8BN2WD5rr6mGR5e6869YcNOl1INZrgWChSA4UNTr5UNbNShgahDEroUiBl8Ug6FoxkRuWP6Z7UQ==","signatures":[{"sig":"MEQCIFTJiMQddyhjMOBugB+1nYvH0OhgitEF31l4CPNi/4BYAiAtsdABIrHEE2dtr+PsO6mpg/iz0S8W29c9ncI7CYQOwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64381},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"5b2793de896108cee8535a55f47cf4a97a828aae","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-P7V0iu0+ofC8BN2WD5rr6mGR5e6869YcNOl1INZrgWChSA4UNTr5UNbNShgahDEroUiBl8Ug6FoxkRuWP6Z7UQ==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","prettier":"^3.6.2","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.5.0_1763979283106_0.7473086458555296","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"ppu-ocv","version":"1.5.1","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.5.1","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"e17dbcd23c0508696eb0d151107077493e78e063","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.5.1.tgz","fileCount":51,"integrity":"sha512-QbbJkhqU6KsR+FRgB6w/yxciqKS1HgFd8UMLSUa7JWsDZa7H3kTLlaJcsZdhkMG4vaJcX5NV6sdfXi6yIfPmxg==","signatures":[{"sig":"MEYCIQCCSmhYG/hRyOzZVpv/egw/iLhBq2VPsXxGvU0YLhaL/gIhALo7VBM/aonWQixrXaJ2GzJdCN0CROk1mT9Xw5rpemHv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1937468},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"e17dbcd23c0508696eb0d151107077493e78e063","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-QbbJkhqU6KsR+FRgB6w/yxciqKS1HgFd8UMLSUa7JWsDZa7H3kTLlaJcsZdhkMG4vaJcX5NV6sdfXi6yIfPmxg==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","prettier":"^3.6.2","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.5.1_1764060272157_0.10837953118695154","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"ppu-ocv","version":"1.5.2","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.5.2","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"ea5c10a07f6e0dca6669794a1551b4ec986fe3cf","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.5.2.tgz","fileCount":51,"integrity":"sha512-QJmfUZjHacgpzZwlzQy5fpKEZ5Ku0j9T2MYF1SinHJYWRLKivska9Y9igkAAbJ/s+OFWmlvY5hU+A7UMpOLIaQ==","signatures":[{"sig":"MEUCIDXyDIOT90zilkFvO3fiwrYLvqDhDSjY8ch1F9fuAg2NAiEAjz+bhsdfDtoF5KPq/16khCZQS0nBofcGpCULVIRB+D0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1937632},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"ea5c10a07f6e0dca6669794a1551b4ec986fe3cf","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-QJmfUZjHacgpzZwlzQy5fpKEZ5Ku0j9T2MYF1SinHJYWRLKivska9Y9igkAAbJ/s+OFWmlvY5hU+A7UMpOLIaQ==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","prettier":"^3.6.2","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.5.2_1764060967934_0.8113081643458551","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"ppu-ocv","version":"1.5.3","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.5.3","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"1fdbd04ac99cd77a455f7bb60137d1ab79a1c5e0","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.5.3.tgz","fileCount":51,"integrity":"sha512-mRQk4dmUPOC1j0d4j0hph8GEdbGPPK/lVc+6xzs8RaTmiCDoOWRhV/77uLw57yJscSSmI3ih71/Yp0ekMTxd5g==","signatures":[{"sig":"MEQCIB2Ug2P5OF3Dr9jq4Jlp7MLv1aEWkbqYvCvllj19BwkLAiB4EaxpLG26KAKc8Gtra7ECmM/ozfpKmq85FTJuUkDubQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1937632},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"1fdbd04ac99cd77a455f7bb60137d1ab79a1c5e0","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-mRQk4dmUPOC1j0d4j0hph8GEdbGPPK/lVc+6xzs8RaTmiCDoOWRhV/77uLw57yJscSSmI3ih71/Yp0ekMTxd5g==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","prettier":"^3.6.2","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.5.3_1764061385873_0.842364886696988","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"ppu-ocv","version":"1.6.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.6.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"55f7145628f41d7736c2a38bc2a7991ce999c0f3","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.6.0.tgz","fileCount":46,"integrity":"sha512-4GtGkgeZHuCvdH9oYsvflVIaqLtaUYKcFKv+/rJdMIO8fKO7fV/Fs8mohwzT68j9wWtpVBd/p+qjDlSa7Lof6A==","signatures":[{"sig":"MEQCIEQX/r4b0bJL9yutBubs+Kp4fLExc+zaoCu4wQt2ZMjlAiBRVNRn7HR6go1SpTOvK/5Lro7uBJtfx3qR2zAPH/GldQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56227},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"55f7145628f41d7736c2a38bc2a7991ce999c0f3","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-4GtGkgeZHuCvdH9oYsvflVIaqLtaUYKcFKv+/rJdMIO8fKO7fV/Fs8mohwzT68j9wWtpVBd/p+qjDlSa7Lof6A==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","prettier":"^3.6.2","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.6.0_1764064055919_0.023129271560551556","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"ppu-ocv","version":"1.7.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@1.7.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"632023811c5c63068190f3498638372deae6f542","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-1.7.0.tgz","fileCount":46,"integrity":"sha512-Nkvm5wymBo0wK+7rV5485bbOvcXWi0I8Rsm/v/F8L6DJ8K6ukiaosodCADkU2UyOb6qbSR6jXDDJcvlHnUxPVQ==","signatures":[{"sig":"MEUCIQCYO03YKTYKvwHXYCKKPgePV+AR82q8Cci+S286dPngCgIgPXdF/mhJ/vt7nrrxR0OKysutCR42MygFqlpKfTl5JHc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56594},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"632023811c5c63068190f3498638372deae6f542","scripts":{"lint":"eslint ./src","task":"bun scripts/task.ts","lint:fix":"eslint ./src --fix","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-Nkvm5wymBo0wK+7rV5485bbOvcXWi0I8Rsm/v/F8L6DJ8K6ukiaosodCADkU2UyOb6qbSR6jXDDJcvlHnUxPVQ==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","eslint":"latest","mitata":"latest","prettier":"^3.6.2","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","eslint-plugin-jsdoc":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_1.7.0_1765556323853_0.272202830349378","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"ppu-ocv","version":"2.0.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@2.0.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"8258ac07624aba46be5e722d7c8f16f0e1e66de7","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-2.0.0.tgz","fileCount":58,"integrity":"sha512-1HeV7qdQlTrsjpVikTDGhtiN2niTJYt/vsUg2wNr2iuHXZxz35jdMmd61GCltlDVRtk40inKb6a23lUcg4yThw==","signatures":[{"sig":"MEUCIQC+ymOG33CbN0daOaWEe0zfidy9SRpfQOLJZoXfzBfuBwIgeTeRNZgPwHLKmkkdw5mqWOt7TfoDSN0LYYoi/4eXGYU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68292},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"8258ac07624aba46be5e722d7c8f16f0e1e66de7","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"}},"scripts":{"lint":"prettier --check ./src","task":"bun scripts/task.ts","lint:fix":"prettier --write ./src","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-1HeV7qdQlTrsjpVikTDGhtiN2niTJYt/vsUg2wNr2iuHXZxz35jdMmd61GCltlDVRtk40inKb6a23lUcg4yThw==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","mitata":"latest","prettier":"^3.8.1","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_2.0.0_1772600503883_0.44814001593693176","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"ppu-ocv","version":"3.0.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@3.0.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"09a9e6296f1d75f9097db045b97d322328fc6be2","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-3.0.0.tgz","fileCount":66,"integrity":"sha512-cT6NJNkoTax924HvZuiLYMHHxMRZSYuGJabHtgszgMs0Ugy9557BwkUj1xwxmeIUTvdZyXUVM3/+b6omunIN0w==","signatures":[{"sig":"MEUCIQDAOGV0E2tmigoUkfa9PrdzIiyNjdVoHbi5iRzmi0kJ2QIgB0Dli13aQZr8klV3VwmagxTzo1nLMsYykYCiRDy3Ct4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83594},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"09a9e6296f1d75f9097db045b97d322328fc6be2","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"}},"scripts":{"demo":"bunx -y serve -l 4567 .","lint":"prettier --check ./src","task":"bun scripts/task.ts","lint:fix":"prettier --write ./src","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-cT6NJNkoTax924HvZuiLYMHHxMRZSYuGJabHtgszgMs0Ugy9557BwkUj1xwxmeIUTvdZyXUVM3/+b6omunIN0w==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","mitata":"latest","prettier":"^3.8.1","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_3.0.0_1775406656797_0.01737876831749241","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"ppu-ocv","version":"3.1.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":"snowfluke","license":"MIT","_id":"ppu-ocv@3.1.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"dist":{"shasum":"70eaf479cc9f8a52f0d58696a803567f0dc64677","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-3.1.0.tgz","fileCount":66,"integrity":"sha512-zcCeiC58wUcx5r6RQmat2COxEPFY1PArztaJ7lbziJsQTwfloW8hxLSqGtIsx0ch4htM4Qt2xd2UdM+HlJ2lpg==","signatures":[{"sig":"MEUCIQCCuUeU+I7J6PNy7rcguWWI27alyz292X/3etwD7SfVVAIgIsf2ijaPIYRE4FC1KZYlPRCH0nZoM2OPoZg+oHXwwMI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99338},"main":"./index.js","type":"module","types":"./index.d.ts","shasum":"70eaf479cc9f8a52f0d58696a803567f0dc64677","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"}},"scripts":{"demo":"bunx -y serve -l 4567 .","lint":"prettier --check ./src","task":"bun scripts/task.ts","lint:fix":"prettier --write ./src","build:test":"bun task build && bun test","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"_integrity":"sha512-zcCeiC58wUcx5r6RQmat2COxEPFY1PArztaJ7lbziJsQTwfloW8hxLSqGtIsx0ch4htM4Qt2xd2UdM+HlJ2lpg==","repository":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.3","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","mitata":"latest","prettier":"^3.8.1","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","@types/uglify-js":"latest","typescript-eslint":"latest","@stylistic/eslint-plugin":"latest"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_3.1.0_1775413256689_0.4824015705265443","host":"s3://npm-registry-packages-npm-production"}},"3.1.2":{"name":"ppu-ocv","version":"3.1.2","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":{"name":"snowfluke"},"license":"MIT","_id":"ppu-ocv@3.1.2","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"homepage":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv#readme","bugs":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues"},"dist":{"shasum":"3fd371f0734b487f7e9c2a446a4ccae20f8c0707","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-3.1.2.tgz","fileCount":66,"integrity":"sha512-h8TRHINmWwsXrdnBKpAbVwlCT7J4NIufuHrPndJG75ld3Fu7Nf56+VpXYKDAyMSvhv6Tb05fo7yOj1P7na/SVw==","signatures":[{"sig":"MEUCIBrtMKseqjJLGaU8uyrAbFQuWPIvPrASkQWuHy80kttBAiEAunDR8s/PDMBP17C1fnGSPJdzp11l30RUj0cMgQF5/xw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100077},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"}},"gitHead":"7b9f46bd45f9f55eae507fbdeb1eda7b06f52bf4","scripts":{"fmt":"oxfmt --check","demo":"bunx -y serve -l 4567 .","lint":"oxlint","task":"bun scripts/task.ts","test":"bun test","build":"bun task build","fmt:fix":"oxfmt .","prepare":"husky","lint:fix":"oxlint --fix","build:test":"bun task build && bun test","type-check":"bunx tsgo --noEmit","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"repository":{"url":"git+https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.2","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","husky":"^9.1.7","oxfmt":"^0.48.0","mitata":"latest","oxlint":"^1.63.0","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","lint-staged":"^16.0.0","@types/uglify-js":"latest","@typescript/native-preview":"^7.0.0-dev.20260513.1"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_3.1.2_1778738948139_0.5772561636532518","host":"s3://npm-registry-packages-npm-production"}},"3.1.3":{"name":"ppu-ocv","version":"3.1.3","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":{"name":"snowfluke"},"license":"MIT","_id":"ppu-ocv@3.1.3","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"homepage":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv#readme","bugs":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues"},"dist":{"shasum":"13b34b0180aa6429401d8945c8af2ae1dbd9e504","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-3.1.3.tgz","fileCount":66,"integrity":"sha512-kTQDbjnt/nfGq5zszZZsAGZJW/6Vbd5zFYvp4TSavc838XYDn7Yrm8ZE9WxQnseNTAMZwh+Rd1CDT8Q33L5LOA==","signatures":[{"sig":"MEUCIClkN7UkzNbCkZ9KF3IylisTMIkW+Ivvmg05oZG2DxsXAiEA0eh4sdrvvgheAZv9eT7btNf/cy72A4qkHDb7ZiVgJzk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107370},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"}},"gitHead":"3212eef00e78f2da6f81c270ea37ae56802b967b","scripts":{"fmt":"oxfmt --check","demo":"bunx -y serve -l 4567 .","lint":"oxlint","task":"bun scripts/task.ts","test":"bun test --parallel=$(ls tests/*.test.ts | wc -l | tr -d ' ')","build":"bun task build","fmt:fix":"oxfmt .","prepare":"husky","lint:fix":"oxlint --fix","build:test":"bun task build && bun test","type-check":"bunx tsgo --noEmit","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"repository":{"url":"git+https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.2","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","husky":"^9.1.7","oxfmt":"^0.48.0","canvas":"^3.2.3","mitata":"latest","oxlint":"^1.63.0","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","lint-staged":"^16.0.0","@types/uglify-js":"latest","@typescript/native-preview":"^7.0.0-dev.20260513.1"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_3.1.3_1778746163029_0.729877787157172","host":"s3://npm-registry-packages-npm-production"}},"3.1.4":{"name":"ppu-ocv","version":"3.1.4","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":{"name":"snowfluke"},"license":"MIT","_id":"ppu-ocv@3.1.4","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"homepage":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv#readme","bugs":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues"},"dist":{"shasum":"ec71c13ced8e4b398917cc7ed87a383d17d13828","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-3.1.4.tgz","fileCount":66,"integrity":"sha512-Tf6Xv52ej946hPROC1cyjxDkq6xh3cBbiAPP0YHn0kjEHiY1qRj3rGzTAEKkhOdhakzuL/nbmge+fIN9I2Q69g==","signatures":[{"sig":"MEYCIQCzdjG+37G5fh+Fq3IvkYqAVWcU1dpbiUgNDrlul1LnNQIhAJo6Pp6R4RDXWen7fBvfdASzLOHSD+jFwCuI0SvDp5pH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111046},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"}},"gitHead":"5aa2a614185cfdb3dbbaa052713bfe50fc4ca0c2","scripts":{"fmt":"oxfmt --check","demo":"bunx -y serve -l 4567 .","lint":"oxlint","task":"bun scripts/task.ts","test":"bun test --parallel=$(ls tests/*.test.ts | wc -l | tr -d ' ')","build":"bun task build","fmt:fix":"oxfmt .","prepare":"husky","lint:fix":"oxlint --fix","build:test":"bun task build && bun test","type-check":"bunx tsgo --noEmit","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"repository":{"url":"git+https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.8.2","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@napi-rs/canvas":"^0.1.69","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","husky":"^9.1.7","oxfmt":"^0.48.0","canvas":"^3.2.3","mitata":"latest","oxlint":"^1.63.0","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","lint-staged":"^16.0.0","@types/uglify-js":"latest","@typescript/native-preview":"^7.0.0-dev.20260513.1"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_3.1.4_1778756540716_0.7844574772286217","host":"s3://npm-registry-packages-npm-production"}},"3.1.5":{"name":"ppu-ocv","version":"3.1.5","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":{"name":"snowfluke"},"license":"MIT","_id":"ppu-ocv@3.1.5","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"homepage":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv#readme","bugs":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues"},"dist":{"shasum":"27461f25119b1ec4090e9a891e72a5bd35b7f7b9","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-3.1.5.tgz","fileCount":66,"integrity":"sha512-BAvk7Akrm4BbezR3B9FY1F+7nqafDKnRmqGP5iLudeVSwTI1N7CWTAOyPdm3GYFWjCKPYqwt/DB2yiXYhzfOMQ==","signatures":[{"sig":"MEUCIBD52oVSVdpCvbhDgzj77oZ5i51M9oxxUyPMsP2t0cxNAiEA+wOxzFvKNELxiPCdEJHiP+0a8bvmIbOae186oIk75yw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111045},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"}},"gitHead":"9a613403db4374313b827c7b6c1952ca28a5ca0c","scripts":{"fmt":"oxfmt --check","demo":"bunx -y serve -l 4567 .","lint":"oxlint","task":"bun scripts/task.ts","test":"bun test --parallel=$(ls tests/*.test.ts | wc -l | tr -d ' ')","build":"bun task build","fmt:fix":"oxfmt .","prepare":"husky","lint:fix":"oxlint --fix","build:test":"bun task build && bun test","type-check":"bunx tsgo --noEmit","build:publish":"bun task build && bun task report-size && bun task publish"},"_npmUser":{"name":"snowfluke","email":"awalariansyah7@gmail.com"},"repository":{"url":"git+https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"10.9.7","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@napi-rs/canvas":"^1.0.0","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","husky":"^9.1.7","oxfmt":"^0.49.0","canvas":"^3.2.3","mitata":"latest","oxlint":"^1.63.0","uglify-js":">=2.4.24","@types/bun":"latest","typescript":"latest","lint-staged":"^17.0.4","@types/uglify-js":"latest","@typescript/native-preview":"^7.0.0-dev.20260513.1"},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_3.1.5_1778777271110_0.5191332155254182","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"ppu-ocv","version":"3.2.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":{"name":"snowfluke"},"license":"MIT","_id":"ppu-ocv@3.2.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"homepage":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv#readme","bugs":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues"},"dist":{"shasum":"2e805f52072b3b0f91367b31149c73adc21dddd6","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-3.2.0.tgz","fileCount":69,"integrity":"sha512-y7AmRRp5UhpnkME9YjFXhyNpnWbLVVGRB+3qLUmSzlSUGrDy/4q4Gwc6YYN+4xwhAQoo/7aVeC1QbxVfXwBdWg==","signatures":[{"sig":"MEQCID5XxZRl9dUb+qpvINQuyU9l1DOMANeV64gA6sDs4DKiAiBSNJ+8Ny7/1at5c1/jAEl3MW8zROLjXQK7cfkyw7oojA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ppu-ocv@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":115871},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"}},"gitHead":"3e51a6e4ec19f4f16cef623442313c828e18348a","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3518a245-d0d0-4b2d-8fda-1b904eafb0d3"}},"repository":{"url":"git+https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"11.12.1","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@napi-rs/canvas":"^1.0.0","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_3.2.0_1779635813524_0.3499256866571896","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"ppu-ocv","version":"3.2.1","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":{"name":"snowfluke"},"license":"MIT","_id":"ppu-ocv@3.2.1","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"homepage":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv#readme","bugs":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues"},"dist":{"shasum":"1b4495189f10aec32c546fe02d70b120b5c99df5","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-3.2.1.tgz","fileCount":75,"integrity":"sha512-R1SmT6pDgOUnRrqjvjeYEpD4h8Sye1p1Q23pSucVwZ66aPdYNNBk2oiLQqGaftgo8b52wxLjAvS52NgLn1q79w==","signatures":[{"sig":"MEYCIQDvm60CHZxT0Ckk6tKOT/rHOnMU6kEjaQVSNMJ6KcbX2AIhALIPMoBjVL/Ytit6atFur+iwlEsyW+AT7XvWgX5+u8Tw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ppu-ocv@3.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121344},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"}},"gitHead":"4e23af49e6a58037e8bd7f5db4b29387659e3573","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3518a245-d0d0-4b2d-8fda-1b904eafb0d3"}},"repository":{"url":"git+https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"11.12.1","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@napi-rs/canvas":"^1.0.0","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_3.2.1_1779639460888_0.6663110577616798","host":"s3://npm-registry-packages-npm-production"}},"3.2.2":{"name":"ppu-ocv","version":"3.2.2","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":{"name":"snowfluke"},"license":"MIT","_id":"ppu-ocv@3.2.2","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"homepage":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv#readme","bugs":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues"},"dist":{"shasum":"e760b3ae535dce6ee8a8f1fa920b1adc6e286b01","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-3.2.2.tgz","fileCount":75,"integrity":"sha512-CIDzeybd8PW8HB+l9wbKGs8cqvUZ/Gzk2XImr+oWqsUn2iobXcBLa9kxZYFXLZfFu0qL5zFHZgnnZHzjwQ/eeg==","signatures":[{"sig":"MEQCIGK3PMWk5m8erEecwwLrkvJuI+NsNsg/1VMfZB61gRdZAiAi5ulz1vTDJeCXINON/ObVbL95uu2yuKj78BKhTkX7Nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ppu-ocv@3.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121344},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"}},"gitHead":"aa83a1551995c527c9c8cd6b2883cffa12d8e0d4","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3518a245-d0d0-4b2d-8fda-1b904eafb0d3"}},"repository":{"url":"git+https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"11.12.1","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@napi-rs/canvas":"^1.0.0","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_3.2.2_1779643809604_0.028391874859125865","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"ppu-ocv","version":"3.3.0","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":{"name":"snowfluke"},"license":"MIT","_id":"ppu-ocv@3.3.0","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"homepage":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv#readme","bugs":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues"},"dist":{"shasum":"e8d6558f844613220697d8dda81c2da1367fc371","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-3.3.0.tgz","fileCount":79,"integrity":"sha512-JCuw4LgejJ0APAvekR2JxWKmm2u9r3LFtI/5cJvJk6OscH1ygXet4JUY/u436FIWYP+PDtMJguZxdgYcoq1bxA==","signatures":[{"sig":"MEUCICDB7MVVpSKSqx0SwcHpKX/qaRfxfB1tCn0Od9wVPcAaAiEAgk9SgD8wXUuqkgrN+htuuBUvPdOt/rUgtE9CkR51ZfY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ppu-ocv@3.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":130391},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"},"./canvas-mobile":{"types":"./index.canvas-mobile.d.ts","default":"./index.canvas-mobile.js"}},"gitHead":"0d83021aba115ba996c497dca71fca8176f43c7f","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3518a245-d0d0-4b2d-8fda-1b904eafb0d3"}},"repository":{"url":"git+https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git","type":"git"},"_npmVersion":"11.13.0","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"@napi-rs/canvas":"^1.0.0","@techstark/opencv-js":"^4.10.0-release.1"},"_hasShrinkwrap":false,"peerDependencies":{"@shopify/react-native-skia":">=1.0.0"},"trustedDependencies":["@shopify/react-native-skia"],"peerDependenciesMeta":{"@shopify/react-native-skia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ppu-ocv_3.3.0_1782138646691_0.5864369598037891","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"ppu-ocv","version":"4.0.0","description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"author":{"name":"snowfluke"},"license":"MIT","type":"module","main":"./index.js","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./web":{"types":"./index.web.d.ts","default":"./index.web.js"},"./canvas":{"types":"./index.canvas.d.ts","default":"./index.canvas.js"},"./canvas-web":{"types":"./index.canvas-web.d.ts","default":"./index.canvas-web.js"},"./canvas-mobile":{"types":"./index.canvas-mobile.d.ts","default":"./index.canvas-mobile.js"}},"repository":{"type":"git","url":"git+https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git"},"dependencies":{"@napi-rs/canvas":"^1.0.0","@techstark/opencv-js":"^5.0.0-release.1"},"peerDependencies":{"@shopify/react-native-skia":">=1.0.0"},"peerDependenciesMeta":{"@shopify/react-native-skia":{"optional":true}},"trustedDependencies":["@shopify/react-native-skia"],"gitHead":"8183cbe915bc71b9a39f0fbcc29c42b4cf14a96e","_id":"ppu-ocv@4.0.0","bugs":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues"},"homepage":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv#readme","_nodeVersion":"24.17.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-ol+S9/KLZ0aTV0xbC8+ZB0iM+FYux8ujoULeQoYY2IDBZj4LAuujJUkzHzUA2O3KzHs17KuuIzV/w4/htPdn3w==","shasum":"c632e28e75ec5755a08b414120c3eddd4c7581ec","tarball":"https://registry.npmjs.org/ppu-ocv/-/ppu-ocv-4.0.0.tgz","fileCount":79,"unpackedSize":131128,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ppu-ocv@4.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIH4gJzg8fWEBsNhEwTRyMDhng9wWggviw2XUUKFtHbWoAiBnTq1j/OvXoCCzfIUt/K7p4WYgfehu6fn3oNjqJoWUJw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3518a245-d0d0-4b2d-8fda-1b904eafb0d3"}},"directories":{},"maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ppu-ocv_4.0.0_1782625834441_0.5296195197652895"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-03T16:37:35.228Z","modified":"2026-06-28T05:50:34.893Z","0.0.1":"2025-05-03T16:37:35.515Z","0.0.2":"2025-05-03T16:53:05.822Z","0.0.3":"2025-05-03T17:08:07.877Z","1.0.0":"2025-05-03T17:32:50.014Z","1.1.0":"2025-05-05T03:29:11.569Z","1.1.1":"2025-05-05T03:36:54.651Z","1.2.1":"2025-05-06T07:17:03.612Z","1.2.2":"2025-05-08T02:59:03.495Z","1.2.3":"2025-05-08T03:39:16.952Z","1.3.0":"2025-06-23T09:37:34.867Z","1.4.0":"2025-11-20T04:00:19.983Z","1.5.0":"2025-11-24T10:14:43.271Z","1.5.1":"2025-11-25T08:44:32.414Z","1.5.2":"2025-11-25T08:56:08.154Z","1.5.3":"2025-11-25T09:03:06.095Z","1.6.0":"2025-11-25T09:47:36.095Z","1.7.0":"2025-12-12T16:18:44.007Z","2.0.0":"2026-03-04T05:01:44.040Z","3.0.0":"2026-04-05T16:30:56.941Z","3.1.0":"2026-04-05T18:20:56.850Z","3.1.2":"2026-05-14T06:09:08.299Z","3.1.3":"2026-05-14T08:09:23.377Z","3.1.4":"2026-05-14T11:02:20.883Z","3.1.5":"2026-05-14T16:47:51.263Z","3.2.0":"2026-05-24T15:16:53.677Z","3.2.1":"2026-05-24T16:17:41.064Z","3.2.2":"2026-05-24T17:30:09.740Z","3.3.0":"2026-06-22T14:30:46.834Z","4.0.0":"2026-06-28T05:50:34.595Z"},"bugs":{"url":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues"},"author":{"name":"snowfluke"},"license":"MIT","homepage":"https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv#readme","keywords":["open-cv","image-processor","canvas","threshold","computer-vision","opencv-js","perspective-transformation","edge-detection","contours","pipeline","type-safe","modular","chainable","bun","browser","web"],"repository":{"type":"git","url":"git+https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv.git"},"description":"A type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing.","maintainers":[{"name":"snowfluke","email":"awalariansyah7@gmail.com"}],"readme":"# ppu-ocv\n\n[![NPM](https://img.shields.io/npm/dw/ppu-ocv)](https://www.npmjs.com/package/ppu-ocv) [![JSR](https://jsr.io/badges/@snowfluke/ppu-ocv)](https://jsr.io/@snowfluke/ppu-ocv) [![npm version](https://img.shields.io/npm/v/ppu-ocv)](https://www.npmjs.com/package/ppu-ocv) [![Provenance](https://img.shields.io/badge/npm-signed%20provenance-blue?logo=npm)](https://www.npmjs.com/package/ppu-ocv#provenance) [![License: MIT](https://img.shields.io/npm/l/ppu-ocv)](./LICENSE) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/badge)](https://scorecard.dev/viewer/?uri=github.com/PT-Perkasa-Pilar-Utama/ppu-ocv) [![Socket Badge](https://socket.dev/api/badge/npm/package/ppu-ocv)](https://socket.dev/npm/package/ppu-ocv) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12961/badge)](https://www.bestpractices.dev/projects/12961)\n\nA type-safe, modular, chainable image processing library built on top of OpenCV.js with a fluent API leveraging pipeline processing. Decoupled canvas utilities run anywhere — Node, Bun, browsers, browser extensions, and service workers — with or without OpenCV.\n\n![ppu-ocv pipeline demo](https://raw.githubusercontent.com/PT-Perkasa-Pilar-Utama/ppu-ocv/refs/heads/main/assets/ppu-ocv-demo.jpg)\n\n```ts\nconst processor = new ImageProcessor(canvas);\n\nconst result = processor\n  .grayscale()\n  .blur({ size: [5, 5] })\n  .threshold()\n  .invert()\n  .dilate({ size: [20, 20], iter: 5 })\n  .toCanvas();\n\nprocessor.destroy();\n```\n\nBased on [TechStark/opencv-js](https://github.com/TechStark/opencv-js).\n\n## Table of Contents\n\n- [Why ppu-ocv?](#why-ppu-ocv)\n- [Installation](#installation)\n- [Usage (Node.js / Bun)](#usage-nodejs--bun)\n- [Canvas-only Usage (no OpenCV)](#canvas-only-usage-no-opencv)\n- [Web / Browser Support](#web--browser-support)\n- [React Native / Mobile Support](#react-native--mobile-support)\n- [Built-in Pipeline Operations](#built-in-pipeline-operations)\n- [Extending Operations](#extending-operations)\n- [Class Documentation](#class-documentation)\n- [Migrating from v2](#migrating-from-v2)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Why ppu-ocv?\n\n- **Simplified API** — chainable methods that hide OpenCV's verbose Mat allocation\n- **No memory management** — automatic Mat lifecycle within the pipeline\n- **Type-safe** — full TypeScript inference for operations and options\n- **Extensible** — register custom operations with `registry.register(...)` without forking\n- **Cross-platform** — same API in Node, Bun, browsers, and constrained runtimes\n- **Loosely coupled** — canvas utilities work standalone; OpenCV is only loaded when actually needed\n\n## Installation\n\nInstall using your preferred package manager:\n\n```bash\nnpm install ppu-ocv\nyarn add ppu-ocv\nbun add ppu-ocv\n```\n\n## Usage (Node.js / Bun)\n\nNote that operation order matters — you should have at least basic familiarity with OpenCV. See the operations table below.\n\n```ts\nimport { CanvasProcessor, ImageProcessor } from \"ppu-ocv\";\n\nconst file = Bun.file(\"./assets/receipt.jpg\");\nconst image = await file.arrayBuffer();\n\nawait ImageProcessor.initRuntime(); // init opencv\nconst canvas = await CanvasProcessor.prepareCanvas(image);\n\nconst processor = new ImageProcessor(canvas);\nprocessor\n  .grayscale()\n  .blur({ size: [5, 5] })\n  .threshold();\n\nconst resultCanvas = processor.toCanvas();\nprocessor.destroy();\n```\n\nOr use the `execute` API directly:\n\n```ts\nimport { CanvasProcessor, CanvasToolkit, ImageProcessor, cv } from \"ppu-ocv\";\n\nconst file = Bun.file(\"./assets/receipt.jpg\");\nconst image = await file.arrayBuffer();\n\nconst canvasToolkit = CanvasToolkit.getInstance();\nawait ImageProcessor.initRuntime();\nconst canvas = await CanvasProcessor.prepareCanvas(image);\n\nconst processor = new ImageProcessor(canvas);\nconst grayscaleImg = processor.execute(\"grayscale\").toCanvas();\n\n// The pipeline continues from the grayscaled image\nconst thresholdImg = processor\n  .execute(\"blur\")\n  .execute(\"threshold\", {\n    type: cv.THRESH_BINARY_INV + cv.THRESH_OTSU,\n  })\n  .toCanvas();\n\nawait canvasToolkit.saveImage({\n  canvas: thresholdImg,\n  filename: \"threshold\",\n  path: \"out\",\n});\n```\n\nFor more advanced usage, see: [Example usage of ppu-ocv](./examples)\n\n## Canvas-only usage (no OpenCV)\n\nStarting from v3.0.0, canvas utilities are fully decoupled from OpenCV. If you only need canvas I/O (e.g. loading/saving images, cropping, drawing) without any image processing, import from `ppu-ocv/canvas` (Node) or `ppu-ocv/canvas-web` (browser). OpenCV is **never imported or initialised** by these entry points, making them safe for use in Browser Extensions, Service Workers, and edge runtimes.\n\n```ts\n// Node.js — zero OpenCV dependency\nimport { CanvasProcessor, CanvasToolkit } from \"ppu-ocv/canvas\";\n\nconst file = Bun.file(\"./assets/image.jpg\");\nconst canvas = await CanvasProcessor.prepareCanvas(await file.arrayBuffer());\n\nconst toolkit = CanvasToolkit.getInstance();\nconst cropped = toolkit.crop({\n  canvas,\n  bbox: { x0: 0, y0: 0, x1: 100, y1: 100 },\n});\n\nconst buffer = await CanvasProcessor.prepareBuffer(cropped);\n```\n\n```ts\n// Browser Extension background script — zero OpenCV dependency\nimport { CanvasProcessor, CanvasToolkit } from \"ppu-ocv/canvas-web\";\n\nconst response = await fetch(\"/image.jpg\");\nconst canvas = await CanvasProcessor.prepareCanvas(await response.arrayBuffer());\n```\n\n## Web / Browser Support\n\nImport from `ppu-ocv/web` to use the browser-native canvas APIs (`HTMLCanvasElement` / `OffscreenCanvas`) instead of `@napi-rs/canvas`.\n\n### With a bundler (Vite, webpack, etc.)\n\n```ts\nimport { CanvasProcessor, ImageProcessor, cv } from \"ppu-ocv/web\";\n\nawait ImageProcessor.initRuntime();\n\nconst response = await fetch(\"/my-image.jpg\");\nconst buffer = await response.arrayBuffer();\n\nconst canvas = await CanvasProcessor.prepareCanvas(buffer);\nconst processor = new ImageProcessor(canvas);\n\nprocessor\n  .grayscale()\n  .blur({ size: [5, 5] })\n  .threshold();\n\nconst result = processor.toCanvas(); // returns HTMLCanvasElement\ndocument.body.appendChild(result);\n\nprocessor.destroy();\n```\n\n### Vanilla HTML (no bundler)\n\nThe web build does not bundle OpenCV — load `opencv.js` yourself so it is on\n`globalThis.cv`, then `initRuntime()` waits for the WASM to finish initializing:\n\n```html\n<!-- Load OpenCV; sets globalThis.cv (WASM initializes asynchronously). -->\n<script async src=\"https://docs.opencv.org/4.10.0/opencv.js\"></script>\n<script type=\"module\">\n  import {\n    CanvasProcessor,\n    ImageProcessor,\n  } from \"https://cdn.jsdelivr.net/npm/ppu-ocv@3/index.web.js\";\n\n  // Wait until the opencv.js script tag is present, then for the runtime.\n  await new Promise((resolve) => {\n    const ready = () => globalThis.cv && globalThis.cv.Mat;\n    const tick = () => (ready() ? resolve() : setTimeout(tick, 30));\n    tick();\n  });\n  await ImageProcessor.initRuntime();\n\n  const response = await fetch(\"/my-image.jpg\");\n  const canvas = await CanvasProcessor.prepareCanvas(await response.arrayBuffer());\n\n  const processor = new ImageProcessor(canvas);\n  processor\n    .grayscale()\n    .blur({ size: [5, 5] })\n    .threshold();\n\n  const result = processor.toCanvas();\n  processor.destroy();\n</script>\n```\n\n> With a bundler, importing `@techstark/opencv-js` once (it self-registers on\n> `globalThis.cv`) is enough — no script tag needed.\n\n> **Note:** ES modules require HTTP/HTTPS — use a local server (`npx serve .`) for dev, or deploy to GitHub Pages.\n\nSee the [interactive demo](./index.html) for a full working example.\n\n### Entry point reference\n\n| Import path             | OpenCV | Canvas backend                        | `CanvasToolkit`      | Use case                                   |\n| ----------------------- | ------ | ------------------------------------- | -------------------- | ------------------------------------------ |\n| `ppu-ocv`               | ✅     | `@napi-rs/canvas`                     | Full (with file I/O) | Full pipeline, Node.js / Bun               |\n| `ppu-ocv/web`           | ✅     | `HTMLCanvasElement`/`OffscreenCanvas` | Base only            | Full pipeline, browser                     |\n| `ppu-ocv/canvas`        | ❌     | `@napi-rs/canvas`                     | Full (with file I/O) | Canvas-only, Node (extensions, edge, etc.) |\n| `ppu-ocv/canvas-web`    | ❌     | `HTMLCanvasElement`/`OffscreenCanvas` | Base only            | Canvas-only, browser extensions / SW       |\n| `ppu-ocv/canvas-mobile` | ❌     | `@shopify/react-native-skia`          | Base only            | Canvas-only, React Native / Expo           |\n\n### Platform abstraction\n\nUnder the hood, ppu-ocv uses a platform abstraction layer. Each entry point auto-registers its platform. You can also register a custom platform:\n\n```ts\nimport { setPlatform, type CanvasPlatform } from \"ppu-ocv/web\";\n\nconst myPlatform: CanvasPlatform = {\n  createCanvas(width, height) {\n    /* ... */\n  },\n  loadImage(source) {\n    /* ... */\n  },\n  isCanvas(value) {\n    /* ... */\n  },\n};\n\nsetPlatform(myPlatform);\n```\n\n## React Native / Mobile Support\n\nImport from `ppu-ocv/canvas-mobile` for React Native apps (iOS / Android). This\nentry point is backed by [`@shopify/react-native-skia`](https://shopify.github.io/react-native-skia/)\nand is functionally equivalent to `ppu-ocv/canvas-web` — it exposes `CanvasProcessor`,\n`CanvasToolkitBase`, and canvas factory types **without any OpenCV or WASM dependency**.\n\n### Installation\n\n```bash\n# In your React Native / Expo project\nnpm install ppu-ocv @shopify/react-native-skia\n# or\nbun add ppu-ocv @shopify/react-native-skia\n```\n\nFollow the [react-native-skia setup guide](https://shopify.github.io/react-native-skia/docs/getting-started/installation)\nto complete native installation (pod install / Gradle sync). Skia **must** be\ninitialised by the time you call any `ppu-ocv` API.\n\n### Usage\n\n```ts\nimport { CanvasProcessor } from \"ppu-ocv/canvas-mobile\";\n\n// Load from an ArrayBuffer (e.g. from expo-file-system or fetch)\nconst response = await fetch(\"https://example.com/receipt.jpg\");\nconst canvas = await CanvasProcessor.prepareCanvas(await response.arrayBuffer());\n\n// Or load directly from a URI (file:// or https://)\nconst canvas = await CanvasProcessor.prepareCanvas(\"file:///path/to/photo.jpg\");\n\n// Chainable canvas-only pipeline (no OpenCV)\nconst regions = new CanvasProcessor(canvas)\n  .grayscale()\n  .threshold({ thresh: 127 })\n  .findRegions({ foreground: \"light\", minArea: 20 });\n\n// Export back to bytes\nconst buffer = await CanvasProcessor.prepareBuffer(canvas);\n```\n\n### Requirements\n\n- `@shopify/react-native-skia` ≥ 1.0.0\n- React Native ≥ 0.74 / Expo SDK ≥ 51 (Hermes engine)\n\n> **Note:** OpenCV (`@techstark/opencv-js`) is never loaded by this entry point.\n> If you need full OpenCV operations in a React Native context, consider running\n> the processing server-side and streaming results to the device.\n\n## Built-in pipeline operations\n\nTo avoid bloat, we only ship essential operations for chaining. Currently shipped operations are:\n\n| Operation                 | Depends on…                                 | Why                                                                                      |\n| ------------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------- |\n| **grayscale**             | –                                           | Converts to single‐channel; many ops expect a gray image first.                          |\n| **blur**                  | _(ideally after)_ grayscale                 | Noise reduction works best on 1-channel data.                                            |\n| **equalize**              | _(after)_ grayscale                         | Histogram equalisation (CLAHE or global) for contrast normalisation before thresholding. |\n| **threshold**             | _(after)_ grayscale                         | Produces a binary image; needs gray levels.                                              |\n| **adaptiveThreshold**     | _(after)_ grayscale (and optionally blur)   | Local thresholding on gray values (smoother if blurred first).                           |\n| **invert**                | _(after)_ threshold or adaptiveThreshold    | Inverting a binary mask flips foreground/background.                                     |\n| **canny**                 | _(after)_ grayscale + blur                  | Edge detection expects a smoothed gray image.                                            |\n| **dilate**                | _(after)_ threshold or edge detection       | Expands foreground regions—usually on a binary mask.                                     |\n| **erode**                 | _(after)_ threshold or edge detection       | Shrinks or cleans up binary regions.                                                     |\n| **morphologicalGradient** | _(after)_ dilation + erosion (or threshold) | Highlights boundaries by subtracting eroded from dilated image.                          |\n| **warp**                  | –                                           | Geometric transform; can be applied at any point.                                        |\n| **resize**                | –                                           | Also independent; purely geometry.                                                       |\n| **border**                | –                                           | Independent; purely geometry.                                                            |\n| **rotate**                | –                                           | Independent.                                                                             |\n\n## Extending operations\n\nYou can easily add your own by creating a prototype method or extending the `ImageProcessor` class.\n\nSee: [How to extend ppu-ocv operations](./docs/how-to-extend-ppu-ocv-operations.md)\n\n## Class documentation\n\n#### `CanvasProcessor`\n\nCanvas-native image processing with **no OpenCV dependency**. Available from all entry points including `ppu-ocv/canvas` and `ppu-ocv/canvas-web`. Provides a chainable instance API alongside static I/O helpers.\n\n```ts\nconst result = new CanvasProcessor(canvas)\n  .resize({ width: 360, height: 640 })\n  .grayscale()\n  .threshold({ thresh: 127 })\n  .invert()\n  .border({ size: 10, color: \"white\" })\n  .toCanvas();\n\n// Detect connected white regions on a binary image\nconst regions = new CanvasProcessor(binaryCanvas).findRegions({\n  foreground: \"light\",\n  minArea: 20,\n  // thresh: 0  ← use on resized binary images to match OpenCV (any non-zero pixel = foreground)\n  // padding: { vertical: 0.4, horizontal: 0.6 }  ← expand bbox by fraction of height\n  // scale: 1 / resizeRatio                        ← map coords back to original image space\n});\nregions.sort((a, b) => b.area - a.area); // largest first\n// regions[0] → { bbox: { x0, y0, x1, y1 }, area }\n```\n\n**Static I/O**\n\n| Method                 | Args        | Description                                           |\n| ---------------------- | ----------- | ----------------------------------------------------- |\n| static `prepareCanvas` | ArrayBuffer | Load image bytes into a `CanvasLike`                  |\n| static `prepareBuffer` | CanvasLike  | Export a `CanvasLike` to an `ArrayBuffer` (PNG bytes) |\n\n**Instance operations** (chainable, return `this`)\n\n| Method      | Options                            | OpenCV equivalent         | Fidelity       |\n| ----------- | ---------------------------------- | ------------------------- | -------------- |\n| `resize`    | `width`, `height`                  | `cv.resize` INTER_LINEAR  | 1:1 (↓), ≈ (↑) |\n| `grayscale` | —                                  | `COLOR_RGBA2GRAY`         | **1:1**        |\n| `convert`   | `alpha?`, `beta?`                  | `Mat.convertTo` (α·x + β) | **1:1**        |\n| `invert`    | —                                  | `cv.bitwise_not`          | **1:1** ¹      |\n| `threshold` | `thresh?` (127), `maxValue?` (255) | `THRESH_BINARY`           | **1:1**        |\n| `border`    | `size?` (10), `color?` (CSS)       | `BORDER_CONSTANT`         | **1:1**        |\n| `rotate`    | `angle`, `cx?`, `cy?`              | `warpAffine`              | ≈ (±6 px) ²    |\n| `toCanvas`  | —                                  | —                         | —              |\n\n**Region detection** (returns data, does not mutate)\n\n| Method        | Options                                                                                  | Description                                                    |\n| ------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------------------------- |\n| `findRegions` | `foreground?` (`\"light\"`), `thresh?` (127), `minArea?`, `maxArea?`, `padding?`, `scale?` | 8-connected flood-fill on a binary canvas → `DetectedRegion[]` |\n\n`DetectedRegion` shape: `{ bbox: BoundingBox, area: number }` where `bbox` is `{ x0, y0, x1, y1 }` (x1/y1 exclusive). Equivalent to OpenCV's `findContours(RETR_EXTERNAL) + boundingRect` — all matched bboxes agree within ±1 px on solid binary images. ³\n\n**`thresh` option** — pixel value threshold for foreground detection (default `127`). For resized binary images, use `thresh: 0` so anti-aliased border pixels (values 1–127) are included as foreground, matching OpenCV's non-zero threshold. With `thresh: 0` + `padding` + `scale`, full-pipeline IoU vs OpenCV is **98.4%** (all 21/21 boxes matched).\n\n> ¹ Canvas `invert` preserves the alpha channel; OpenCV `bitwise_not` also inverts alpha. Results are identical when the source is opaque (alpha=255).\n>\n> ² Canvas uses anti-aliased bilinear interpolation; OpenCV uses plain bilinear. Difference is visually imperceptible and has no impact on OCR quality.\n>\n> ³ `RETR_LIST` may return additional inner-hole contours for white regions that contain dark sub-regions; `findRegions` counts each connected white component once regardless of interior holes.\n\n#### `ImageProcessor`\n\nRequires OpenCV. Available from `ppu-ocv` and `ppu-ocv/web`.\n\n| Method               | Args             | Description                                                        |\n| -------------------- | ---------------- | ------------------------------------------------------------------ |\n| constructor          | cv.Mat or Canvas | Instantiate processor with initial image                           |\n| static `initRuntime` |                  | OpenCV runtime initialization — required once per runtime          |\n| operations           | depends          | Chainable operations like `blur`, `grayscale`, `resize`, and so on |\n| `execute`            | name, options    | Chainable operations via the `execute` API                         |\n| `toMat`              |                  | Return the current image as a `cv.Mat`                             |\n| `toCanvas`           |                  | Return the current image as a `CanvasLike`                         |\n| `destroy`            |                  | Clean up `cv.Mat` memory                                           |\n\n#### `CanvasToolkit`\n\n| Method        | Args                   | Description                                                                               |\n| ------------- | ---------------------- | ----------------------------------------------------------------------------------------- |\n| `crop`        | BoundingBox, Canvas    | Crop a part of source canvas and return a new canvas of the cropped part                  |\n| `isDirty`     | Canvas, threshold      | Check whether a binary canvas is dirty (full of major color either black or white) or not |\n| `saveImage`   | Canvas, filename, path | Save a canvas to an image file _(Node only)_                                              |\n| `clearOutput` | path                   | Clear the output folder _(Node only)_                                                     |\n| `drawLine`    | ctx, coordinate, style | Draw a non-filled rectangle outline on the canvas                                         |\n| `drawContour` | ctx, contour, style    | Draw a contour on the canvas — accepts any `ContourLike` (`{ data32S }`)                  |\n\n#### `DeskewService`\n\nDetects and corrects text skew in document images using a multi-method consensus approach (minAreaRect, baseline analysis, Hough transform). Requires OpenCV. Available from `ppu-ocv` and `ppu-ocv/web`.\n\n| Method               | Args          | Description                          |\n| -------------------- | ------------- | ------------------------------------ |\n| constructor          | DeskewOptions | `verbose`, `minimumAreaThreshold`    |\n| `calculateSkewAngle` | CanvasLike    | Detect skew angle in degrees         |\n| `deskewImage`        | CanvasLike    | Return a deskewed copy of the canvas |\n\n#### `Contours`\n\n| Method                           | Args            | Description                                                      |\n| -------------------------------- | --------------- | ---------------------------------------------------------------- |\n| constructor                      | cv.Mat, options | Instantiate Contours and automatically find & store contour list |\n| `getAll`                         |                 | Return the full `cv.MatVector` of contours                       |\n| `getFromIndex`                   | index           | Get contour at a specific index                                  |\n| `getRect`                        | contour         | Get the bounding rectangle of a contour                          |\n| `iterate`                        | callback        | Iterate over all contours                                        |\n| `getLargestContourArea`          |                 | Return the contour with the largest area                         |\n| `getCornerPoints`                | options         | Get four corner points for perspective transformation (warp)     |\n| `getApproximateRectangleContour` | options         | Simplify a contour to an approximate rectangle                   |\n| `destroy`                        |                 | Destroy and clean up contour memory                              |\n\n#### `ImageAnalysis`\n\nA collection of utility functions for analyzing image properties (requires OpenCV).\n\n- `calculateMeanNormalizedLabLightness`: Calculates the mean normalized lightness of an image using the L channel of the Lab color space.\n- `calculateMeanGrayscaleValue`: Calculates the mean pixel value after converting to grayscale.\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for the full guide — setup, commit conventions, quality checks, and PR flow. Also:\n\n- [Code of Conduct](./CODE_OF_CONDUCT.md) — community standards.\n- [Security policy](./SECURITY.md) — how to report vulnerabilities privately.\n- [Issue tracker](https://github.com/PT-Perkasa-Pilar-Utama/ppu-ocv/issues) — bug reports, feature requests, and docs gaps each have a template.\n\nQuick local commands:\n\n```bash\nbun install\nbun test           # run unit tests\nbun run fmt        # check formatting\nbun run lint       # check lint\nbun run type-check # tsgo --noEmit\nbun task build     # emit ./lib\nbun task bench     # micro-bench the operations registry\n```\n\n## Migrating from v2\n\nSee [MIGRATION.md](./MIGRATION.md) for a full guide. The short version:\n\n```diff\n- import { ImageProcessor } from \"ppu-ocv\";\n- const canvas = await ImageProcessor.prepareCanvas(buffer);\n- const buf    = await ImageProcessor.prepareBuffer(canvas);\n\n+ import { CanvasProcessor } from \"ppu-ocv\";\n+ const canvas = await CanvasProcessor.prepareCanvas(buffer);\n+ const buf    = await CanvasProcessor.prepareBuffer(canvas);\n```\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n\n## Support\n\nIf you encounter any issues or have suggestions, please open an issue in the repository.\n\nHappy coding!\n","readmeFilename":"README.md"}