{"_id":"@aikotami/acreplay-wasm","_rev":"2-f694d7944a420be540d9189d96ece222","name":"@aikotami/acreplay-wasm","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@aikotami/acreplay-wasm","version":"0.1.0","_id":"@aikotami/acreplay-wasm@0.1.0","maintainers":[{"name":"aikotami","email":"ethenzime@gmail.com"}],"dist":{"shasum":"fc7c7bc02b7e8918bda19619dcbacacc4f6f4f8d","tarball":"https://registry.npmjs.org/@aikotami/acreplay-wasm/-/acreplay-wasm-0.1.0.tgz","fileCount":14,"integrity":"sha512-PmlxiyW+Vzn45ywqpxNYfku4LDjHHjvHKDfTHcFLDWxAhoIjyYHLZ4m4lsDvrbnahBGyOMSDkrlYcqtkBV6VDg==","signatures":[{"sig":"MEUCIQCf5mEyQD6ZYkY/VoAoARyPEA34cxp3opjQ1oh0y/EEugIgX3jgtXXV5UdJ9xmWW08MXq7TJLBV02Pwlzi7Sp4bdZY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14834},"main":"./dist/index.js","type":"module","_from":"file:aikotami-acreplay-wasm-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"}},"_npmUser":{"name":"aikotami","email":"ethenzime@gmail.com"},"_resolved":"/tmp/21ac24794e9564d6cfe6c6c82733a794/aikotami-acreplay-wasm-0.1.0.tgz","_integrity":"sha512-PmlxiyW+Vzn45ywqpxNYfku4LDjHHjvHKDfTHcFLDWxAhoIjyYHLZ4m4lsDvrbnahBGyOMSDkrlYcqtkBV6VDg==","_npmVersion":"11.11.0","description":"Browser-facing TypeScript wrapper around the Assetto Corsa replay parser compiled to WebAssembly.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/acreplay-wasm_0.1.0_1775384603935_0.8782195231763983","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aikotami/acreplay-wasm","version":"0.2.0","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./wasm":{"import":"./wasm/acrp_wasm.js"},"./wasm/acrp_wasm.wasm":{"import":"./wasm/acrp_wasm.wasm"}},"publishConfig":{"access":"public"},"_id":"@aikotami/acreplay-wasm@0.2.0","description":"Browser-facing TypeScript wrapper around the Assetto Corsa replay parser compiled to WebAssembly.","_integrity":"sha512-vHKiPQcN8rjm2w1B0eXFWCeU6x1L/pwxqVLaJYlNz86juecQVQoTE5VSjZwsVc+QCIfptWORInoM+FKYbuq8RQ==","_resolved":"/tmp/9db2f75bc10148a6a62acaa57c164b75/aikotami-acreplay-wasm-0.2.0.tgz","_from":"file:aikotami-acreplay-wasm-0.2.0.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-vHKiPQcN8rjm2w1B0eXFWCeU6x1L/pwxqVLaJYlNz86juecQVQoTE5VSjZwsVc+QCIfptWORInoM+FKYbuq8RQ==","shasum":"480e4755de8b95dff6f3e28485e234f1d4592c87","tarball":"https://registry.npmjs.org/@aikotami/acreplay-wasm/-/acreplay-wasm-0.2.0.tgz","fileCount":16,"unpackedSize":412946,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDPimeJbrR1wDuT0S+c9D7Iwjs9rIjkaJl6FrHyqoCzzgIgC+slBdWDGiQvMs1AdCB4o7dvsCNFbvMfNh6PLh2Ezpg="}]},"_npmUser":{"name":"aikotami","email":"ethenzime@gmail.com"},"directories":{},"maintainers":[{"name":"aikotami","email":"ethenzime@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/acreplay-wasm_0.2.0_1775414432229_0.8706759118395662"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-05T10:23:23.852Z","modified":"2026-04-05T18:40:32.503Z","0.1.0":"2026-04-05T10:23:24.091Z","0.2.0":"2026-04-05T18:40:32.393Z"},"description":"Browser-facing TypeScript wrapper around the Assetto Corsa replay parser compiled to WebAssembly.","maintainers":[{"name":"aikotami","email":"ethenzime@gmail.com"}],"readme":"# @aikotami/acreplay-wasm\n\nBrowser-facing TypeScript wrapper around the Assetto Corsa replay parser compiled to WebAssembly.\n\n## What it does\n\n- loads the wasm parser module\n- reads raw replay bytes\n- exposes replay inspection and per-car parsing APIs\n- returns lap telemetry payloads as binary lap-pack bytes\n\n## Position in the pipeline\n\n`raw replay file` -> `@aikotami/acreplay-wasm` -> `lapPack bytes`\n\n## Public API\n\nRoot entrypoint:\n\n- `createReplayParser(factory)` for direct main-thread use\n- `createReplayWorkerClient(worker)` for talking to a dedicated worker\n- `createEmscriptenModuleFactory(...)` and shared types\n\nWorker entrypoint:\n\n- `@aikotami/acreplay-wasm/worker` exports `attachWorkerHandler(factory)`\n\n## Worker usage\n\nRecommended pattern for modern bundlers is a module worker created with `new Worker(new URL(...), import.meta.url)`.\n\n`parser.worker.ts`\n\n```ts\nimport { createEmscriptenModuleFactory } from \"@aikotami/acreplay-wasm\";\nimport { attachWorkerHandler } from \"@aikotami/acreplay-wasm/worker\";\nimport createParserModule from \"./acrp_wasm.js\";\n\nattachWorkerHandler(createEmscriptenModuleFactory(createParserModule));\n```\n\n`main.ts`\n\n```ts\nimport { createReplayWorkerClient } from \"@aikotami/acreplay-wasm\";\n\nconst worker = new Worker(new URL(\"./parser.worker.ts\", import.meta.url), {\n  type: \"module\",\n});\n\nconst parser = createReplayWorkerClient(worker);\nawait parser.init();\n\nconst manifest = await parser.inspectReplay(fileBytes.slice(0));\nconst parsedCar = await parser.parseCar(fileBytes, 0);\n```\n\n`createReplayWorkerClient()` sends request `ArrayBuffer`s with transferables for zero-copy handoff to the worker. After calling `inspectReplay()` or `parseCar()`, the original `fileBytes` buffer on the calling thread is detached and should be treated as consumed.\n","readmeFilename":"README.md"}