{"_rev":"4-0a6a139dba9083737a49d2622cd64a8a","time":{"created":"2026-01-08T11:48:18.382Z","modified":"2026-01-08T11:48:19.147Z","1.0.0":"2026-01-08T10:20:08.342Z","1.0.1":"2026-01-08T11:48:18.658Z"},"_id":"@3lens/core","name":"@3lens/core","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.1":{"name":"@3lens/core","version":"1.0.1","description":"Core probe SDK for 3Lens - the three.js devtool","keywords":["three.js","threejs","webgl","webgpu","devtools","debugging"],"homepage":"https://github.com/adriandarian/3Lens","repository":{"type":"git","url":"git+https://github.com/adriandarian/3Lens.git","directory":"packages/core"},"license":"MIT","author":{"name":"Adrian Darian","email":"adrian.the.hactus@gmail.com","url":"https://github.com/adriandarian"},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"main":"./dist/index.js","types":"./dist/index.d.ts","devDependencies":{"@webgpu/types":"^0.1.0","three":"^0.160.0","vite-plugin-dts":"^4.5.0"},"peerDependencies":{"three":">=0.150.0"},"scripts":{"build":"vite build","dev":"vite build --watch","typecheck":"tsc --noEmit","clean":"rm -rf dist"},"_id":"@3lens/core@1.0.1","bugs":{"url":"https://github.com/adriandarian/3Lens/issues"},"_integrity":"sha512-yCU8MQS7XGoRIpHFvDsroTuO9NDCF0FA8nJoBvQIN8QX3yUjBYPeDDaeTg9FOSOBSlJGJl/yL8YvqWHYZMX/2w==","_resolved":"/tmp/d16eac254c72effcc755a685a2ee76d1/3lens-core-1.0.1.tgz","_from":"file:3lens-core-1.0.1.tgz","_nodeVersion":"20.19.6","_npmVersion":"10.8.2","dist":{"integrity":"sha512-yCU8MQS7XGoRIpHFvDsroTuO9NDCF0FA8nJoBvQIN8QX3yUjBYPeDDaeTg9FOSOBSlJGJl/yL8YvqWHYZMX/2w==","shasum":"47d3fb93e1203fad3cad96f503b8fcdc483fb9dc","tarball":"https://registry.npmjs.org/@3lens/core/-/core-1.0.1.tgz","fileCount":155,"unpackedSize":2495375,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3lens%2fcore@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDHvHcOmReBV/8pd0UkuXQK927O/Kuz2rc6HRAnF5qi2AIgKvEejeHCPPspcCqq+dojP0BgyipaV8n35iSx3MFJ3p8="}]},"_npmUser":{"name":"adriandarian","email":"adrian.the.hactus@gmail.com"},"directories":{},"maintainers":[{"name":"adriandarian","email":"adrian.the.hactus@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_1.0.1_1767872898456_0.8647035101399021"},"_hasShrinkwrap":false}},"maintainers":[{"name":"adriandarian","email":"adrian.the.hactus@gmail.com"}],"description":"Core probe SDK for 3Lens - the three.js devtool","homepage":"https://github.com/adriandarian/3Lens","keywords":["three.js","threejs","webgl","webgpu","devtools","debugging"],"repository":{"type":"git","url":"git+https://github.com/adriandarian/3Lens.git","directory":"packages/core"},"author":{"name":"Adrian Darian","email":"adrian.the.hactus@gmail.com","url":"https://github.com/adriandarian"},"bugs":{"url":"https://github.com/adriandarian/3Lens/issues"},"license":"MIT","readme":"# @3lens/core\n\nCore probe SDK for 3Lens — the definitive developer toolkit for three.js.\n\n## Installation\n\n```bash\nnpm install @3lens/core\n```\n\n> **Note:** Currently in alpha, not yet published to npm.\n\n## Usage\n\n```typescript\nimport * as THREE from 'three';\nimport { createProbe } from '@3lens/core';\n\nconst renderer = new THREE.WebGLRenderer();\nconst scene = new THREE.Scene();\n\n// Create probe with performance rules\nconst probe = createProbe({\n  appName: 'My App',\n  rules: {\n    maxDrawCalls: 500,\n    maxTriangles: 250_000,\n    maxFrameTimeMs: 16.67,\n  },\n});\n\n// Start observing\nprobe.observeRenderer(renderer);\nprobe.observeScene(scene);\n\n// Enable selection highlighting (optional)\nprobe.setThreeReference(THREE);\n```\n\n## API\n\n### `createProbe(config: ProbeConfig): DevtoolProbe`\n\nCreates a new probe instance.\n\n### `DevtoolProbe`\n\n| Method | Description |\n|--------|-------------|\n| `observeRenderer(renderer)` | Observe a WebGL/WebGPU renderer |\n| `observeScene(scene)` | Start observing a scene |\n| `unobserveScene(scene)` | Stop observing a scene |\n| `getObservedScenes()` | Get all observed scenes |\n| `selectObject(obj)` | Select an object (or null to deselect) |\n| `getSelectedObject()` | Get the currently selected object |\n| `onSelectionChanged(callback)` | Subscribe to selection changes |\n| `getLatestFrameStats()` | Get the latest frame statistics |\n| `getFrameStatsHistory(count?)` | Get frame stats history |\n| `onFrameStats(callback)` | Subscribe to frame stats updates |\n| `takeSnapshot()` | Take a manual scene snapshot |\n| `setThreeReference(THREE)` | Provide THREE for selection helpers |\n| `dispose()` | Clean up and disconnect |\n\n### `FrameStats`\n\n```typescript\ninterface FrameStats {\n  frame: number;\n  timestamp: number;\n  cpuTimeMs: number;\n  triangles: number;\n  drawCalls: number;\n  objectsVisible: number;\n  objectsTotal: number;\n  violations?: RuleViolation[];\n}\n```\n\n## Configuration\n\n```typescript\ninterface ProbeConfig {\n  appName: string;\n  env?: 'development' | 'staging' | 'production';\n  debug?: boolean;\n  rules?: {\n    maxDrawCalls?: number;\n    maxTriangles?: number;\n    maxFrameTimeMs?: number;\n    maxTextures?: number;\n  };\n}\n```\n\n## License\n\nMIT\n\n","readmeFilename":"README.md"}