{"_id":"@0disoft/laqu","_rev":"9-7596e8b92f89476b3cf58722080fedd9","name":"@0disoft/laqu","dist-tags":{"latest":"1.1.9"},"versions":{"1.0.1":{"name":"@0disoft/laqu","version":"1.0.1","keywords":["cli","library","live-rendering","progress-bar","terminal","tui","typescript"],"_id":"@0disoft/laqu@1.0.1","maintainers":[{"name":"0disoft","email":"rodisoft1@gmail.com"}],"homepage":"https://github.com/0disoft/laqu#readme","bugs":{"url":"https://github.com/0disoft/laqu/issues"},"dist":{"shasum":"c38a4727431b9c89933f9476346f9fc8eeafd5c0","tarball":"https://registry.npmjs.org/@0disoft/laqu/-/laqu-1.0.1.tgz","fileCount":39,"integrity":"sha512-RLWf2RG3J5tGmmmF8V2N6TLxA/NjiMmrnBHDrmLOGNOhzMTjBtFlf7b6rA3EDX+OCidZQsd8HNby8iUrDVyiFg==","signatures":[{"sig":"MEYCIQCW5o/B8yO4RCgia/dKoGESKA9voNSpCQb9M2GZlZa32gIhANVduoGcFX3RW7fW5dx/12aa5JNeLzl7A3MLREhF9Kym","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70709},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme":{"types":"./dist/theme-entry.d.ts","import":"./dist/theme-entry.js"},"./width":{"types":"./dist/width-entry.d.ts","import":"./dist/width-entry.js"},"./events":{"types":"./dist/events-entry.d.ts","import":"./dist/events-entry.js"}},"gitHead":"f0ca7f310c15b7c1d407065fd71ef82ac5d4c944","scripts":{"lint":"oxlint src test","test":"bun run build:test && node --test \"dist-test/test/**/*.test.js\"","build":"bun run clean && tsc -p tsconfig.build.json","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build","clean":"node -e \"const fs = require('node:fs'); for (const p of ['dist', 'dist-test', 'coverage']) fs.rmSync(p, { recursive: true, force: true });\"","format":"oxfmt --write .","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.test.json","pack:check":"bun run build && node test/fixtures/consumer-esm.mjs && tsc -p test/fixtures/consumer-ts/tsconfig.json --noEmit && npm pack --dry-run --json","format:check":"oxfmt --check .","example:basic":"bun run build && node examples/basic.mjs"},"_npmUser":{"name":"0disoft","email":"rodisoft1@gmail.com"},"repository":{"url":"git+https://github.com/0disoft/laqu.git","type":"git"},"_npmVersion":"11.16.0","description":"Reliable terminal progress and live CLI rendering primitives for TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"oxfmt":"0.57.0","oxlint":"1.72.0","typescript":"6.0.3","@types/node":"24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/laqu_1.0.1_1783070601613_0.3766859919740546","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@0disoft/laqu","version":"1.0.2","keywords":["cli","library","live-rendering","progress-bar","terminal","tui","typescript"],"license":"MIT","_id":"@0disoft/laqu@1.0.2","maintainers":[{"name":"0disoft","email":"rodisoft1@gmail.com"}],"homepage":"https://github.com/0disoft/laqu#readme","bugs":{"url":"https://github.com/0disoft/laqu/issues"},"dist":{"shasum":"18a87e9753ddbb40dab8c14e121b3c2975a46cf8","tarball":"https://registry.npmjs.org/@0disoft/laqu/-/laqu-1.0.2.tgz","fileCount":40,"integrity":"sha512-xTuOkHg6r15jXJ7wBGQMkfy9gtrN1jG0eXY+dCv3QklUyPsp+mUWrARTim59wL70wqqGoeN9v5J4e2kUjr5f/Q==","signatures":[{"sig":"MEUCIQD9DxL8ViXFer6wqMlvOc3gdZpVBFjctW282N4v5oT26QIgFQR06LcdUWaljMLjy6GzFCerwmVMBXhleSXBhijj500=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@0disoft%2flaqu@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72506},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme":{"types":"./dist/theme-entry.d.ts","import":"./dist/theme-entry.js"},"./width":{"types":"./dist/width-entry.d.ts","import":"./dist/width-entry.js"},"./events":{"types":"./dist/events-entry.d.ts","import":"./dist/events-entry.js"}},"gitHead":"2f0551155b6769b40faa93bf06fd6bd5c07e19f4","scripts":{"lint":"oxlint src test","test":"bun run build:test && node --test \"dist-test/test/**/*.test.js\"","build":"bun run clean && tsc -p tsconfig.build.json","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build","clean":"node -e \"const fs = require('node:fs'); for (const p of ['dist', 'dist-test', 'coverage']) fs.rmSync(p, { recursive: true, force: true });\"","format":"oxfmt --write .","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.test.json","pack:check":"bun run build && node test/fixtures/consumer-esm.mjs && tsc -p test/fixtures/consumer-ts/tsconfig.json --noEmit && npm pack --dry-run --json","format:check":"oxfmt --check .","example:basic":"bun run build && node examples/basic.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b7b57a2e-768b-4aee-aef0-7fc48029c0ee"}},"repository":{"url":"git+https://github.com/0disoft/laqu.git","type":"git"},"_npmVersion":"11.16.0","description":"Reliable terminal progress and live CLI rendering primitives for TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"oxfmt":"0.57.0","oxlint":"1.72.0","typescript":"6.0.3","@types/node":"24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/laqu_1.0.2_1783075506855_0.6905905156022447","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@0disoft/laqu","version":"1.0.4","keywords":["cli","library","live-rendering","progress-bar","terminal","tui","typescript"],"license":"MIT","_id":"@0disoft/laqu@1.0.4","maintainers":[{"name":"0disoft","email":"rodisoft1@gmail.com"}],"homepage":"https://github.com/0disoft/laqu#readme","bugs":{"url":"https://github.com/0disoft/laqu/issues"},"dist":{"shasum":"baa23180cef7fca31d6eb2ead497e02bd889f699","tarball":"https://registry.npmjs.org/@0disoft/laqu/-/laqu-1.0.4.tgz","fileCount":40,"integrity":"sha512-8CFDatlEMnHYxM4zApmNUPV0g2wosgIkMC3DdD/2K9OYmByqXyYwGi+AzaoS1rMurrJN6937FzOB7Dst/uw+xg==","signatures":[{"sig":"MEUCIFgNOPiFbJNG9wRF4ozpZzNGZ7oZeBCL8yS4hqG+3ZX/AiEAm58RRecV3/umBoWY0tDcyoapMJJ4gplepeg98jRNRgU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@0disoft%2flaqu@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94253},"type":"module","_from":"file:0disoft-laqu-1.0.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme":{"types":"./dist/theme-entry.d.ts","import":"./dist/theme-entry.js"},"./width":{"types":"./dist/width-entry.d.ts","import":"./dist/width-entry.js"},"./events":{"types":"./dist/events-entry.d.ts","import":"./dist/events-entry.js"}},"scripts":{"lint":"oxlint src test","test":"bun run build:test && node --test \"dist-test/test/**/*.test.js\"","build":"bun run clean && tsc -p tsconfig.build.json","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build","clean":"node -e \"const fs = require('node:fs'); for (const p of ['dist', 'dist-test', 'coverage']) fs.rmSync(p, { recursive: true, force: true });\"","format":"oxfmt --write .","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.test.json","pack:check":"bun run build && node test/fixtures/consumer-esm.mjs && tsc -p test/fixtures/consumer-ts/tsconfig.json --noEmit && npm pack --dry-run --json","format:check":"oxfmt --check .","example:basic":"bun run build && node examples/basic.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b7b57a2e-768b-4aee-aef0-7fc48029c0ee"}},"_resolved":"/home/runner/work/laqu/laqu/0disoft-laqu-1.0.4.tgz","_integrity":"sha512-8CFDatlEMnHYxM4zApmNUPV0g2wosgIkMC3DdD/2K9OYmByqXyYwGi+AzaoS1rMurrJN6937FzOB7Dst/uw+xg==","repository":{"url":"git+https://github.com/0disoft/laqu.git","type":"git"},"_npmVersion":"11.16.0","description":"Reliable terminal progress and live CLI rendering primitives for TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"oxfmt":"0.57.0","oxlint":"1.72.0","typescript":"6.0.3","@types/node":"24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/laqu_1.0.4_1783087387310_0.008714591300380992","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@0disoft/laqu","version":"1.0.5","keywords":["cli","library","live-rendering","progress-bar","terminal","tui","typescript"],"license":"MIT","_id":"@0disoft/laqu@1.0.5","maintainers":[{"name":"0disoft","email":"rodisoft1@gmail.com"}],"homepage":"https://github.com/0disoft/laqu#readme","bugs":{"url":"https://github.com/0disoft/laqu/issues"},"dist":{"shasum":"fef24b769af18b53c1efc7e7fb269913e9bd51ae","tarball":"https://registry.npmjs.org/@0disoft/laqu/-/laqu-1.0.5.tgz","fileCount":40,"integrity":"sha512-ytUT6SOTSLrhk5D4pB0MO7rTL6p2VJl9nzjXsRyHNtgNEl84j7MhgP3yZk53qYyCYNJ5haPWyJTJ7uAK9h0+fA==","signatures":[{"sig":"MEQCICm5rmR4/OZzRQGJOdr7gVZmTvsCoE5QOCfq2fvZ3dZYAiAlJv4oMqFNKcqYnn6Xh0o9LG91alxiAEBxUIqDATviqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@0disoft%2flaqu@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":101253},"type":"module","_from":"file:0disoft-laqu-1.0.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme":{"types":"./dist/theme-entry.d.ts","import":"./dist/theme-entry.js"},"./width":{"types":"./dist/width-entry.d.ts","import":"./dist/width-entry.js"},"./events":{"types":"./dist/events-entry.d.ts","import":"./dist/events-entry.js"}},"scripts":{"lint":"oxlint src test","test":"bun run build:test && node --test \"dist-test/test/**/*.test.js\"","build":"bun run clean && tsc -p tsconfig.build.json","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build","clean":"node -e \"const fs = require('node:fs'); for (const p of ['dist', 'dist-test', 'coverage']) fs.rmSync(p, { recursive: true, force: true });\"","format":"oxfmt --write .","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.test.json","pack:check":"bun run build && node test/fixtures/consumer-esm.mjs && tsc -p test/fixtures/consumer-ts/tsconfig.json --noEmit && npm pack --dry-run --json","format:check":"oxfmt --check .","example:basic":"bun run build && node examples/basic.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b7b57a2e-768b-4aee-aef0-7fc48029c0ee"}},"_resolved":"/home/runner/work/laqu/laqu/0disoft-laqu-1.0.5.tgz","_integrity":"sha512-ytUT6SOTSLrhk5D4pB0MO7rTL6p2VJl9nzjXsRyHNtgNEl84j7MhgP3yZk53qYyCYNJ5haPWyJTJ7uAK9h0+fA==","repository":{"url":"git+https://github.com/0disoft/laqu.git","type":"git"},"_npmVersion":"11.16.0","description":"Reliable terminal progress and live CLI rendering primitives for TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"oxfmt":"0.57.0","oxlint":"1.72.0","typescript":"6.0.3","@types/node":"24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/laqu_1.0.5_1783141607857_0.2987427219343921","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@0disoft/laqu","version":"1.0.6","keywords":["cli","library","live-rendering","progress-bar","terminal","tui","typescript"],"license":"MIT","_id":"@0disoft/laqu@1.0.6","maintainers":[{"name":"0disoft","email":"rodisoft1@gmail.com"}],"homepage":"https://github.com/0disoft/laqu#readme","bugs":{"url":"https://github.com/0disoft/laqu/issues"},"dist":{"shasum":"a456ba91f55021d467fdb6c0cd7b914a055fdf97","tarball":"https://registry.npmjs.org/@0disoft/laqu/-/laqu-1.0.6.tgz","fileCount":40,"integrity":"sha512-41Zm8xE4GZuESzGodfSSZi+l4BwFewgGEC4/iHXkCWqcG52XHnXAcuH5nmYtdM1M8zmVBEujj3AWKTZKo3C/gA==","signatures":[{"sig":"MEUCICaavZBZaMvHARZLiEYDpk2MPQmcCMuQf1CmH5yOMpP1AiEAhx3fwsS1FBceYVnCKbBdzrLePU4dcQKHT+mV1hVvcFg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@0disoft%2flaqu@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":103354},"type":"module","_from":"file:0disoft-laqu-1.0.6.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme":{"types":"./dist/theme-entry.d.ts","import":"./dist/theme-entry.js"},"./width":{"types":"./dist/width-entry.d.ts","import":"./dist/width-entry.js"},"./events":{"types":"./dist/events-entry.d.ts","import":"./dist/events-entry.js"}},"scripts":{"lint":"oxlint src test","test":"bun run build:test && node --test \"dist-test/test/**/*.test.js\"","build":"bun run clean && tsc -p tsconfig.build.json","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build","clean":"node -e \"const fs = require('node:fs'); for (const p of ['dist', 'dist-test', 'coverage']) fs.rmSync(p, { recursive: true, force: true });\"","format":"oxfmt --write .","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.test.json","pack:check":"bun run build && node test/fixtures/consumer-esm.mjs && tsc -p test/fixtures/consumer-ts/tsconfig.json --noEmit && npm pack --dry-run --json","format:check":"oxfmt --check .","example:basic":"bun run build && node examples/basic.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b7b57a2e-768b-4aee-aef0-7fc48029c0ee"}},"_resolved":"/home/runner/work/laqu/laqu/0disoft-laqu-1.0.6.tgz","_integrity":"sha512-41Zm8xE4GZuESzGodfSSZi+l4BwFewgGEC4/iHXkCWqcG52XHnXAcuH5nmYtdM1M8zmVBEujj3AWKTZKo3C/gA==","repository":{"url":"git+https://github.com/0disoft/laqu.git","type":"git"},"_npmVersion":"11.16.0","description":"Reliable terminal progress and live CLI rendering primitives for TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"oxfmt":"0.57.0","oxlint":"1.72.0","typescript":"6.0.3","@types/node":"24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/laqu_1.0.6_1783401210256_0.24327952001525643","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@0disoft/laqu","version":"1.0.7","keywords":["cli","library","live-rendering","progress-bar","terminal","tui","typescript"],"license":"MIT","_id":"@0disoft/laqu@1.0.7","maintainers":[{"name":"0disoft","email":"rodisoft1@gmail.com"}],"homepage":"https://github.com/0disoft/laqu#readme","bugs":{"url":"https://github.com/0disoft/laqu/issues"},"dist":{"shasum":"c54069f594faae8b852d0c4df6539d631a579f07","tarball":"https://registry.npmjs.org/@0disoft/laqu/-/laqu-1.0.7.tgz","fileCount":40,"integrity":"sha512-B1SnrO/xVf/VLrikCMaaCeVmLzdse6e2me3nfsap4QEE+8yhkWFcWyI6/Ll2mAxfx3ryQEsxkumymrI5L4p5Hg==","signatures":[{"sig":"MEYCIQC3Eyp7slgm+0ou1pH0UD1f287FjyOHqc5lQTJVtRSx7AIhANhqlXccllLoq0+iIMI+t+dy/vmGdVqFJjFJrxyqayo6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@0disoft%2flaqu@1.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":110300},"type":"module","_from":"file:0disoft-laqu-1.0.7.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme":{"types":"./dist/theme-entry.d.ts","import":"./dist/theme-entry.js"},"./width":{"types":"./dist/width-entry.d.ts","import":"./dist/width-entry.js"},"./events":{"types":"./dist/events-entry.d.ts","import":"./dist/events-entry.js"}},"scripts":{"lint":"oxlint src test","test":"bun run build:test && node --test \"dist-test/test/**/*.test.js\"","build":"bun run clean && tsc -p tsconfig.build.json","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build","clean":"node -e \"const fs = require('node:fs'); for (const p of ['dist', 'dist-test', 'coverage']) fs.rmSync(p, { recursive: true, force: true });\"","format":"oxfmt --write .","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.test.json","pack:check":"bun run build && node test/fixtures/consumer-esm.mjs && tsc -p test/fixtures/consumer-ts/tsconfig.json --noEmit && npm pack --dry-run --json","format:check":"oxfmt --check .","example:basic":"bun run build && node examples/basic.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b7b57a2e-768b-4aee-aef0-7fc48029c0ee"}},"_resolved":"/home/runner/work/laqu/laqu/0disoft-laqu-1.0.7.tgz","_integrity":"sha512-B1SnrO/xVf/VLrikCMaaCeVmLzdse6e2me3nfsap4QEE+8yhkWFcWyI6/Ll2mAxfx3ryQEsxkumymrI5L4p5Hg==","repository":{"url":"git+https://github.com/0disoft/laqu.git","type":"git"},"_npmVersion":"11.16.0","description":"Reliable terminal progress and live CLI rendering primitives for TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"oxfmt":"0.57.0","oxlint":"1.72.0","typescript":"6.0.3","@types/node":"24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/laqu_1.0.7_1783605050623_0.7305688094518208","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@0disoft/laqu","version":"1.0.8","keywords":["cli","library","live-rendering","progress-bar","terminal","tui","typescript"],"license":"MIT","_id":"@0disoft/laqu@1.0.8","maintainers":[{"name":"0disoft","email":"rodisoft1@gmail.com"}],"homepage":"https://github.com/0disoft/laqu#readme","bugs":{"url":"https://github.com/0disoft/laqu/issues"},"dist":{"shasum":"26be12d539c54c700226e5fe8303a7957bb35208","tarball":"https://registry.npmjs.org/@0disoft/laqu/-/laqu-1.0.8.tgz","fileCount":40,"integrity":"sha512-3bVSxdBRNzSGPi/NHvyoogquffkoURmZKANHA/7iBxTnvodeZno2NeIA/ZX2XnyNg0lHYTffjaPTiA3fQPja2g==","signatures":[{"sig":"MEYCIQCfpajZLWfZ5RI7nTQaqq95BbrTi3hs2yaWI+IUQX4sXgIhAIe70mYsDXt3y0VnEXXqqIZc4xeYLOGdMOlV6Rshgs+v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@0disoft%2flaqu@1.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":111060},"type":"module","_from":"file:0disoft-laqu-1.0.8.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme":{"types":"./dist/theme-entry.d.ts","import":"./dist/theme-entry.js"},"./width":{"types":"./dist/width-entry.d.ts","import":"./dist/width-entry.js"},"./events":{"types":"./dist/events-entry.d.ts","import":"./dist/events-entry.js"}},"scripts":{"lint":"oxlint src test","test":"bun run build:test && node --test \"dist-test/test/**/*.test.js\"","build":"bun run clean && tsc -p tsconfig.build.json","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build","clean":"node -e \"const fs = require('node:fs'); for (const p of ['dist', 'dist-test', 'coverage']) fs.rmSync(p, { recursive: true, force: true });\"","format":"oxfmt --write .","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.test.json","pack:check":"bun run build && node test/fixtures/consumer-esm.mjs && tsc -p test/fixtures/consumer-ts/tsconfig.json --noEmit && npm pack --dry-run --json","format:check":"oxfmt --check .","example:basic":"bun run build && node examples/basic.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b7b57a2e-768b-4aee-aef0-7fc48029c0ee"}},"_resolved":"/home/runner/work/laqu/laqu/0disoft-laqu-1.0.8.tgz","_integrity":"sha512-3bVSxdBRNzSGPi/NHvyoogquffkoURmZKANHA/7iBxTnvodeZno2NeIA/ZX2XnyNg0lHYTffjaPTiA3fQPja2g==","repository":{"url":"git+https://github.com/0disoft/laqu.git","type":"git"},"_npmVersion":"11.16.0","description":"Reliable terminal progress and live CLI rendering primitives for TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"oxfmt":"0.57.0","oxlint":"1.72.0","typescript":"6.0.3","@types/node":"24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/laqu_1.0.8_1783831325870_0.715121771852234","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@0disoft/laqu","version":"1.1.8","keywords":["cli","library","live-rendering","progress-bar","terminal","tui","typescript"],"license":"MIT","_id":"@0disoft/laqu@1.1.8","maintainers":[{"name":"0disoft","email":"rodisoft1@gmail.com"}],"homepage":"https://github.com/0disoft/laqu#readme","bugs":{"url":"https://github.com/0disoft/laqu/issues"},"dist":{"shasum":"e33840fb1365cf83aad7ba3a1944588abe54dfbd","tarball":"https://registry.npmjs.org/@0disoft/laqu/-/laqu-1.1.8.tgz","fileCount":43,"integrity":"sha512-qBN2O5vwhJhwmEvpGyaeZ9/i7uosChkwiFk6kf8PmdN+oPznD01KPnbj85cb9rVC4DxpCuLtaeH/sf8EYLkH5g==","signatures":[{"sig":"MEYCIQDse5CSthTgJr3M0bvwGafvKsUGTCCF5SXqyq38zODGwwIhAKs5WiJr9Ho5ej2t6JVKQce8bwrCz5xWZPKitvD1dV5i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@0disoft%2flaqu@1.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":130851},"type":"module","_from":"file:0disoft-laqu-1.1.8.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./theme":{"types":"./dist/theme-entry.d.ts","import":"./dist/theme-entry.js"},"./width":{"types":"./dist/width-entry.d.ts","import":"./dist/width-entry.js"},"./events":{"types":"./dist/events-entry.d.ts","import":"./dist/events-entry.js"}},"scripts":{"lint":"oxlint src test","test":"bun run build:test && node --test \"dist-test/test/**/*.test.js\"","build":"bun run clean && tsc -p tsconfig.build.json","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build","clean":"node -e \"const fs = require('node:fs'); for (const p of ['dist', 'dist-test', 'coverage']) fs.rmSync(p, { recursive: true, force: true });\"","format":"oxfmt --write .","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.test.json","pack:check":"bun run build && node test/fixtures/package-consumer.mjs","format:check":"oxfmt --check .","example:basic":"bun run build && node examples/basic.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b7b57a2e-768b-4aee-aef0-7fc48029c0ee"}},"_resolved":"/home/runner/work/laqu/laqu/0disoft-laqu-1.1.8.tgz","_integrity":"sha512-qBN2O5vwhJhwmEvpGyaeZ9/i7uosChkwiFk6kf8PmdN+oPznD01KPnbj85cb9rVC4DxpCuLtaeH/sf8EYLkH5g==","repository":{"url":"git+https://github.com/0disoft/laqu.git","type":"git"},"_npmVersion":"11.16.0","description":"Reliable terminal progress and live CLI rendering primitives for TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"oxfmt":"0.x","oxlint":"1.x","typescript":"7.x","@types/node":"24.x"},"_npmOperationalInternal":{"tmp":"tmp/laqu_1.1.8_1786355610770_0.2880790949666714","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"@0disoft/laqu","version":"1.1.9","description":"Reliable CLI progress on stderr with clean stdout and versioned events.","keywords":["ci","cli","library","live-rendering","ndjson","nodejs","progress-bar","stderr","terminal","typescript"],"homepage":"https://github.com/0disoft/laqu#readme","bugs":{"url":"https://github.com/0disoft/laqu/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/0disoft/laqu.git"},"type":"module","sideEffects":false,"types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./events":{"types":"./dist/events-entry.d.ts","import":"./dist/events-entry.js"},"./theme":{"types":"./dist/theme-entry.d.ts","import":"./dist/theme-entry.js"},"./width":{"types":"./dist/width-entry.d.ts","import":"./dist/width-entry.js"}},"publishConfig":{"access":"public"},"scripts":{"build":"bun run clean && tsc -p tsconfig.build.json","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build","clean":"node -e \"const fs = require('node:fs'); for (const p of ['dist', 'dist-test', 'coverage']) fs.rmSync(p, { recursive: true, force: true });\"","example:basic":"bun run build && node examples/basic.mjs","example:clean-stdout":"bun run build && node examples/clean-stdout.mjs","example:nested-tasks":"bun run build && node examples/nested-tasks.mjs","example:ndjson":"bun run build && node examples/ndjson-events.mjs","format":"oxfmt --write .","format:check":"oxfmt --check .","lint":"oxlint src test","test":"bun run build:test && node --test \"dist-test/test/**/*.test.js\"","pack:check":"bun run build && node test/fixtures/package-consumer.mjs","build:test":"tsc -p tsconfig.test.json","typecheck":"tsc -p tsconfig.json --noEmit"},"devDependencies":{"@types/node":"22.x","oxfmt":"0.x","oxlint":"1.x","typescript":"7.x"},"engines":{"node":">=22.0.0"},"packageManager":"bun@1.3.14","_id":"@0disoft/laqu@1.1.9","_integrity":"sha512-TNY+MeL1tQBFRTHDyzLcj4IKEChdcwfiQBf73aWehhC5Wvm2T4vcGvSjuZwhddDJueTbfHQnJAzflQ8sgkFNgQ==","_resolved":"/home/runner/work/laqu/laqu/0disoft-laqu-1.1.9.tgz","_from":"file:0disoft-laqu-1.1.9.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-TNY+MeL1tQBFRTHDyzLcj4IKEChdcwfiQBf73aWehhC5Wvm2T4vcGvSjuZwhddDJueTbfHQnJAzflQ8sgkFNgQ==","shasum":"3fa59db2d00802fd3e27a6c4efeadf565541810f","tarball":"https://registry.npmjs.org/@0disoft/laqu/-/laqu-1.1.9.tgz","fileCount":48,"unpackedSize":140124,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@0disoft%2flaqu@1.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDbSXT+evwTGvBekKi69eXgcAXmWQwY/mYMwJdHCR/k8wIgXQWMrtn1H4iss4G7ZQWP2SauFbNn+ZI1efsT8MWeUws="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b7b57a2e-768b-4aee-aef0-7fc48029c0ee"}},"directories":{},"maintainers":[{"name":"0disoft","email":"rodisoft1@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/laqu_1.1.9_1786592248406_0.06050069224618482"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-03T09:23:21.451Z","modified":"2026-08-13T03:37:28.841Z","1.0.1":"2026-07-03T09:23:21.768Z","1.0.2":"2026-07-03T10:45:06.989Z","1.0.4":"2026-07-03T14:03:07.515Z","1.0.5":"2026-07-04T05:06:48.029Z","1.0.6":"2026-07-07T05:13:30.406Z","1.0.7":"2026-07-09T13:50:50.793Z","1.0.8":"2026-07-12T04:42:06.002Z","1.1.8":"2026-08-10T09:53:30.986Z","1.1.9":"2026-08-13T03:37:28.540Z"},"bugs":{"url":"https://github.com/0disoft/laqu/issues"},"license":"MIT","homepage":"https://github.com/0disoft/laqu#readme","keywords":["ci","cli","library","live-rendering","ndjson","nodejs","progress-bar","stderr","terminal","typescript"],"repository":{"type":"git","url":"git+https://github.com/0disoft/laqu.git"},"description":"Reliable CLI progress on stderr with clean stdout and versioned events.","maintainers":[{"name":"0disoft","email":"rodisoft1@gmail.com"}],"readme":"# laqu\n\n[![npm version](https://img.shields.io/npm/v/@0disoft/laqu?logo=npm)](https://www.npmjs.com/package/@0disoft/laqu)\n[![Node.js 22+](https://img.shields.io/badge/Node.js-22%2B-5FA04E?logo=nodedotjs&logoColor=white)](package.json)\n[![MIT license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\n**Progress for humans. Events for machines. stdout stays clean.**\n\n`laqu` gives Node.js and TypeScript CLIs live progress without corrupting piped JSON, CSV, file\nlists, or other caller-owned output. Human status goes to stderr by default; CI-safe text and\nversioned JSON/NDJSON events use the same task model when a terminal UI is not appropriate.\n\n![Laqu rendering concurrent CLI tasks while stdout stays available for JSON](media/terminal-preview.svg)\n\n```text\n› install packages  [███████████████░░░░░] 76%  downloading  76/100\n› build artifacts   [██████████░░░░░░░░░░] 49%  bundling\n· publish preview   [░░░░░░░░░░░░░░░░░░░░] 0%  waiting\n```\n\nstdout remains available for the result:\n\n```json\n{ \"artifact\": \"dist/laqu.js\", \"status\": \"ready\" }\n```\n\n## Install\n\n```sh\nnpm install @0disoft/laqu\n```\n\n```sh\npnpm add @0disoft/laqu\n```\n\n```sh\nbun add @0disoft/laqu\n```\n\nThe published package targets Node.js 22+ and does not require Bun, Deno, Rust, native addons, WASM, or C++ bindings at runtime.\n\n## Quick Start\n\n```ts\nimport { createLaqu } from \"@0disoft/laqu\";\n\nconst progress = createLaqu();\n\nconst result = await progress.task(\"build\", { total: 3 }, async (task) => {\n  task.advance(1);\n  task.setMessage(\"typecheck passed\");\n  task.advance(1);\n  task.setMessage(\"bundle written\");\n  task.advance(1);\n  return { artifact: \"dist/laqu.js\", status: \"ready\" };\n});\n\nawait progress.close();\nprocess.stdout.write(`${JSON.stringify(result)}\\n`);\n```\n\nWhen this command runs interactively, progress animates on stderr. When stdout is redirected, the\nredirected file contains only the JSON result. In CI or a pipe, human progress automatically falls\nback to stable append-only lines.\n\n## Pick The Output Your Consumer Needs\n\n| Consumer                      | Configuration                     | Output behavior                |\n| ----------------------------- | --------------------------------- | ------------------------------ |\n| Person in a terminal          | default                           | live progress on stderr        |\n| CI log or redirected terminal | default                           | append-only progress on stderr |\n| Event collector               | `{ format: \"ndjson\" }`            | versioned events on stderr     |\n| Data pipeline                 | default plus caller writes stdout | clean caller-owned stdout      |\n\nThe output format, terminal capability, output target, and progress policy remain independent. You\ncan change one without pretending that terminal detection, serialization, and destination are the\nsame decision.\n\n## Runnable Examples\n\n- [`examples/basic.mjs`](examples/basic.mjs): animated multi-task terminal demo\n- [`examples/nested-tasks.mjs`](examples/nested-tasks.mjs): parent and child task hierarchy\n- [`examples/clean-stdout.mjs`](examples/clean-stdout.mjs): progress on stderr with a JSON result on stdout\n- [`examples/ndjson-events.mjs`](examples/ndjson-events.mjs): versioned NDJSON task and summary events\n\nRun an example after installing dependencies:\n\n```sh\nbun run example:clean-stdout > result.json\n```\n\nThe progress remains visible in the terminal while `result.json` stays parseable JSON.\n\n## Scoped Tasks\n\n```ts\nimport { createLaqu } from \"@0disoft/laqu\";\n\nconst progress = createLaqu();\n\nawait progress.task(\"download\", { total: 100 }, async (task) => {\n  task.setMessage(\"starting\");\n  task.advance(25);\n  task.setDetail(\"chunk 1/4\");\n  task.advance(75);\n});\n\nawait progress.close();\n```\n\nScoped tasks mark themselves as succeeded when the callback resolves. If the callback throws, the task is marked failed and the original error is rethrown. If the task receives an aborted `AbortSignal`, it is marked cancelled and cleanup still runs.\n\n## Manual Tasks\n\n```ts\nimport { createProgressRuntime } from \"@0disoft/laqu\";\n\nconst progress = createProgressRuntime();\nconst build = progress.createTask(\"build\", { total: 3 });\n\nbuild.advance(1);\nbuild.setMessage(\"typecheck\");\nbuild.advance(1);\nbuild.setMessage(\"bundle\");\nbuild.advance(1);\nbuild.succeed(\"done\");\n\nconst optional = progress.createTask(\"optional cache warmup\");\noptional.skip(\"already warm\");\n\nawait progress.close();\n```\n\nThe API avoids ambiguous calls such as `update(42)`. Use `setCompleted(42)` for absolute progress and `advance(42)` for a delta.\nManual tasks also honor `TaskOptions.signal`; aborting the signal marks the task cancelled with the message `aborted`. Use `task.skip(message)` for intentionally skipped work such as cache hits, disabled feature branches, or already up-to-date steps.\n\nAfter `progress.close()` starts, the runtime stops accepting new root tasks, caller logs, and manual\ntask handle updates. Scoped task callbacks that were already running may finish their own task tree;\nunfinished manual tasks are cancelled before the final summary. Create a new runtime for later\nprogress output.\n\n## Logs\n\n```ts\nconst progress = createLaqu();\n\nprogress.log(\"cache hit\");\nawait progress.close();\n```\n\nLogs are separate scrollback records. They are not rendered as task rows and they pass through the same output coordinator as progress frames so live regions and log lines do not corrupt each other.\n\n## Process Lifecycle\n\n`laqu` does not install process-level signal or exception handlers by default. Applications that\nalready own shutdown should keep the default and call `progress.close()` from their own cleanup\npath.\n\nShort-lived CLI commands that want `laqu` to flush progress output during `SIGINT`, `SIGTERM`,\n`uncaughtException`, or `unhandledRejection` can opt in:\n\n```ts\nconst progress = createLaqu({\n  manageProcessLifecycle: true,\n});\n```\n\nFatal process events do not wait for application work to finish. The runtime cancels unfinished\ntasks, makes a best-effort terminal cleanup for up to 250 milliseconds, and then re-delivers the\noriginal signal or exception.\n\n## Public Imports\n\nThe root import exposes the stable runtime API and common helpers:\n\n```ts\nimport { createLaqu, displayWidth } from \"@0disoft/laqu\";\n```\n\nFocused subpath exports are available for narrower consumers:\n\n```ts\nimport { LAQU_EVENT_SCHEMA_VERSION } from \"@0disoft/laqu/events\";\nimport { compileTheme } from \"@0disoft/laqu/theme\";\nimport { displayWidth } from \"@0disoft/laqu/width\";\n```\n\n## Output Contract\n\nBy default:\n\n- stdout is reserved for user data such as JSON, NDJSON, CSV, file lists, or binary output.\n- stderr is used for progress, status, logs, and machine-readable progress events.\n- human live rendering is enabled only when the status stream is a TTY and the environment is not CI.\n- only one runtime owns live rendering for a stream at a time; concurrent runtimes on that same stream fall back to plain append rendering until the live owner closes.\n- CI, pipe, dumb terminal, and non-TTY output fall back to plain append rendering unless a different policy is requested.\n- plain append rendering preserves every task state transition and full sanitized log text; `maxRows` and terminal-width truncation apply only to live rendering. Live rendering prioritizes active tasks, never exceeds the configured or available terminal rows, and redraws from current terminal dimensions when the status stream emits `resize`.\n- JSON/NDJSON progress events do not go to stdout unless the caller explicitly passes a separate status stream that points there.\n\n```ts\nconst progress = createLaqu({\n  format: \"ndjson\",\n  progressPolicy: \"jsonl\",\n  retention: { maxLogs: 1000, maxTerminalTasks: 1000 },\n  stderr: process.stderr,\n});\n```\n\nMachine-readable progress events use a versioned schema. `format: \"json\"` writes one parseable JSON array when the runtime closes; `format: \"ndjson\"` and `progressPolicy: \"jsonl\"` write newline-delimited event objects as work progresses.\n\nPlain and machine-readable frames are queued in order while the status stream is backpressured.\nThe queue is bounded to 4096 pending frames. A write exception, stream termination, drain timeout,\nunsupported backpressure contract, or buffer overflow becomes a sticky `LaquOutputError` returned\nby `flush()` and `close()`; output is never reported as successfully flushed after such a failure.\nLive rendering keeps only the latest screen frame while preserving queued scrollback.\n\n```ts\nimport { LaquOutputError } from \"@0disoft/laqu\";\n\ntry {\n  await progress.close();\n} catch (error) {\n  if (error instanceof LaquOutputError) {\n    console.error(error.code);\n  }\n  throw error;\n}\n```\n\nThe runtime retains the newest 1000 log records and 1000 terminal task records by default so long-running commands do not keep unbounded output buffers. Set `retention.maxLogs` or `retention.maxTerminalTasks` to smaller non-negative integers when only the latest output window should be rendered or emitted. Terminal task pruning affects retained task rows and task events only after the terminal task has been snapshotted for rendering; summary events keep lifecycle counts for all tasks created by the runtime.\nTask event fields such as `parentId`, `message`, and `detail` are omitted when they are absent.\n\n```json\n{\n  \"schema\": \"laqu.event\",\n  \"version\": 1,\n  \"type\": \"task\",\n  \"task\": {\n    \"id\": \"task-1\",\n    \"title\": \"download\",\n    \"status\": \"running\",\n    \"depth\": 0,\n    \"progress\": {\n      \"kind\": \"ratio\",\n      \"ratio\": 0.5,\n      \"overrun\": false\n    }\n  }\n}\n```\n\nEvent schema version `1` is exported as `LAQU_EVENT_SCHEMA_VERSION`.\n\nThe selection axes are independent:\n\n- `format`: `human`, `json`, or `ndjson`\n- `streamCapability`: `tty`, `ci`, `pipe`, or `dumb`\n- output target: stderr by default or an explicit `statusStream`\n- `progressPolicy`: `auto`, `always`, `never`, `plain`, `jsonl`, or `silent`\n\n## Themes\n\nThemes are token-first:\n\n```ts\nconst progress = createLaqu({\n  theme: {\n    successSymbol: \"ok\",\n    runningSymbol: \">\",\n    progressComplete: \"=\",\n    overflowMarker: \"...\",\n  },\n});\n```\n\nTheme tokens are semantic: success symbols, running symbols, progress glyphs, indentation, gaps, and overflow markers. Slot-level formatting should return safe renderable segments rather than raw strings with cursor movement.\n\n`dangerouslyRawAnsi()` exists as an escape hatch for callers that need raw ANSI. It can break width measurement, fallback rendering, and reset guarantees if used incorrectly, so keep it isolated.\n\n## Width And ANSI\n\n`laqu` includes a pure TypeScript width engine:\n\n```ts\nimport { displayWidth, truncateToColumns, wrapToColumns } from \"@0disoft/laqu\";\n\ndisplayWidth(\"\\u001b[31m한글\\u001b[0m\"); // 4\ntruncateToColumns(\"👩‍💻 building\", 8, { overflowMarker: \"...\" });\nwrapToColumns(\"abcd한글\", 4);\n```\n\nANSI/control sequences are tokenized as zero-width. Text is segmented by grapheme; static East Asian Width ranges handle wide/fullwidth and ambiguous characters, while Node's Unicode properties distinguish marks, default emoji presentation, VS15/VS16, keycaps, flags, and ZWJ clusters. Ambiguous width defaults to one column unless overridden.\n\n## Child Process Output\n\nDo not mix child process output with live rendering through `stdio: \"inherit\"`. Pipe child output through the parent process and write it with `runtime.log()`, close the runtime before handing the terminal directly to the child process, or run progress output in plain/log mode.\n\n## Documentation And Support\n\n- [Public API](docs/library/public-api.md)\n- [Compatibility policy](docs/library/compatibility.md)\n- [SemVer policy](docs/library/semver.md)\n- [Migration guide](docs/library/migration-guide.md)\n- [Changelog](CHANGELOG.md)\n- [Architecture and operating documentation](docs/README.md)\n- [Contributing](CONTRIBUTING.md)\n- [Security policy](SECURITY.md)\n- [Issues](https://github.com/0disoft/laqu/issues)\n\n## Development\n\n```sh\nbun install\nbun run check\nbun run pack:check\nbun run example:basic\n```\n\n`bun run check` runs strict typecheck, OXC lint, OXC format check, Node.js built-in tests, and build output generation.\n`bun run pack:check` builds a real package tarball, installs it into a new temporary project without registry access or lifecycle scripts, executes ESM imports, and compiles a strict TypeScript consumer with dependency declaration checks enabled.\nCI runs both checks on Ubuntu, Windows, and macOS. The real PTY resize harness runs on Unix hosts; Windows runs the full stream, process-signal, renderer, and package suite without claiming ConPTY coverage.\nAn additional blocking Ubuntu job runs the same package and packed-consumer checks on the minimum\nsupported runtime, Node.js 22. The three-platform matrix runs on Node.js 24.\n`bun run example:basic` builds the package and runs a small live progress demo. Terminal scrollback keeps the final frame; watch the command while it runs to see the bar animate in place.\n\n## Release\n\nGitHub Actions publishes npm releases from maintainer-created version tags. The tag must match `package.json` exactly, for example `v1.1.9` for version `1.1.9`.\n\n```sh\ngit tag -a v1.1.9 -m \"v1.1.9\"\ngit push origin main v1.1.9\n```\n\nThe npm package must define a Trusted Publisher connection for GitHub Actions with organization/user `0disoft`, repository `laqu`, workflow filename `release.yml`, environment name `npm`, and `npm publish` allowed. The GitHub repository must also define an `npm` environment with required reviewers and a deployment tag rule that allows only `v*.*.*` tags.\n\nOn a matching tag push, the workflow first verifies the tag, package metadata, tests, build, and installed-tarball consumer checks with read-only repository permissions. The publish job then waits on the `npm` environment gate, repeats package verification on the tagged commit, packs the release tarball, uploads that exact tarball as a retained workflow artifact, publishes the same tarball to npm with provenance through OIDC, and creates a GitHub Release from the matching `CHANGELOG.md` section.\n","readmeFilename":"README.md"}