vectorjson 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -3,9 +3,9 @@
3
3
  "sources": ["../src/js/engine-wasm.generated.ts", "../src/js/index.ts"],
4
4
  "sourcesContent": [
5
5
  "// AUTO-GENERATED by scripts/embed-wasm.mjs — do not edit\nexport const wasmBase64 = \"AGFzbQEAAAABaRBgAX8Bf2ACf38Bf2AEf39/fwF/YAJ/fwBgBn9/f39/fwF/YAN/f38AYAN/f38Bf2AFf39/f38AYAABf2ABfwBgA39+fgBgAn9+AX9gA39+fwF/YAJ/fwF8YAV/f39/fwF/YAN/f34BfwM9PAAFBQMFCAgJBgkDAAAAAAMAAAAAAQUFBAIHAwMKAQMDCwwJAQ0BAAEBAQIGCAYGAQIIBgUOBAQEAAQKDwQFAXABBQUFAwEAEgYJAX8BQYCAwAALB8QEIAZtZW1vcnkCAAVhbGxvYwAAB2RlYWxsb2MAAw5nZXRfZXJyb3JfY29kZQAFDXN0cmVhbV9jcmVhdGUABg5zdHJlYW1fZGVzdHJveQAHC3N0cmVhbV9mZWVkAAgRc3RyZWFtX2dldF9zdGF0dXMACxVzdHJlYW1fZ2V0X2J1ZmZlcl9wdHIADBRzdHJlYW1fZ2V0X3ZhbHVlX2xlbgANGHN0cmVhbV9nZXRfcmVtYWluaW5nX3B0cgAOGHN0cmVhbV9nZXRfcmVtYWluaW5nX2xlbgAQFXN0cmVhbV9nZXRfYnVmZmVyX2xlbgARFXN0cmVhbV9nZXRfYnVmZmVyX2NhcAASFXN0cmVhbV9yZXNldF9mb3JfbmV4dAATCWRvY19wYXJzZQAUCGRvY19mcmVlACILZG9jX2dldF90YWcAIw5kb2NfZ2V0X251bWJlcgAkE2RvY19yZWFkX3N0cmluZ19yYXcAJRFkb2NfZ2V0X2lucHV0X3B0cgAmDWRvY19nZXRfY291bnQAJw9kb2NfZ2V0X3NyY19wb3MAKBNkb2NfZ2V0X2Nsb3NlX2luZGV4ACkOZG9jX2ZpbmRfZmllbGQAKg1kb2NfYmF0Y2hfcHRyACwSZG9jX2FycmF5X2VsZW1lbnRzAC0PZG9jX29iamVjdF9rZXlzAC4OY2xhc3NpZnlfaW5wdXQALw1nZXRfdmFsdWVfZW5kADESYXV0b2NvbXBsZXRlX2lucHV0ADIOZG9jX2RlZXBfZXF1YWwANAkKAQBBAQsEGDkXGQwCngUK69UEPDcBAn8jAEEQayIBJAAgAUEEakGI3sAAIAAQASABLwEMIQAgASgCBCECIAFBEGokAEEAIAIgABsLfgEBfyMAQTBrIgMkACADIAEpAgA3AwggA0EQaiADQQhqIAIQAiAA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AwRAIAAoAgAgAUGq1arVeiACGyADQQJBACAAKAIEKAIMEQcACwsYACABQQAgBCAEIAIgAyAEIAQQOUEBcRsL7wEBAn8jAEEQayIDJAAgAyACQR9xOgAPQQAhAAJAQX8gAUEEaiIEIAEgBEsbIgFBASACdCICIAEgAksbIgFBAWtnIgJFDQACQEEgIAJrIgJB//8DcUEDayIEQQ1JBEBCASACrYanIQIgBEECdCIEQZzAxgBqIgUoAgAiAUUNASAFIAEgAmpBBGsoAgA2AgAgASEADAILIAFBg4AEakEQdhA4IQAMAQsgBEHQwMYAaiIEKAIAIgFB//8DcUUEQEEBEDgiAUUNASAEIAEgAmo2AgAgASEADAELIAQgASACajYCACABIQALIANBEGokACAAC7ABACMAQRBrIgAkACAAIANBH3E6AA8CQEEgIAJBBGoiAkEBIAN0IgMgAiADSxsiAkEBa2drIgNB//8DcUEDayIEQQ1JBEAgAUIBIAOshqdqQQRrIARBAnRBnMDGAGoiAigCADYCAAwBCyABQgFBICACQYOABGpBEHZBAWtnayICrYanQRB0akEEayACQf//A3FBAnRBhMHGAGoiAigCADYCAAsgAiABNgIAIABBEGokAAs+AQJ/IAAgACgCBCICQQFqNgIEIAIgACgCACIDIAAoAghBA3RqaiABLQAIOgAAIAMgAkEDdGogASkCADcCAAuoEQIJfwR+IwBB8A5rIgMkACAAKAIIQQFqIQogACkDACELAkACQAJAA0AgC0KPzgBYBEADQCALQuMAWARAAkADQCALQgpURQRAIApBAWohCiALQgqAIQsMAQsLIANBCGpBAEHUA/wLACAAKAIQIgctAABBMEYNACAAKAIUIQUDQCAHIQkgCCEEIAUiBkUNAUEAIQJCACELQYDXwAAhBSAGIQgDQCACQRBGIAhBCElyIAIgBGpB+gVOckUEQCALQoDC1y9+IAIgCWopAABCsODAgYOGjJgwfSIMQgp+IAxCCIh8IgxCEIhC/4GAgPAfg0KBgICAgOIJfiAMQv+BgIDwH4NC5ICAgIDI0Ad+fEIgiHwhCyAFQUBrIQUgCEEIayEIIAJBCGohAgwBCwsDQCACIAlqIQcgAiAGRiACQRJLciACIARqIghBgAZKckUEQCALQgp+IActAABBMGutQv8Bg3whCyAFQQhqIQUgAkEBaiECDAELCyADQQhqIAUpAwAgCxAcIAYgAmshBSAIQYEGRw0ACyACIAlqIAYgAmsQHSEHIAAoAhwiBEUEQCAHQQFxDQcMBgsgB0EBcQ0GIAAoAhggBBAdQQFxRQ0FDAYLBSAKQQJqIQogC0LkAIAhCwwBCwsFIApBBGohCiALQpDOAIAhCwwBCwsgACgCHCIFRQ0CIAAoAhghAgJAAkAgBA0AIAIgBWohBwNAIAVFBEBBACEFDAMLIAItAABBMEcNASAFQQFrIQUgAkEBaiECDAALAAsgAiEHCwNAIAchCCAEIQAgBSIGRQRADAQLQQAhAkIAIQtBgNfAACEFIAYhBANAIAJBEEYgBEEISXIgACACakH6BU5yRQRAIAtCgMLXL34gAiAIaikAAEKw4MCBg4aMmDB9IgxCCn4gDEIIiHwiDEIQiEL/gYCA8B+DQoGAgICA4gl+IAxC/4GAgPAfg0LkgICAgMjQB358QiCIfCELIAVBQGshBSAEQQhrIQQgAkEIaiECDAELCwNAIAIgCGohByACIAZGIAJBEktyIAAgAmoiBEGABkpyRQRAIAtCCn4gBy0AAEEwa61C/wGDfCELIAVBCGohBSACQQFqIQIMAQsLIANBCGogBSkDACALEBwgBiACayEFIARBgQZHDQALIAIgCGogBiACaxAdQQFxDQELQYEGIQQMAQsgA0EIakIKQgEQHEGCBiEECwJAAkACQAJ+AkACQCAKIARrIgBBAE4EQCADQQhqIgYgABAeIAYgABAfQQAhBUIAIQsgAygC3AMhCCADKQMIIQ5BACECAkACQCADKALYAyIJDgIHAQALIANBEGohBiADIA43A+ADIANB6ANqIAZByAP8CgAAIAMgCDYCtAcgAyAJNgKwByADIA43A8AHIANB4ANqIAlBAWtB/wFxIgBBA3RqKQMAIQsgA0HIB2ogBkHIA/wKAAAgAyAINgKUCyADIAk2ApALIANBwAdqIAlB/gFqQf8BcUEDdGopAwAhDSALeSIMQgBSDQIMBQsgDiAOeYYhCwwFCyABKQMAIQ4gASgCCCIGQfb/fUgNAUIAIA5CC4hC/////////weDIAZB849+ShshCyAGQfSPfiAGQfSPfkgbQYuAAmqtQjSGDAILIAsgDIYgDUIAIAx9iIQhCyANIAyGIQ0MAgtCACAOQYGAfiAGa62IIAZBwv99SRshC0IACyENIANB6ANqQQBByAP8CwAgA0EBNgKwByADIAtCAYYiDCAMQoCAgICAgIAQhCALQoCAgICAgID4/wCDIA2EIgxQIgAbQgGENwPgAyADQeADaiAEIAprEB4CQEHNdyAMQjSIp0G0CGsgABsgBGoiACAKayIEQQBKBEAgA0HgA2ogBBAfDAELIARBAE4NACADQQhqIAogAGsQHwsgA0HAB2ogA0EIakHYA/wKAAAgA0GYC2ogA0HgA2pB2AP8CgAAQQAhBQJAIAMoApALIgQgAygC6A4iAEsNACAAIARNBEAgBEEDdCECIANBuAdqIQcgA0GQC2ohBANAIAJBCGsiAEF4RgRAQQIhBQwDCyACIAdqKQMAIg0gAiAEaikDACIMVg0CIAAhAiAMIA1YDQALC0EBIQULIAMgBToAvwcCQCABAn4CfgJAAkACQAJAIAZB9v99SARAQgAgDkGBgH4gBmutiCAGQcL/fUkbIQwgAy0AvwciAEEedEEedUEASA0CQgEhDSAAQQNxQQFrDQcMAQsgASAGQYuAAmoiAjYCCCAOQguIIQwgAy0AvwciAEEedEEedUEASA0DQgEgAEEDcUEBaw0EGgwCC0IAIQ0MBQsgDEIBgyENDAQLQgAMAQsgDEIBgwsgDHwiDEL/////////D1gEQCAMQv////////8HgwwBCyABIAZBjIACaiICNgIIQgALNwMAIAJB/g9NDQMgAUIANwMAIAFB/w82AggMAwsgASAMIA18Igw3AwAgASAMQv////////8HVjYCCAwCC0ECIQIgCUECIAlBAksbIQcgAEEDdCADakGIC2ohBCADQaALaiEAAkADQCACIAdGDQEgAyAONwOYCyAAIAZByAP8CgAAIAMgCDYC7A4gAyAJNgLoDiACQQFqIQIgBCkDACEMIARBCGshBCAMUA0ACyACQQFrIQcLIAcgCUkgDUIAUnIhAgsgASAJQQZ0IAkEfyADQZgLaiIAIANBCGpB0AP8CgAAIAMgCDYC7A4gAyAJNgLoDiAJQQFrQf8BcUEDdCAAaikDAHmnQT9xBUEAC2siAEH+B2oiBDYCCCABAn4gC0L/D4MiDEKACFYgDEKACFEgAnFyIAtC/x+DQoAYUXKtIAtCC4h8IgxC/////////w9YBEAgDEL/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qqoAQaDowAALCP////+qqqqqAEGx6MAACwEEAEHQ6MAACxCqqqqqAAAAAAAAAAD/////AEHA6cAACwSqqqqqAEHY6cAACwSqqqqqAEHw6cAACwj/////qqqqqgBBgerAAAsBBABBoOrAAAsQqqqqqgAAAAAAAAAA/////wBBkOvAAAsEqqqqqgBBqOvAAAsEqqqqqgBBwOvAAAsI/////6qqqqoAQdHrwAALAQQAQfDrwAALEKqqqqoAAAAAAAAAAP////8AQeDswAALBKqqqqoAQfjswAALBKqqqqoAQZDtwAALCP////+qqqqqAEGh7cAACwEEAEHA7cAACxCqqqqqAAAAAAAAAAD/////AEGw7sAACwSqqqqqAEHI7sAACwSqqqqqAEHg7sAACwj/////qqqqqgBB8e7AAAsBBABBkO/AAAsQqqqqqgAAAAAAAAAA/////wBBgPDAAAsEqqqqqgBBmPDAAAsEqqqqqgBBsPDAAAsI/////6qqqqoAQcHwwAALAQQAQeDwwAALEKqqqqoAAAAAAAAAAP////8AQdDxwAALBKqqqqoAQejxwAALBKqqqqoAQYDywAALCP////+qqqqqAEGR8sAACwEEAEGw8sAACxCqqqqqAAAAAAAAAAD/////AEGg88AACwSqqqqqAEG488AACwSqqqqqAEHQ88AACwj/////qqqqqgBB4fPAAAsBBABBgPTAAAsQqqqqqgAAAAAAAAAA/////wBB8PTAAAsEqqqqqgBBiPXAAAsEqqqqqgBBoPXAAAsI/////6qqqqoAQbH1wAALAQQAQdD1wAALEKqqqqoAAAAAAAAAAP////8AQcD2wAALBKqqqqoAQdj2wAALBKqqqqoAQfD2wAALCP////+qqqqqAEGB98AACwEEAEGg98AACxCqqqqqAAAAAAAAAAD/////AEGQ+MAACwSqqqqqAEGo+MAACwSqqqqqAEHA+MAACwj/////qqqqqgBB0fjAAAsBBABB8PjAAAsQqqqqqgAAAAAAAAAA/////wBB4PnAAAsEqqqqqgBB+PnAAAsEqqqqqgBBkPrAAAsI/////6qqqqoAQaH6wAALAQQAQcD6wAALEKqqqqoAAAAAAAAAAP////8AQbD7wAALBKqqqqoAQcj7wAALBKqqqqoAQeD7wAALCP////+qqqqqAEHx+8AACwEEAEGQ/MAACxCqqqqqAAAAAAAAAAD/////AEGA/cAACwSqqqqqAEGY/cAACwSqqqqqAEGw/cAACwj/////qqqqqgBBwf3AAAsBBABB4P3AAAsQqqqqqgAAAAAAAAAA/////wBB0P7AAAsEqqqqqgBB6P7AAAsEqqqqqgBBgP/AAAsI/////6qqqqoAQZH/wAALAQQAQbD/wAALEKqqqqoAAAAAAAAAAP////8AQaCAwQALBKqqqqoAQbiAwQALBKqqqqoAQdCAwQALCP////+qqqqqAEHhgMEACwEEAEGAgcEACxCqqqqqAAAAAAAAAAD/////AEHwgcEACwSqqqqqAEGIgsEACwSqqqqqAEGggsEACwj/////qqqqqgBBsYLBAAsBBABB0ILBAAsQqqqqqgAAAAAAAAAA/////wBBwIPBAAsEqqqqqgBB2IPBAAsEqqqqqgBB8IPBAAsI/////6qqqqoAQYGEwQALAQQAQaCEwQALEKqqqqoAAAAAAAAAAP////8AQZCFwQALBKqqqqoAQaiFwQALBKqqqqoAQcCFwQALCP////+qqqqqAEHRhcEACwEEAEHwhcEACxCqqqqqAAAAAAAAAAD/////AEHghsEACwSqqqqqAEH4hsEACwSqqqqqAEGQh8EACwj/////qqqqqgBBoYfBAAsBBABBwIfBAAsQqqqqqgAAAAAAAAAA/////wBBsIjBAAsEqqqqqgBByIjBAAsEqqqqqgBB4IjBAAsI/////6qqqqoAQfGIwQALAQQAQZCJwQALEKqqqqoAAAAAAAAAAP////8AQYCKwQALBKqqqqoAQZiKwQALBKqqqqoAQbCKwQALCP////+qqqqqAEHBisEACwEEAEHgisEACxCqqqqqAAAAAAAAAAD/////AEHQi8EACwSqqqqqAEHoi8EACwSqqqqqAEGAjMEACwj/////qqqqqgBBkYzBAAsBBABBsIzBAAsQqqqqqgAAAAAAAAAA/////wBBoI3BAAsEqqqqqgBBuI3BAAsEqqqqqgBB0I3BAAsI/////6qqqqoAQeGNwQALAQQAQYCOwQALEKqqqqoAAAAAAAAAAP////8AQfCOwQALBKqqqqoAQYiPwQALBKqqqqoAQaCPwQALCP////+qqqqqAEGxj8EACwEEAEHQj8EACxCqqqqqAAAAAAAAAAD/////AEHAkMEACwSqqqqqAEHYkMEACwSqqqqqAEHwkMEACwj/////qqqqqgBBgZHBAAsBBABBoJHBAAsQqqqqqgAAAAAAAAAA/////wBBkJLBAAsEqqqqqgBBqJLBAAsEqqqqqgBBwJLBAAsI/////6qqqqoAQdGSwQALAQQAQfCSwQALEKqqqqoAAAAAAAAAAP////8AQeCTwQALBKqqqqoAQfiTwQALBKqqqqoAQZCUwQALCP////+qqqqqAEGhlMEACwEEAEHAlMEACxCqqqqqAAAAAAAAAAD/////AEGwlcEACwSqqqqqAEHIlcEACwSqqqqqAEHglcEACwj/////qqqqqgBB8ZXBAAsBBABBkJbBAAsQqqqqqgAAAAAAAAAA/////wBBgJfBAAsEqqqqqgBBmJfBAAsEqqqqqgBBsJfBAAsI/////6qqqqoAQcGXwQALAQQAQeCXwQALEKqqqqoAAAAAAAAAAP////8AQdCYwQALBKqqqqoAQeiYwQALBKqqqqoAQYCZwQALCP////+qqqqqAEGRmcEACwEEAEGwmcEACxCqqqqqAAAAAAAAAAD/////AEGgmsEACwSqqqqqAEG4msEACwSqqqqqAEHQmsEACwj/////qqqqqgBB4ZrBAAsBBABBgJvBAAsQqqqqqgAAAAAAAAAA/////wBB8JvBAAsEqqqqqgBBiJzBAAsEqqqqqgBBoJzBAAsI/////6qqqqoAQbGcwQALAQQAQdCcwQALEKqqqqoAAAAAAAAAAP////8AQcCdwQALBKqqqqoAQdidwQALBKqqqqoAQfCdwQALCP////+qqqqqAEGBnsEACwEEAEGgnsEACxCqqqqqAAAAAAAAAAD/////AEGQn8EACwSqqqqqAEGon8EACwSqqqqqAEHAn8EACwj/////qqqqqgBB0Z/BAAsBBABB8J/BAAsQqqqqqgAAAAAAAAAA/////wBB4KDBAAsEqqqqqgBB+KDBAAsEqqqqqgBBkKHBAAsI/////6qqqqoAQaGhwQALAQQAQcChwQALEKqqqqoAAAAAAAAAAP////8AQbCiwQALBKqqqqoAQciiwQALBKqqqqoAQeCiwQALCP////+qqqqqAEHxosEACwEEAEGQo8EACxCqqqqqAAAAAAAAAAD/////AEGApMEACwSqqqqqAEGYpMEACwSqqqqqAEGwpMEACwj/////qqqqqgBBwaTBAAsBBABB4KTBAAsQqqqqqgAAAAAAAAAA/////wBB0KXBAAsEqqqqqgBB6KXBAAsEqqqqqgBBgKbBAAsI/////6qqqqoAQZGmwQALAQQAQbCmwQALEKqqqqoAAAAAAAAAAP////8AQaCnwQALBKqqqqoAQbinwQALBKqqqqoAQdCnwQALCP////+qqqqqAEHhp8EACwEEAEGAqMEACxCqqqqqAAAAAAAAAAD/////AEHwqMEACwSqqqqqAEGIqcEACwSqqqqqAEGgqcEACwj/////qqqqqgBBsanBAAsBBABB0KnBAAsQqqqqqgAAAAAAAAAA/////wBBwKrBAAsEqqqqqgBB2KrBAAsEqqqqqgBB8KrBAAsI/////6qqqqoAQYGrwQALAQQAQaCrwQALEKqqqqoAAAAAAAAAAP////8AQZCswQALBKqqqqoAQaiswQALBKqqqqoAQcCswQALCP////+qqqqqAEHRrMEACwEEAEHwrMEACxCqqqqqAAAAAAAAAAD/////AEHgrcEACwSqqqqqAEH4rcEACwSqqqqqAEGQrsEACwj/////qqqqqgBBoa7BAAsBBABBwK7BAAsQqqqqqgAAAAAAAAAA/////wBBsK/BAAsEqqqqqgBByK/BAAsEqqqqqgBB4K/BAAsI/////6qqqqoAQfGvwQALAQQAQZCwwQALEKqqqqoAAAAAAAAAAP////8AQYCxwQALBKqqqqoAQZixwQALBKqqqqoAQbCxwQALCP////+qqqqqAEHBscEACwEEAEHgscEACxCqqqqqAAAAAAAAAAD/////AEHQssEACwSqqqqqAEHossEACwSqqqqqAEGAs8EACwj/////qqqqqgBBkbPBAAsBBABBsLPBAAsQqqqqqgAAAAAAAAAA/////wBBoLTBAAsEqqqqqgBBuLTBAAsEqqqqqgBB0LTBAAsI/////6qqqqoAQeG0wQALAQQAQYC1wQALEKqqqqoAAAAAAAAAAP////8AQfC1wQALBKqqqqoAQYi2wQALBKqqqqoAQaC2wQALCP////+qqqqqAEGxtsEACwEEAEHQtsEACxCqqqqqAAAAAAAAAAD/////AEHAt8EACwSqqqqqAEHYt8EACwSqqqqqAEHwt8EACwj/////qqqqqgBBgbjBAAsBBABBoLjBAAsQqqqqqgAAAAAAAAAA/////wBBkLnBAAsEqqqqqgBBqLnBAAsEqqqqqgBBwLnBAAsI/////6qqqqoAQdG5wQALAQQAQfC5wQALEKqqqqoAAAAAAAAAAP////8AQeC6wQALBKqqqqoAQfi6wQALBKqqqqoAQZC7wQALCP////+qqqqqAEGhu8EACwEEAEHAu8EACxCqqqqqAAAAAAAAAAD/////AEGwvMEACwSqqqqqAEHIvMEACwSqqqqqAEHgvMEACwj/////qqqqqgBB8bzBAAsBBABBkL3BAAsQqqqqqgAAAAAAAAAA/////wBBgL7BAAsEqqqqqgBBmL7BAAsEqqqqqgBBsL7BAAsI/////6qqqqoAQcG+wQALAQQAQeC+wQALEKqqqqoAAAAAAAAAAP////8AQdC/wQALBKqqqqoAQei/wQALBKqqqqoAQYDAwQALCP////+qqqqqAEGRwMEACwEEAEGwwMEACxCqqqqqAAAAAAAAAAD/////AEGgwcEACwSqqqqqAEG4wcEACwSqqqqqAEHQwcEACwj/////qqqqqgBB4cHBAAsBBABBgMLBAAsQqqqqqgAAAAAAAAAA/////wBB8MLBAAsEqqqqqgBBiMPBAAsEqqqqqgBBoMPBAAsI/////6qqqqoAQbHDwQALAQQAQdDDwQALEKqqqqoAAAAAAAAAAP////8AQcDEwQALBKqqqqoAQdjEwQALBKqqqqoAQfDEwQALCP////+qqqqqAEGBxcEACwEEAEGgxcEACxCqqqqqAAAAAAAAAAD/////AEGQxsEACwSqqqqqAEGoxsEACwSqqqqqAEHAxsEACwj/////qqqqqgBB0cbBAAsBBABB8MbBAAsQqqqqqgAAAAAAAAAA/////wBB4MfBAAsEqqqqqgBB+MfBAAsEqqqqqgBBkMjBAAsI/////6qqqqoAQaHIwQALAQQAQcDIwQALEKqqqqoAAAAAAAAAAP////8AQbDJwQALBKqqqqoAQcjJwQALBKqqqqoAQeDJwQALCP////+qqqqqAEHxycEACwEEAEGQysEACxCqqqqqAAAAAAAAAAD/////AEGAy8EACwSqqqqqAEGYy8EACwSqqqqqAEGwy8EACwj/////qqqqqgBBwcvBAAsBBABB4MvBAAsQqqqqqgAAAAAAAAAA/////wBB0MzBAAsEqqqqqgBB6MzBAAsEqqqqqgBBgM3BAAsI/////6qqqqoAQZHNwQALAQQAQbDNwQALEKqqqqoAAAAAAAAAAP////8AQaDOwQALBKqqqqoAQbjOwQALBKqqqqoAQdDOwQALCP////+qqqqqAEHhzsEACwEEAEGAz8EACxCqqqqqAAAAAAAAAAD/////AEHwz8EACwSqqqqqAEGI0MEACwSqqqqqAEGg0MEACwj/////qqqqqgBBsdDBAAsBBABB0NDBAAsQqqqqqgAAAAAAAAAA/////wBBwNHBAAsEqqqqqgBB2NHBAAsEqqqqqgBB8NHBAAsI/////6qqqqoAQYHSwQALAQQAQaDSwQALEKqqqqoAAAAAAAAAAP////8AQZDTwQALBKqqqqoAQajTwQALBKqqqqoAQcDTwQALCP////+qqqqqAEHR08EACwEEAEHw08EACxCqqqqqAAAAAAAAAAD/////AEHg1MEACwSqqqqqAEH41MEACwSqqqqqAEGQ1cEACwj/////qqqqqgBBodXBAAsBBABBwNXBAAsQqqqqqgAAAAAAAAAA/////wBBsNbBAAsEqqqqqgBByNbBAAsEqqqqqgBB4NbBAAsI/////6qqqqoAQfHWwQALAQQAQZDXwQALEKqqqqoAAAAAAAAAAP////8AQYDYwQALBKqqqqoAQZjYwQALBKqqqqoAQbDYwQALCP////+qqqqqAEHB2MEACwEEAEHg2MEACxCqqqqqAAAAAAAAAAD/////AEHQ2cEACwSqqqqqAEHo2cEACwSqqqqqAEGA2sEACwj/////qqqqqgBBkdrBAAsBBABBsNrBAAsQqqqqqgAAAAAAAAAA/////wBBoNvBAAsEqqqqqgBBuNvBAAsEqqqqqgBB0NvBAAsI/////6qqqqoAQeHbwQALAQQAQYDcwQALEKqqqqoAAAAAAAAAAP////8AQfDcwQALBKqqqqoAQYjdwQALBKqqqqoAQaDdwQALCP////+qqqqqAEGx3cEACwEEAEHQ3cEACxCqqqqqAAAAAAAAAAD/////AEHA3sEACwSqqqqqAEHY3sEACwSqqqqqAEHw3sEACwj/////qqqqqgBBgd/BAAsBBABBoN/BAAsQqqqqqgAAAAAAAAAA/////wBBkODBAAsEqqqqqgBBqODBAAsEqqqqqgBBwODBAAsI/////6qqqqoAQdHgwQALAQQAQfDgwQALEKqqqqoAAAAAAAAAAP////8AQeDhwQALBKqqqqoAQfjhwQALBKqqqqoAQZDiwQALCP////+qqqqqAEGh4sEACwEEAEHA4sEACxCqqqqqAAAAAAAAAAD/////AEGw48EACwSqqqqqAEHI48EACwSqqqqqAEHg48EACwj/////qqqqqgBB8ePBAAsBBABBkOTBAAsQqqqqqgAAAAAAAAAA/////wBBgOXBAAsEqqqqqgBBmOXBAAsEqqqqqgBBsOXBAAsI/////6qqqqoAQcHlwQALAQQAQeDlwQALEKqqqqoAAAAAAAAAAP////8AQdDmwQALBKqqqqoAQejmwQALBKqqqqoAQYDnwQALCP////+qqqqqAEGR58EACwEEAEGw58EACxCqqqqqAAAAAAAAAAD/////AEGg6MEACwSqqqqqAEG46MEACwSqqqqqAEHQ6MEACwj/////qqqqqgBB4ejBAAsBBABBgOnBAAsQqqqqqgAAAAAAAAAA/////wBB8OnBAAsEqqqqqgBBiOrBAAsEqqqqqgBBoOrBAAsI/////6qqqqoAQbHqwQALAQQAQdDqwQALEKqqqqoAAAAAAAAAAP////8AQcDrwQALBKqqqqoAQdjrwQALBKqqqqoAQfDrwQALCP////+qqqqqAEGB7MEACwEEAEGg7MEACxCqqqqqAAAAAAAAAAD/////AEGQ7cEACwSqqqqqAEGo7cEACwSqqqqqAEHA7cEACwj/////qqqqqgBB0e3BAAsBBABB8O3BAAsQqqqqqgAAAAAAAAAA/////wBB4O7BAAsEqqqqqgBB+O7BAAsEqqqqqgBBkO/BAAsI/////6qqqqoAQaHvwQALAQQAQcDvwQALEKqqqqoAAAAAAAAAAP////8AQbDwwQALBKqqqqoAQcjwwQALBKqqqqoAQeDwwQALCP////+qqqqqAEHx8MEACwEEAEGQ8cEACxCqqqqqAAAAAAAAAAD/////AEGA8sEACwSqqqqqAEGY8sEACwSqqqqqAEGw8sEACwj/////qqqqqgBBwfLBAAsBBABB4PLBAAsQqqqqqgAAAAAAAAAA/////wBB0PPBAAsEqqqqqgBB6PPBAAsEqqqqqgBBgPTBAAsI/////6qqqqoAQZH0wQALAQQAQbD0wQALEKqqqqoAAAAAAAAAAP////8AQaD1wQALBKqqqqoAQbj1wQALBKqqqqoAQdD1wQALCP////+qqqqqAEHh9cEACwEEAEGA9sEACxCqqqqqAAAAAAAAAAD/////AEHw9sEACwSqqqqqAEGI98EACwSqqqqqAEGg98EACwj/////qqqqqgBBsffBAAsBBABB0PfBAAsQqqqqqgAAAAAAAAAA/////wBBwPjBAAsEqqqqqgBB2PjBAAsEqqqqqgBB8PjBAAsI/////6qqqqoAQYH5wQALAQQAQaD5wQALEKqqqqoAAAAAAAAAAP////8AQZD6wQALBKqqqqoAQaj6wQALBKqqqqoAQcD6wQALCP////+qqqqqAEHR+sEACwEEAEHw+sEACxCqqqqqAAAAAAAAAAD/////AEHg+8EACwSqqqqqAEH4+8EACwSqqqqqAEGQ/MEACwj/////qqqqqgBBofzBAAsBBABBwPzBAAsQqqqqqgAAAAAAAAAA/////wBBsP3BAAsEqqqqqgBByP3BAAsEqqqqqgBB4P3BAAsI/////6qqqqoAQfH9wQALAQQAQZD+wQALEKqqqqoAAAAAAAAAAP////8AQYD/wQALBKqqqqoAQZj/wQALBKqqqqoAQbD/wQALCP////+qqqqqAEHB/8EACwEEAEHg/8EACxCqqqqqAAAAAAAAAAD/////AEHQgMIACwSqqqqqAEHogMIACwSqqqqqAEGAgcIACwj/////qqqqqgBBkYHCAAsBBABBsIHCAAsQqqqqqgAAAAAAAAAA/////wBBoILCAAsEqqqqqgBBuILCAAsEqqqqqgBB0ILCAAsI/////6qqqqoAQeGCwgALAQQAQYCDwgALEKqqqqoAAAAAAAAAAP////8AQfCDwgALBKqqqqoAQYiEwgALBKqqqqoAQaCEwgALCP////+qqqqqAEGxhMIACwEEAEHQhMIACxCqqqqqAAAAAAAAAAD/////AEHAhcIACwSqqqqqAEHYhcIACwSqqqqqAEHwhcIACwj/////qqqqqgBBgYbCAAsBBABBoIbCAAsQqqqqqgAAAAAAAAAA/////wBBkIfCAAsEqqqqqgBBqIfCAAsEqqqqqgBBwIfCAAsI/////6qqqqoAQdGHwgALAQQAQfCHwgALEKqqqqoAAAAAAAAAAP////8AQeCIwgALBKqqqqoAQfiIwgALBKqqqqoAQZCJwgALCP////+qqqqqAEGhicIACwEEAEHAicIACxCqqqqqAAAAAAAAAAD/////AEGwisIACwSqqqqqAEHIisIACwSqqqqqAEHgisIACwj/////qqqqqgBB8YrCAAsBBABBkIvCAAsQqqqqqgAAAAAAAAAA/////wBBgIzCAAsEqqqqqgBBmIzCAAsEqqqqqgBBsIzCAAsI/////6qqqqoAQcGMwgALAQQAQeCMwgALEKqqqqoAAAAAAAAAAP////8AQdCNwgALBKqqqqoAQeiNwgALBKqqqqoAQYCOwgALCP////+qqqqqAEGRjsIACwEEAEGwjsIACxCqqqqqAAAAAAAAAAD/////AEGgj8IACwSqqqqqAEG4j8IACwSqqqqqAEHQj8IACwj/////qqqqqgBB4Y/CAAsBBABBgJDCAAsQqqqqqgAAAAAAAAAA/////wBB8JDCAAsEqqqqqgBBiJHCAAsEqqqqqgBBoJHCAAsI/////6qqqqoAQbGRwgALAQQAQdCRwgALEKqqqqoAAAAAAAAAAP////8AQcCSwgALBKqqqqoAQdiSwgALBKqqqqoAQfCSwgALCP////+qqqqqAEGBk8IACwEEAEGgk8IACxCqqqqqAAAAAAAAAAD/////AEGQlMIACwSqqqqqAEGolMIACwSqqqqqAEHAlMIACwj/////qqqqqgBB0ZTCAAsBBABB8JTCAAsQqqqqqgAAAAAAAAAA/////wBB4JXCAAsEqqqqqgBB+JXCAAsEqqqqqgBBkJbCAAsI/////6qqqqoAQaGWwgALAQQAQcCWwgALEKqqqqoAAAAAAAAAAP////8AQbCXwgALBKqqqqoAQciXwgALBKqqqqoAQeCXwgALCP////+qqqqqAEHxl8IACwEEAEGQmMIACxCqqqqqAAAAAAAAAAD/////AEGAmcIACwSqqqqqAEGYmcIACwSqqqqqAEGwmcIACwj/////qqqqqgBBwZnCAAsBBABB4JnCAAsQqqqqqgAAAAAAAAAA/////wBB0JrCAAsEqqqqqgBB6JrCAAsEqqqqqgBBgJvCAAsI/////6qqqqoAQZGbwgALAQQAQbCbwgALEKqqqqoAAAAAAAAAAP////8AQaCcwgALBKqqqqoAQbicwgALBKqqqqoAQdCcwgALCP////+qqqqqAEHhnMIACwEEAEGAncIACxCqqqqqAAAAAAAAAAD/////AEHwncIACwSqqqqqAEGInsIACwSqqqqqAEGgnsIACwj/////qqqqqgBBsZ7CAAsBBABB0J7CAAsQqqqqqgAAAAAAAAAA/////wBBwJ/CAAsEqqqqqgBB2J/CAAsEqqqqqgBB8J/CAAsI/////6qqqqoAQYGgwgALAQQAQaCgwgALEKqqqqoAAAAAAAAAAP////8AQZChwgALBKqqqqoAQaihwgALBKqqqqoAQcChwgALCP////+qqqqqAEHRocIACwEEAEHwocIACxCqqqqqAAAAAAAAAAD/////AEHgosIACwSqqqqqAEH4osIACwSqqqqqAEGQo8IACwj/////qqqqqgBBoaPCAAsBBABBwKPCAAsQqqqqqgAAAAAAAAAA/////wBBsKTCAAsEqqqqqgBByKTCAAsEqqqqqgBB4KTCAAsI/////6qqqqoAQfGkwgALAQQAQZClwgALEKqqqqoAAAAAAAAAAP////8AQYCmwgALBKqqqqoAQZimwgALBKqqqqoAQbCmwgALCP////+qqqqqAEHBpsIACwEEAEHgpsIACxCqqqqqAAAAAAAAAAD/////AEHQp8IACwSqqqqqAEHop8IACwSqqqqqAEGAqMIACwj/////qqqqqgBBkajCAAsBBABBsKjCAAsQqqqqqgAAAAAAAAAA/////wBBoKnCAAsEqqqqqgBBuKnCAAsEqqqqqgBB0KnCAAsI/////6qqqqoAQeGpwgALAQQAQYCqwgALEKqqqqoAAAAAAAAAAP////8AQfCqwgALBKqqqqoAQYirwgALBKqqqqoAQaCrwgALCP////+qqqqqAEGxq8IACwEEAEHQq8IACxCqqqqqAAAAAAAAAAD/////AEHArMIACwSqqqqqAEHYrMIACwSqqqqqAEHwrMIACwj/////qqqqqgBBga3CAAsBBABBoK3CAAsQqqqqqgAAAAAAAAAA/////wBBkK7CAAsEqqqqqgBBqK7CAAsEqqqqqgBBwK7CAAsI/////6qqqqoAQdGuwgALAQQAQfCuwgALEKqqqqoAAAAAAAAAAP////8=\";\n",
6
- "/**\n * VectorJSON — SIMD-accelerated JSON parser\n *\n * Architecture:\n * JS bytes → [Zig + zimdjson SIMD] → tape → lazy Proxy over doc slots\n *\n * The Zig engine (engine.wasm) parses JSON bytes into an internal tape format\n * using SIMD-accelerated algorithms from zimdjson.\n *\n * Primary parse path: doc-slot (tape-direct navigation via Zig exports).\n * FinalizationRegistry auto-frees doc slots when the Proxy is GC'd.\n * Users CAN call .free() to release immediately if desired.\n */\n\nimport { wasmBase64 } from \"./engine-wasm.generated.js\";\n\nfunction decodeBase64(b64: string): Uint8Array {\n if (typeof Buffer !== \"undefined\")\n return new Uint8Array(Buffer.from(b64, \"base64\").buffer);\n const bin = atob(b64);\n const bytes = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);\n return bytes;\n}\n\n// --- Types ---\n\nexport type ParseStatus = \"complete\" | \"complete_early\" | \"incomplete\" | \"invalid\";\nexport type FeedStatus = \"incomplete\" | \"complete\" | \"error\" | \"end_early\";\n\n/** Result shape compatible with Vercel AI SDK's parsePartialJson */\nexport type PartialJsonState =\n | \"successful-parse\"\n | \"repaired-parse\"\n | \"failed-parse\";\n\n/** Discriminated union — narrows `value` type when you check `state`. */\nexport type PartialJsonResult<T = unknown> =\n | { value: T; state: \"successful-parse\" }\n | { value: T | undefined; state: \"repaired-parse\" }\n | { value: undefined; state: \"failed-parse\" };\n\n/** Recursively make all properties optional — matches Vercel AI SDK's DeepPartial. */\nexport type DeepPartial<T> =\n T extends object\n ? T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : { [K in keyof T]?: DeepPartial<T[K]> }\n : T;\n\nexport interface StreamingParser<T = unknown> {\n /** Feed a chunk of bytes to the parser. Only NEW bytes are scanned (O(chunk_size)). */\n feed(chunk: Uint8Array | string): FeedStatus;\n /** Get the parsed value. Returns autocompleted partial value while incomplete, final value when complete; throws on parse errors. */\n getValue(): T | undefined;\n /** Get remaining bytes after end_early status (for NDJSON). */\n getRemaining(): Uint8Array | null;\n /** Get the current status without feeding data. */\n getStatus(): FeedStatus;\n /** Copy the accumulated stream buffer into a new ArrayBuffer (for Worker postMessage transfer). */\n getRawBuffer(): ArrayBuffer | null;\n /** Destroy the parser and free all resources. */\n destroy(): void;\n /** Async iteration over partial values when a source was provided. */\n [Symbol.asyncIterator](): AsyncIterableIterator<T | undefined>;\n}\n\n/** Zod-like schema type for createParser options. */\nexport type ZodLike<T> = { safeParse: (v: unknown) => { success: boolean; data?: T } };\n\n/** Options for createParser when using an options object. */\nexport interface CreateParserOptions<T = unknown> {\n /** Only include these top-level or nested fields (dot-separated paths). */\n pick?: string[];\n /** Schema for validation on complete values. */\n schema?: ZodLike<T>;\n /** Stream source — makes the parser async-iterable via for-await. */\n source?: ReadableStream<Uint8Array> | AsyncIterable<Uint8Array | string>;\n}\n\nexport interface ParseResult {\n status: ParseStatus;\n value?: unknown;\n remaining?: Uint8Array;\n error?: string;\n /** Check if a value (object/array) from an incomplete parse is fully present in the original input. */\n isComplete(value: unknown): boolean;\n /** Full materialization via JSON.parse — fastest way to get a plain JS object tree. */\n toJSON(): unknown;\n}\n\n// --- EventParser Types ---\n\n/** Compiled path segment: string = key, number = index, '*' = wildcard */\nexport type PathSegment = string | number;\n\nexport interface PathEvent {\n type: 'value';\n path: string;\n value: unknown;\n offset: number;\n length: number;\n index?: number;\n key?: string;\n matches: (string | number)[];\n}\n\nexport interface DeltaEvent {\n type: 'delta';\n path: string;\n value: string;\n offset: number;\n length: number;\n}\n\nexport interface RootEvent {\n type: 'root';\n index: number;\n value: unknown;\n}\n\nexport interface EventParser {\n on(path: string, callback: (event: PathEvent) => void): EventParser;\n on<T>(path: string, schema: { safeParse: (v: unknown) => { success: boolean; data?: T } }, callback: (event: PathEvent & { value: T }) => void): EventParser;\n onDelta(path: string, callback: (event: DeltaEvent) => void): EventParser;\n onText(callback: (text: string) => void): EventParser;\n skip(...paths: string[]): EventParser;\n off(path: string, callback?: Function): EventParser;\n feed(chunk: string | Uint8Array): FeedStatus;\n getValue(): unknown | undefined;\n getRemaining(): Uint8Array | null;\n getStatus(): FeedStatus;\n /** Copy the accumulated stream buffer into a new ArrayBuffer (for Worker postMessage transfer). */\n getRawBuffer(): ArrayBuffer | null;\n destroy(): void;\n /** Async iteration over partial values when a source was provided. */\n [Symbol.asyncIterator](): AsyncIterableIterator<unknown | undefined>;\n}\n\nexport interface VectorJSON {\n /**\n * Parse a JSON string or Uint8Array into a value.\n * Primitives (null, boolean, number) are returned directly as JS values.\n * Objects and arrays return Proxy objects — values materialize only when accessed.\n * Call .free() on the result to release resources immediately, or let\n * FinalizationRegistry handle it automatically when the Proxy is GC'd.\n */\n parse(input: string | Uint8Array): ParseResult;\n /**\n * Create a streaming parser for incremental JSON parsing.\n * Feed chunks as they arrive; only new bytes are processed per call.\n * Total work is O(N) regardless of how many chunks — no re-parsing.\n *\n * ```ts\n * const parser = vj.createParser();\n * for await (const chunk of stream) {\n * const status = parser.feed(chunk);\n * if (status === \"complete\" || status === \"end_early\") {\n * const value = parser.getValue();\n * // use value...\n * parser.destroy();\n * break;\n * }\n * }\n * ```\n */\n createParser(): StreamingParser;\n /**\n * Create a streaming parser with schema validation.\n * `getValue()` returns `undefined` when the schema rejects the value (same as incomplete).\n * T is auto-inferred from the schema — no manual `<T>` needed.\n *\n * ```ts\n * const parser = vj.createParser(z.object({ name: z.string() }));\n * parser.feed('{\"name\":\"Alice\"}');\n * parser.getValue(); // { name: string } | undefined\n * ```\n */\n createParser<T>(schema: ZodLike<T>): StreamingParser<T>;\n /**\n * Create a streaming parser with options: field picking, schema, and/or stream source.\n *\n * ```ts\n * // Pick specific fields + async iteration:\n * const parser = vj.createParser({\n * pick: [\"name\", \"age\"],\n * source: response.body,\n * });\n * for await (const partial of parser) {\n * console.log(partial); // only picked fields\n * }\n * ```\n */\n createParser<T = unknown>(options: CreateParserOptions<T>): StreamingParser<T>;\n /**\n * Deep-compare two values for structural equality.\n * When both values are VJ proxies, comparison happens entirely in WASM\n * (walks tapes in linear memory — zero JS allocations, zero Proxy traps).\n * Falls back to JSON.stringify comparison for plain JS objects.\n *\n * By default, object key order does not matter (`{\"a\":1,\"b\":2}` equals `{\"b\":2,\"a\":1}`).\n * Pass `{ ordered: true }` for faster key-order-sensitive comparison.\n */\n deepCompare(a: unknown, b: unknown, options?: { ignoreKeyOrder?: boolean }): boolean;\n /**\n * Eagerly materialize a lazy proxy into plain JS objects.\n * If the value is already a plain JS value, returns it as-is.\n */\n materialize(value: unknown): unknown;\n /**\n * Drop-in replacement for AI SDK partial JSON parsers.\n * Parses a potentially incomplete JSON string and returns a plain JS object.\n *\n * Compatible with Vercel AI SDK's `parsePartialJson` — returns `{ value, state }`\n * where state is \"successful-parse\", \"repaired-parse\", or \"failed-parse\".\n *\n * ```ts\n * // Drop-in for Vercel AI SDK:\n * const { value, state } = vj.parsePartialJson('{\"a\": 1, \"b\": ');\n * // value = { a: 1, b: null }, state = \"repaired-parse\"\n * ```\n */\n parsePartialJson(input: string): PartialJsonResult;\n /**\n * Parse partial JSON with schema-inferred types.\n * T is auto-inferred from the schema — no manual `<T>` needed.\n *\n * Returns `DeepPartial<T>` because incomplete JSON will have missing fields.\n * When `safeParse` succeeds, returns the validated `data`.\n * When `safeParse` fails on a repaired-parse, returns the raw parsed value\n * (typed as `DeepPartial<T>`) — the object is partial, that's expected.\n *\n * ```ts\n * const User = z.object({ name: z.string(), age: z.number() });\n * const { value, state } = vj.parsePartialJson('{\"name\":\"Al', User);\n * // value: { name?: string; age?: number } | undefined\n * // state: \"repaired-parse\"\n * ```\n */\n parsePartialJson<T>(input: string, schema: { safeParse: (v: unknown) => { success: boolean; data?: T } }): PartialJsonResult<DeepPartial<T>>;\n /**\n * Create an event-driven streaming parser with path subscriptions,\n * string delta emission, multi-root support, and JSON boundary detection.\n */\n createEventParser(options?: {\n multiRoot?: boolean;\n onRoot?: (event: RootEvent) => void;\n }): EventParser;\n}\n\n// --- Error codes from Zig engine ---\nconst ERROR_MESSAGES: Record<number, string> = {\n 1: \"Exceeded maximum nesting depth\",\n 2: \"Document exceeds maximum capacity\",\n 3: \"Invalid escape sequence\",\n 4: \"Invalid Unicode code point\",\n 5: \"Invalid number literal\",\n 6: \"Expected colon after key\",\n 7: \"Expected string key in object\",\n 8: \"Expected comma or closing bracket in array\",\n 9: \"Expected comma or closing brace in object\",\n 10: \"Incomplete array\",\n 11: \"Incomplete object\",\n 12: \"Unexpected trailing content\",\n 13: \"Out of memory\",\n 99: \"Unknown parse error\",\n};\n\n// --- Module types ---\n\ninterface EngineExports {\n memory: WebAssembly.Memory;\n alloc(size: number): number;\n dealloc(ptr: number, size: number): void;\n get_error_code(): number;\n doc_parse(ptr: number, len: number): number;\n doc_free(docId: number): void;\n doc_get_tag(docId: number, index: number): number;\n doc_get_number(docId: number, index: number): number;\n doc_read_string_raw(docId: number, index: number): number;\n doc_get_count(docId: number, index: number): number;\n doc_get_src_pos(docId: number, index: number): number;\n doc_get_close_index(docId: number, index: number): number;\n doc_find_field(docId: number, objIndex: number, keyPtr: number, keyLen: number): number;\n doc_get_input_ptr(docId: number): number;\n doc_batch_ptr(): number;\n doc_array_elements(docId: number, arrIndex: number, resumeAt: number): number;\n doc_object_keys(docId: number, objIndex: number, resumeAt: number): number;\n doc_deep_equal(doc_a: number, idx_a: number, doc_b: number, idx_b: number, ordered: number): number;\n stream_create(): number;\n stream_destroy(id: number): void;\n stream_feed(id: number, ptr: number, len: number): number;\n stream_get_status(id: number): number;\n stream_get_buffer_ptr(id: number): number;\n stream_get_value_len(id: number): number;\n stream_get_remaining_ptr(id: number): number;\n stream_get_remaining_len(id: number): number;\n stream_get_buffer_len(id: number): number;\n stream_get_buffer_cap(id: number): number;\n stream_reset_for_next(id: number): number;\n classify_input(ptr: number, len: number): number;\n autocomplete_input(ptr: number, len: number, buf_cap: number): number;\n get_value_end(): number;\n}\n\nconst utf8Decoder = new TextDecoder('utf-8');\n\n// Pre-computed byte→char table — avoids String.fromCharCode() calls in hot loops\nconst B2C: string[] = Array.from({ length: 256 }, (_, i) => String.fromCharCode(i));\n\nlet _instance: VectorJSON | null = null;\n\n/**\n * Initialize VectorJSON by loading and linking the WASM module.\n * Call this once; subsequent calls return the cached instance.\n */\nexport async function init(options?: {\n engineWasm?: string | URL | BufferSource;\n}): Promise<VectorJSON> {\n if (_instance) return _instance;\n\n // Load WASM bytes — embedded base64 by default, filesystem/URL/buffer when explicit\n let engineBytes: BufferSource;\n const wasmOpt = options?.engineWasm;\n if (wasmOpt instanceof ArrayBuffer || ArrayBuffer.isView(wasmOpt)) {\n engineBytes = wasmOpt as BufferSource;\n } else if (typeof wasmOpt === \"string\" || wasmOpt instanceof URL) {\n // Dynamic import for filesystem — only when user explicitly passes a path\n const { readFile } = await import(\"node:fs/promises\");\n const { fileURLToPath } = await import(\"node:url\");\n const path = typeof wasmOpt === \"string\" ? wasmOpt : fileURLToPath(wasmOpt);\n engineBytes = await readFile(path);\n } else {\n engineBytes = decodeBase64(wasmBase64).buffer as ArrayBuffer;\n }\n\n // --- Instantiate Zig engine ---\n const { instance: engineInstance } = await WebAssembly.instantiate(engineBytes as ArrayBuffer, {});\n const engine = engineInstance.exports as unknown as EngineExports;\n\n const encoder = new TextEncoder();\n\n // --- Reusable WASM buffers — grow-only, shared allocator pattern ---\n const inputBuf = { ptr: 0, cap: 0 };\n const keyBuf = { ptr: 0, cap: 0 };\n const feedBuf = { ptr: 0, cap: 0 };\n\n function ensureBuf(buf: typeof inputBuf, needed: number, minCap: number): number {\n if (needed <= buf.cap) return buf.ptr;\n if (buf.ptr !== 0) engine.dealloc(buf.ptr, buf.cap);\n let cap = buf.cap === 0 ? minCap : buf.cap;\n while (cap < needed) cap *= 2;\n buf.ptr = engine.alloc(cap) >>> 0;\n if (buf.ptr === 0) throw new Error(\"VectorJSON: allocation failed\");\n buf.cap = cap;\n return buf.ptr;\n }\n\n /** Encode string or copy Uint8Array into a reusable WASM buffer. Returns { ptr, len }. */\n function writeToWasm(\n input: string | Uint8Array, buf: typeof inputBuf, extraCap: number, minCap: number,\n ): { ptr: number; len: number } {\n if (typeof input === \"string\") {\n // Try optimistic allocation (1x for likely-ASCII), fall back to 3x for multi-byte\n let maxBytes = input.length + extraCap;\n let ptr = ensureBuf(buf, maxBytes, minCap);\n let result = encoder.encodeInto(input, new Uint8Array(engine.memory.buffer, ptr, maxBytes));\n if (result.read! < input.length) {\n // Input has multi-byte chars — reallocate with worst-case 3x\n maxBytes = input.length * 3 + extraCap;\n ptr = ensureBuf(buf, maxBytes, minCap);\n result = encoder.encodeInto(input, new Uint8Array(engine.memory.buffer, ptr, maxBytes));\n }\n return { ptr, len: result.written! };\n }\n const len = input.byteLength;\n const ptr = ensureBuf(buf, len + extraCap, minCap);\n new Uint8Array(engine.memory.buffer, ptr, len).set(input);\n return { ptr, len };\n }\n\n function writeKeyToMemory(key: string): { ptr: number; len: number } {\n if (key.length === 0) return { ptr: 1, len: 0 };\n return writeToWasm(key, keyBuf, 0, 256);\n }\n\n // --- Constants ---\n // Batch buffer address is a fixed global in WASM — cache to avoid repeated WASM calls\n const batchAddr = engine.doc_batch_ptr() >>> 0;\n\n const TAG_NULL = 0;\n const TAG_TRUE = 1;\n const TAG_FALSE = 2;\n const TAG_NUMBER = 3;\n const TAG_STRING = 4;\n const TAG_OBJECT = 5;\n const TAG_ARRAY = 6;\n\n const FEED_STATUS: readonly FeedStatus[] = [\"incomplete\", \"complete\", \"error\", \"end_early\"];\n const CLASSIFY_INCOMPLETE = 0; // FeedStatus.incomplete\n const CLASSIFY_ERR = 2; // FeedStatus.err\n const CLASSIFY_END_EARLY = 3; // FeedStatus.end_early\n\n // --- Sentinels ---\n const LAZY_PROXY = Symbol(\"vectorjson.lazy\");\n const UNCACHED = Symbol();\n\n // --- Explicit document disposal ---\n // Track generation per docId to prevent stale FinalizationRegistry callbacks\n // from freeing a reused slot. Each parse increments the generation.\n const docGenerations = new Map<number, number>();\n\n // --- FinalizationRegistry for auto-cleanup of document slots ---\n const docRegistry = new FinalizationRegistry(\n ({ docId, generation }: { docId: number; generation: number }) => {\n if (docGenerations.get(docId) !== generation) return; // stale callback\n docGenerations.delete(docId);\n docInputs.delete(docId);\n engine.doc_free(docId);\n },\n );\n\n /** Copy `count` u32 indices from the WASM batch buffer into a JS Uint32Array. */\n function copyBatchIndices(count: number): Uint32Array {\n const copy = new Uint32Array(count);\n copy.set(new Uint32Array(engine.memory.buffer, batchAddr, count));\n return copy;\n }\n\n /** Read all batch indices with pagination for >16384 items. */\n function readBatchPaginated(\n fn: (docId: number, idx: number, resume: number) => number,\n docId: number, idx: number,\n ): Uint32Array {\n const BATCH_CAP = 16384;\n let count = fn(docId, idx, 0);\n if (count < BATCH_CAP) return copyBatchIndices(count);\n const all: number[] = [];\n let page = copyBatchIndices(count);\n for (let i = 0; i < count; i++) all.push(page[i]);\n while (count === BATCH_CAP) {\n const resumeAt = new Uint32Array(engine.memory.buffer, batchAddr + BATCH_CAP * 4, 1)[0];\n count = fn(docId, idx, resumeAt);\n page = copyBatchIndices(count);\n for (let i = 0; i < count; i++) all.push(page[i]);\n }\n return new Uint32Array(all);\n }\n\n // --- Per-document original input tracking (for ASCII fast-path) ---\n // When input is a JS string and all chars are ASCII (byteLen === str.length),\n // we can slice the original string directly instead of reading WASM memory.\n const docInputs = new Map<number, string>();\n\n // --- Read a doc string at a tape index into a JS string ---\n // Strings are stored as source offsets into the original input.\n // The escape flag (batch_buffer[2]) tells us if decoding is needed,\n // avoiding a linear scan with includes('\\\\').\n function docReadString(docId: number, index: number): string {\n const rawLen = engine.doc_read_string_raw(docId, index) >>> 0;\n if (rawLen === 0) return \"\";\n\n const batch = new Uint32Array(engine.memory.buffer, batchAddr, 3);\n const srcOffset = batch[0];\n const hasEscapes = batch[2];\n\n // ASCII fast-path: if original JS string is available and was ASCII,\n // slice directly — no WASM memory read, no TextDecoder overhead.\n const asciiInput = docInputs.get(docId);\n if (asciiInput !== undefined) {\n const raw = asciiInput.slice(srcOffset, srcOffset + rawLen);\n return hasEscapes ? JSON.parse('\"' + raw + '\"') : raw;\n }\n\n const inputPtr = engine.doc_get_input_ptr(docId) >>> 0;\n const raw = utf8Decoder.decode(\n new Uint8Array(engine.memory.buffer, inputPtr + srcOffset, rawLen),\n );\n // has_escapes flag from SIMD skipString — no need for includes('\\\\')\n return hasEscapes ? JSON.parse('\"' + raw + '\"') : raw;\n }\n\n // --- Deep materialize from document tape ---\n // For containers (objects/arrays), slices the source span from WASM memory\n // and delegates to native JSON.parse — faster than recursive tape walking.\n // For primitives, reads directly from the tape.\n function deepMaterializeDoc(docId: number, index: number): unknown {\n const tag = engine.doc_get_tag(docId, index);\n if (tag === TAG_NULL) return null;\n if (tag === TAG_TRUE) return true;\n if (tag === TAG_FALSE) return false;\n if (tag === TAG_NUMBER) return engine.doc_get_number(docId, index);\n if (tag === TAG_STRING) return docReadString(docId, index);\n if (tag === TAG_OBJECT || tag === TAG_ARRAY) {\n // Get source span: opening bracket → closing bracket (inclusive)\n // doc_get_close_index returns one-past-end (simdjson convention for skipping).\n // The actual closing bracket is at closeIdx - 1.\n const startPos = (engine.doc_get_src_pos(docId, index) >>> 0);\n const closingTapeIdx = engine.doc_get_close_index(docId, index) - 1;\n const closePos = engine.doc_get_src_pos(docId, closingTapeIdx);\n const inputPtr = engine.doc_get_input_ptr(docId) >>> 0;\n const raw = new Uint8Array(\n engine.memory.buffer, inputPtr + startPos, closePos + 1 - startPos,\n );\n return JSON.parse(utf8Decoder.decode(raw));\n }\n return null;\n }\n\n /** Batch-read all element tape indices for an array (cached). */\n function batchElemIndices(target: any): Uint32Array {\n return target._e || (target._e = readBatchPaginated(engine.doc_array_elements, target._d, target._i));\n }\n\n /** Resolve a tape value: primitives return directly.\n * Objects: deep-materialize (complete parses) or Proxy (incomplete, for isComplete).\n * Arrays: always lazy Proxy. */\n function resolveValue(\n docId: number, index: number,\n keepAlive: object, generation: number,\n freeFn: (() => void) | undefined,\n proxyObjects = false,\n ): unknown {\n const tag = engine.doc_get_tag(docId, index);\n if (tag === TAG_NULL) return null;\n if (tag === TAG_TRUE) return true;\n if (tag === TAG_FALSE) return false;\n if (tag === TAG_NUMBER) return engine.doc_get_number(docId, index);\n if (tag === TAG_STRING) return docReadString(docId, index);\n\n // Objects: Proxy for incomplete parses (so isComplete can get tape index),\n // deep-materialize for complete parses (fast native property access).\n if (tag === TAG_OBJECT) {\n if (proxyObjects) {\n return new Proxy({ _d: docId, _i: index, _k: keepAlive, _g: generation, _f: freeFn } as any, docObjHandler);\n }\n return deepMaterializeDoc(docId, index);\n }\n\n // Arrays → lazy Proxy (materialize elements on access, cached)\n return new Proxy(\n Object.assign([], { _d: docId, _i: index, _k: keepAlive, _g: generation, _f: freeFn,\n _l: engine.doc_get_count(docId, index), _p: proxyObjects }),\n docArrHandler,\n );\n }\n\n // --- Shared Proxy handler for doc-backed array cursors ---\n const docArrHandler: ProxyHandler<any> = {\n get(target, prop, _receiver) {\n if (prop === 'free' || prop === Symbol.dispose) return target._f;\n if (prop === LAZY_PROXY) return target._m || (target._m = { docId: target._d, index: target._i });\n if (prop === 'length') return target._l;\n if (prop === Symbol.iterator) {\n const t = target; // single capture instead of 7 locals\n return function () {\n let i = 0;\n return {\n next() {\n if (i >= t._l) return { done: true as const, value: undefined };\n // Use indexed get to populate cache (avoids double-resolving)\n return { done: false as const, value: docArrHandler.get!(t, String(i++), t) };\n },\n };\n };\n }\n if (prop === Symbol.toStringTag) return \"Array\";\n if (typeof prop === 'string') {\n const idx = Number(prop);\n if (Number.isInteger(idx) && idx >= 0 && idx < target._l) {\n if (!target._c) target._c = new Array(target._l);\n if (target._c[idx] !== undefined) return target._c[idx];\n const indices = batchElemIndices(target);\n const val = resolveValue(target._d, indices[idx], target._k, target._g, target._f, target._p);\n target._c[idx] = val;\n return val;\n }\n if (prop in Array.prototype) {\n const materialized = deepMaterializeDoc(target._d, target._i) as unknown[];\n return (materialized as unknown as Record<string, unknown>)[prop];\n }\n }\n return undefined;\n },\n has(target, prop) {\n if (prop === LAZY_PROXY || prop === 'free' || prop === Symbol.dispose || prop === 'length') return true;\n if (typeof prop !== 'string') return false;\n const idx = Number(prop);\n return Number.isInteger(idx) && idx >= 0 && idx < target._l;\n },\n ownKeys(target) {\n const keys: string[] = [];\n for (let i = 0; i < target._l; i++) keys.push(String(i));\n keys.push('length');\n return keys;\n },\n getOwnPropertyDescriptor(target, prop) {\n if (prop === 'length') {\n return { value: target._l, writable: false, enumerable: false, configurable: false };\n }\n if (typeof prop === 'string') {\n const idx = Number(prop);\n if (Number.isInteger(idx) && idx >= 0 && idx < target._l) {\n return { value: this.get!(target, prop, target), writable: false, enumerable: true, configurable: true };\n }\n }\n return undefined;\n },\n };\n\n // --- Shared Proxy handler for doc-backed object proxies (incomplete parses) ---\n // doc_find_field compares raw source bytes against the key. For keys with\n // escape sequences (\\n, \\uXXXX), raw comparison fails — we fall back to\n // ownKeys iteration which properly decodes each key via docReadString.\n const docObjHandler: ProxyHandler<any> = {\n get(target, prop, _receiver) {\n if (prop === 'free' || prop === Symbol.dispose) return target._f;\n if (prop === LAZY_PROXY) return target._m || (target._m = { docId: target._d, index: target._i });\n if (typeof prop !== 'string') return prop === Symbol.toStringTag ? \"Object\" : undefined;\n if (!target._c) target._c = Object.create(null);\n if (prop in target._c) return target._c[prop];\n const { ptr, len } = writeKeyToMemory(prop);\n const valIdx = engine.doc_find_field(target._d, target._i, ptr, len);\n if (valIdx !== 0) {\n // Fast path: key matched raw source bytes (no escapes)\n const val = resolveValue(target._d, valIdx, target._k, target._g, target._f, true);\n target._c[prop] = val;\n return val;\n }\n // Fallback: escaped keys won't match raw bytes — iterate all keys\n const keys = this.ownKeys!(target) as string[];\n const keyIdx = keys.indexOf(prop);\n if (keyIdx === -1) return undefined;\n // Resolve value via cached key tape indices\n const val = resolveValue(target._d, target._ki[keyIdx] + 1, target._k, target._g, target._f, true);\n target._c[prop] = val;\n return val;\n },\n has(target, prop) {\n if (prop === LAZY_PROXY || prop === 'free' || prop === Symbol.dispose) return true;\n if (typeof prop !== 'string') return false;\n const { ptr, len } = writeKeyToMemory(prop);\n if (engine.doc_find_field(target._d, target._i, ptr, len) !== 0) return true;\n // Fallback for escaped keys\n const keys = this.ownKeys!(target) as string[];\n return keys.includes(prop);\n },\n ownKeys(target) {\n if (!target._keys) {\n const indices = readBatchPaginated(engine.doc_object_keys, target._d, target._i);\n target._ki = indices;\n target._keys = Array.from(indices, (idx) => docReadString(target._d, idx));\n }\n return target._keys;\n },\n getOwnPropertyDescriptor(target, prop) {\n if (typeof prop !== 'string') return undefined;\n // JSON cannot produce undefined — get() returning undefined means field not found\n const val = this.get!(target, prop, target);\n if (val === undefined) return undefined;\n return { value: val, writable: false, enumerable: true, configurable: true };\n },\n };\n\n // --- Check if a value is a lazy proxy ---\n function isLazyProxy(value: unknown): boolean {\n if (value === null || typeof value !== \"object\") return false;\n try { return LAZY_PROXY in (value as Record<symbol, unknown>); }\n catch { return false; }\n }\n\n // --- Build a value from a doc slot root (shared by parse + createParser) ---\n function buildDocRoot(docId: number, proxyObjects = false): unknown {\n const rootTag = engine.doc_get_tag(docId, 1);\n // Primitives: extract value and free doc immediately (no Proxy needed)\n if (rootTag <= TAG_STRING) {\n const value = rootTag === TAG_NULL ? null\n : rootTag === TAG_TRUE ? true\n : rootTag === TAG_FALSE ? false\n : rootTag === TAG_NUMBER ? engine.doc_get_number(docId, 1)\n : docReadString(docId, 1);\n docInputs.delete(docId);\n engine.doc_free(docId);\n return value;\n }\n // Containers: register for GC and wrap in Proxy with manual .free()\n const generation = (docGenerations.get(docId) ?? 0) + 1;\n docGenerations.set(docId, generation);\n const keepAlive = { docId };\n docRegistry.register(keepAlive, { docId, generation }, keepAlive);\n const freeFn = () => {\n void keepAlive; // prevent GC of sentinel\n if (docGenerations.get(docId) !== generation) return;\n docGenerations.delete(docId);\n docInputs.delete(docId);\n engine.doc_free(docId);\n docRegistry.unregister(keepAlive);\n };\n // Root always gets Proxy so .free() is accessible; force objects to Proxy for isComplete()\n return resolveValue(docId, 1, keepAlive, generation, freeFn, rootTag === TAG_OBJECT || proxyObjects);\n }\n\n // --- Helper: retry doc_parse with GC on slot exhaustion ---\n function tryDocParse(p: number, l: number): number {\n let docId = engine.doc_parse(p, l);\n if (docId < 0) {\n const errCode = engine.get_error_code();\n if (errCode === 2 || errCode === 13) {\n if (typeof globalThis.gc === \"function\") globalThis.gc();\n docId = engine.doc_parse(p, l);\n }\n }\n return docId;\n }\n\n // --- Helpers ---\n function isReadableStream(s: any): s is ReadableStream {\n return typeof s?.getReader === 'function';\n }\n\n // --- JSON Seeker Factory ---\n // Extracts a reusable state machine that skips non-JSON text (think tags, code fences, prose)\n // to find the start of JSON content. Used by both createEventParser and createParser.\n function createSeeker(textCallbacks?: ((text: string) => void)[]) {\n const SEEKING = 0, IN_THINK = 1, IN_FENCE = 2, FEEDING = 3;\n let state = SEEKING;\n let buf = '';\n let fenceBacktickCount = 0;\n\n return {\n feed(text: string): string | null {\n if (state === FEEDING) return text;\n\n const cbs = textCallbacks ?? [];\n let result = '';\n let i = 0;\n\n while (i < text.length) {\n if (state === FEEDING) {\n result += text.slice(i);\n break;\n }\n\n if (state === IN_THINK) {\n const closeIdx = text.indexOf('</think>', i);\n if (closeIdx === -1) {\n const captured = text.slice(i);\n for (const cb of cbs) cb(captured);\n i = text.length;\n } else {\n const captured = text.slice(i, closeIdx);\n if (captured) for (const cb of cbs) cb(captured);\n i = closeIdx + '</think>'.length;\n state = SEEKING;\n buf = '';\n }\n continue;\n }\n\n if (state === IN_FENCE) {\n const closeFence = '`'.repeat(fenceBacktickCount);\n const closeIdx = text.indexOf(closeFence, i);\n if (closeIdx === -1) {\n result += text.slice(i);\n i = text.length;\n } else {\n result += text.slice(i, closeIdx);\n i = closeIdx + fenceBacktickCount;\n fenceBacktickCount = 0;\n state = SEEKING;\n buf = '';\n }\n continue;\n }\n\n // SEEKING state\n const ch = text[i];\n\n if (ch === '{' || ch === '[' || ch === '\"') {\n if (buf) {\n for (const cb of cbs) cb(buf);\n buf = '';\n }\n state = FEEDING;\n result += text.slice(i);\n break;\n }\n\n // Check for <think> tag\n buf += ch;\n if (buf.endsWith('<think>')) {\n const beforeTag = buf.slice(0, -'<think>'.length);\n if (beforeTag) for (const cb of cbs) cb(beforeTag);\n state = IN_THINK;\n buf = '';\n i++;\n continue;\n }\n\n // Check for code fence (``` with optional label)\n if (ch === '`') {\n let btCount = 0;\n let j = i;\n while (j < text.length && text[j] === '`') { btCount++; j++; }\n if (btCount >= 3) {\n while (j < text.length && text[j] !== '\\n') j++;\n if (j < text.length) j++;\n fenceBacktickCount = btCount;\n state = IN_FENCE;\n const beforeFence = buf.slice(0, -1);\n if (beforeFence) for (const cb of cbs) cb(beforeFence);\n buf = '';\n i = j;\n continue;\n }\n }\n\n i++;\n\n if (buf.length > 1024) {\n for (const cb of cbs) cb(buf);\n buf = '';\n }\n }\n\n if (result.length > 0) return result;\n return null;\n },\n reset() { state = SEEKING; buf = ''; fenceBacktickCount = 0; },\n isFeeding() { return state === FEEDING; },\n };\n }\n\n // --- Path Pattern Compiler ---\n // Segments: string = key, number = index, '*' = wildcard\n\n function compilePath(pattern: string): PathSegment[] {\n return pattern.replace(/\\[(\\*|\\d+)\\]/g, '.$1').split('.').filter(Boolean)\n .map(s => s === '*' ? '*' : /^\\d+$/.test(s) ? +s : s);\n }\n\n /** Extract top-level keys from a Zod-like schema and return as compiled pick paths.\n * Supports Zod (.shape), Valibot (.entries), ArkType (.props).\n * Recursively extracts nested object keys for nested pick paths.\n * Returns null if schema shape can't be detected (no auto-pick). */\n function extractSchemaKeys(schema: any, prefix: string[] = []): PathSegment[][] | null {\n const shape = schema?.shape ?? schema?._def?.shape?.() ?? schema?.entries ?? schema?.props;\n if (!shape || typeof shape !== 'object') return null;\n const paths: PathSegment[][] = [];\n for (const key of Object.keys(shape)) {\n const fullPath = [...prefix, key];\n // Check if this field's schema has nested shape (nested object)\n const fieldSchema = shape[key];\n const nested = extractSchemaKeys(fieldSchema, fullPath);\n if (nested && nested.length > 0) {\n paths.push(...nested);\n } else {\n paths.push(fullPath.map(s => /^\\d+$/.test(s) ? +s : s));\n }\n }\n return paths.length > 0 ? paths : null;\n }\n\n function buildResolvedPath(keyStack: (string | null)[], indexStack: (number | null)[], depth: number): string {\n const parts: string[] = [];\n for (let i = 0; i < depth; i++) {\n if (keyStack[i] !== null) parts.push(keyStack[i]!);\n else if (indexStack[i] !== null) parts.push(String(indexStack[i]));\n }\n return parts.join('.');\n }\n\n // --- Public API ---\n _instance = {\n parse(input: string | Uint8Array): ParseResult {\n // Write input into reusable WASM buffer with extra headroom for autocomplete\n const { ptr, len } = writeToWasm(input, inputBuf, 64, 4096);\n // Pad after input for SIMD safety\n new Uint8Array(engine.memory.buffer, ptr + len, 64).fill(0x20);\n\n // Helper: build ParseResult with isComplete() and toJSON()\n const makeResult = (\n status: ParseStatus,\n value: unknown,\n autocompleteBoundary: number,\n toJSONStr: string | undefined,\n remaining?: Uint8Array,\n error?: string,\n ): ParseResult => {\n let _toJSONCache: unknown = UNCACHED;\n return {\n status,\n value,\n remaining,\n error,\n isComplete(val: unknown): boolean {\n if (autocompleteBoundary === Infinity) return true;\n if (val === null || val === undefined || typeof val !== \"object\") return true;\n try {\n const handle = (val as any)[LAZY_PROXY] as { docId?: number; index?: number } | undefined;\n if (!handle || typeof handle.docId !== \"number\") return true;\n const tag = engine.doc_get_tag(handle.docId, handle.index!);\n if (tag === TAG_OBJECT || tag === TAG_ARRAY) {\n const closeIdx = engine.doc_get_close_index(handle.docId, handle.index!);\n const closeSrcPos = engine.doc_get_src_pos(handle.docId, closeIdx) >>> 0;\n return closeSrcPos < autocompleteBoundary;\n }\n return true;\n } catch {\n return true; // fail-safe: freed doc → treat as complete\n }\n },\n toJSON(): unknown {\n if (_toJSONCache !== UNCACHED) return _toJSONCache;\n return (_toJSONCache = toJSONStr !== undefined ? JSON.parse(toJSONStr) : value);\n },\n };\n };\n\n // Helper: build an invalid ParseResult from the last engine error code\n const invalidResult = (msg?: string): ParseResult => {\n if (!msg) {\n const code = engine.get_error_code();\n msg = `VectorJSON: ${ERROR_MESSAGES[code] || `Parse error (code ${code})`}`;\n }\n return makeResult(\"invalid\", undefined, Infinity, undefined, undefined, msg);\n };\n\n // Track whether input is an ASCII JS string (byteLen === str.length).\n // If so, docReadString can slice the original string directly.\n const isAsciiStr = typeof input === \"string\" && len === input.length;\n\n // ── Happy path: try doc_parse directly (no classify overhead) ──\n let docId = tryDocParse(ptr, len);\n if (docId >= 0) {\n if (isAsciiStr) docInputs.set(docId, input as string);\n // For string input at full length, reuse the original string (avoids decode)\n const toJSONStr = typeof input === \"string\" ? input\n : utf8Decoder.decode(new Uint8Array(engine.memory.buffer, ptr, len));\n return makeResult(\"complete\", buildDocRoot(docId), Infinity, toJSONStr);\n }\n\n // ── doc_parse failed — classify to determine why ──\n const classification = engine.classify_input(ptr, len);\n\n if (classification === CLASSIFY_ERR) {\n return invalidResult(\"Invalid JSON structure\");\n }\n\n if (classification === CLASSIFY_END_EARLY) {\n const parseLen = engine.get_value_end();\n const remainLen = len - parseLen;\n const remainingCopy = new Uint8Array(remainLen);\n remainingCopy.set(new Uint8Array(engine.memory.buffer, ptr + parseLen, remainLen));\n new Uint8Array(engine.memory.buffer, ptr + parseLen, 64).fill(0x20);\n\n const toJSONStr = utf8Decoder.decode(new Uint8Array(engine.memory.buffer, ptr, parseLen));\n docId = tryDocParse(ptr, parseLen);\n if (docId >= 0) {\n if (isAsciiStr) docInputs.set(docId, input as string);\n return makeResult(\"complete_early\", buildDocRoot(docId), Infinity, toJSONStr, remainingCopy);\n }\n return invalidResult();\n }\n\n if (classification === CLASSIFY_INCOMPLETE) {\n const parseLen = engine.autocomplete_input(ptr, len, inputBuf.cap);\n if (parseLen === 0) {\n if (len === 0) return makeResult(\"incomplete\", undefined, len, undefined);\n return invalidResult(\"Invalid JSON structure\");\n }\n const toJSONStr = utf8Decoder.decode(new Uint8Array(engine.memory.buffer, ptr, parseLen));\n docId = tryDocParse(ptr, parseLen);\n if (docId >= 0) {\n // Don't use ASCII fast-path for incomplete: autocomplete appended\n // closing tokens that aren't in the original JS string.\n return makeResult(\"incomplete\", buildDocRoot(docId, true), len, toJSONStr);\n }\n return invalidResult();\n }\n\n return invalidResult();\n },\n\n deepCompare(a: unknown, b: unknown, options?: { ignoreKeyOrder?: boolean }): boolean {\n const ordered = (options?.ignoreKeyOrder === false) ? 1 : 0;\n\n // Fast path: both are VJ proxies → WASM tape comparison.\n // Single [LAZY_PROXY] access per arg (1 Proxy get trap) instead of\n // isLazyProxy + [LAZY_PROXY] (has trap + get trap + object allocation × 2).\n if (a !== null && typeof a === \"object\" && b !== null && typeof b === \"object\") {\n try {\n const metaA = (a as any)[LAZY_PROXY] as { docId: number; index: number } | undefined;\n const metaB = (b as any)[LAZY_PROXY] as { docId: number; index: number } | undefined;\n if (metaA && metaB) {\n const result = engine.doc_deep_equal(metaA.docId, metaA.index, metaB.docId, metaB.index, ordered);\n if (result >= 0) return result === 1;\n // fallthrough on error (-1 = invalid doc_id)\n }\n } catch { /* not a proxy, fall through */ }\n }\n\n // Fallback: materialize and compare with JSON round-trip\n return JSON.stringify(a) === JSON.stringify(b);\n },\n\n materialize(value: unknown): unknown {\n if (!isLazyProxy(value)) return value;\n const { docId, index } = (value as any)[LAZY_PROXY];\n return deepMaterializeDoc(docId, index);\n },\n\n parsePartialJson(input: string, schema?: { safeParse: (v: unknown) => { success: boolean; data?: unknown } }): PartialJsonResult {\n if (!input) return { value: undefined, state: \"failed-parse\" as const };\n const result = _instance!.parse(input);\n switch (result.status) {\n case \"complete\":\n case \"complete_early\": {\n const value = result.toJSON();\n if (schema) {\n const validated = schema.safeParse(value);\n if (validated.success) return { value: validated.data, state: \"successful-parse\" as const };\n return { value: undefined, state: \"successful-parse\" as const };\n }\n return { value, state: \"successful-parse\" as const };\n }\n case \"incomplete\": {\n const value = result.toJSON();\n if (schema) {\n const validated = schema.safeParse(value);\n if (validated.success) return { value: validated.data, state: \"repaired-parse\" as const };\n // Partial JSON: safeParse fails (missing fields expected) → keep raw value\n return { value, state: \"repaired-parse\" as const };\n }\n return { value, state: \"repaired-parse\" as const };\n }\n default:\n return { value: undefined, state: \"failed-parse\" as const };\n }\n },\n\n createEventParser(options?: {\n multiRoot?: boolean;\n onRoot?: (event: RootEvent) => void;\n source?: ReadableStream<Uint8Array> | AsyncIterable<Uint8Array | string>;\n }): EventParser {\n const multiRoot = options?.multiRoot ?? false;\n const onRootCb = options?.onRoot;\n const source = options?.source;\n\n const streamId = engine.stream_create();\n if (streamId < 0) {\n throw new Error(\"VectorJSON: Failed to create event parser (max 4 concurrent)\");\n }\n\n let destroyed = false;\n let rootIndex = 0;\n\n // --- Subscription storage ---\n type Sub = { segments: PathSegment[]; callback: Function; schema?: { safeParse: Function } };\n const pathSubs: Sub[] = [];\n const deltaSubs: Sub[] = [];\n const skipPatterns: PathSegment[][] = [];\n const textCallbacks: ((text: string) => void)[] = [];\n\n // --- JSON Seeker (reusable factory) ---\n const seeker = createSeeker(textCallbacks);\n\n // --- PathTracker state ---\n let ptDepth = 0;\n let ptInString = false;\n let ptEscapeNext = false;\n let ptContextStack: ('o' | 'a')[] = []; // object or array at each level\n let ptKeyStack: (string | null)[] = []; // current key at each depth\n let ptIndexStack: (number | null)[] = []; // current array index at each depth\n let ptValueStartStack: number[] = []; // byte offset where value started\n let ptSkipDepth = -1; // if >= 0, we're inside a skipped path\n let ptExpectingKey = false;\n let ptAfterColon = false;\n let ptKeyAccum = '';\n let ptAccumulatingKey = false;\n let ptStringValueStart = -1;\n let ptInStringValue = false;\n let ptDeltaAccum = '';\n let ptDeltaByteStart = 0; // byte offset where current delta accumulation started\n let ptInScalar = false; // tracking a scalar that may span chunks\n let ptScalarStart = -1; // byte offset where current scalar started\n\n // --- Live document builder ---\n // Incrementally builds a JS object/array as bytes are scanned.\n // getValue() returns this growing object. O(n) total materialization.\n let ldRoot: unknown = undefined; // the growing root value\n let ldStack: (Record<string, unknown> | unknown[])[] = []; // container stack\n let ldCurrentKey: string | null = null; // pending key for object assignment\n let ldActiveKey: string | null = null; // key used for current string being updated\n let ldStringAccum = ''; // accumulating string value\n let ldInStringValue = false; // currently inside a string value\n let ldScalarAccum = ''; // accumulating scalar chars\n\n function ldSetValue(value: unknown) {\n if (ldStack.length === 0) {\n ldRoot = value;\n return;\n }\n const parent = ldStack[ldStack.length - 1];\n if (Array.isArray(parent)) {\n parent.push(value);\n } else if (ldCurrentKey !== null) {\n parent[ldCurrentKey] = value;\n ldActiveKey = ldCurrentKey; // remember key for in-place updates\n ldCurrentKey = null;\n }\n }\n\n // Update a string/scalar value in-place (for partial strings being built)\n function ldUpdateString(str: string) {\n if (ldStack.length === 0) {\n ldRoot = str;\n return;\n }\n const parent = ldStack[ldStack.length - 1];\n if (Array.isArray(parent)) {\n if (parent.length > 0) parent[parent.length - 1] = str;\n else parent.push(str);\n } else if (ldActiveKey !== null) {\n parent[ldActiveKey] = str;\n }\n }\n\n function ldReset() {\n ldRoot = undefined;\n ldStack.length = 0;\n ldCurrentKey = null;\n ldActiveKey = null;\n ldStringAccum = '';\n ldInStringValue = false;\n ldScalarAccum = '';\n }\n\n function ptReset() {\n ptDepth = 0; ptInString = false; ptEscapeNext = false;\n ptContextStack.length = 0; ptKeyStack.length = 0;\n ptIndexStack.length = 0; ptValueStartStack.length = 0;\n ptSkipDepth = -1; ptExpectingKey = false; ptAfterColon = false;\n ptKeyAccum = ''; ptAccumulatingKey = false;\n ptStringValueStart = -1; ptInStringValue = false;\n ptDeltaAccum = ''; ptDeltaByteStart = 0;\n ptInScalar = false; ptScalarStart = -1;\n ldReset();\n }\n\n /** Unified path matcher: exact = segments.length must equal depth, prefix = <= depth.\n * Returns wildcard matches on success, null on failure. */\n function matchPath(segments: PathSegment[], exact: boolean): (string | number)[] | null {\n const len = segments.length;\n if (exact ? len !== ptDepth : len > ptDepth) return null;\n const matches: (string | number)[] = [];\n for (let s = 0; s < len; s++) {\n const seg = segments[s];\n const key = ptKeyStack[s], idx = ptIndexStack[s];\n if (seg === '*') matches.push(idx !== null ? idx : (key ?? ''));\n else if (typeof seg === 'number' ? idx !== seg : key !== seg) return null;\n }\n return matches;\n }\n\n function isPathSkipped(): boolean {\n return skipPatterns.length > 0 && skipPatterns.some(p => matchPath(p, false) !== null);\n }\n\n function fireValueComplete(valueBytes: Uint8Array, offset: number, length: number) {\n if (pathSubs.length === 0) return;\n const resolvedPath = buildResolvedPath(ptKeyStack, ptIndexStack, ptDepth);\n for (const sub of pathSubs) {\n const matches = matchPath(sub.segments, true);\n if (!matches) continue;\n let value: unknown;\n try { value = JSON.parse(utf8Decoder.decode(valueBytes)); } catch { continue; }\n if (sub.schema) {\n const result = sub.schema.safeParse(value);\n if (!result.success) continue;\n value = result.data;\n }\n const event: PathEvent = { type: 'value', path: resolvedPath, value, offset, length, matches };\n for (let i = matches.length - 1; i >= 0; i--) {\n const m = matches[i];\n if (typeof m === 'number' && event.index === undefined) event.index = m;\n if (typeof m === 'string' && event.key === undefined) event.key = m;\n }\n sub.callback(event as any);\n }\n }\n\n function fireDelta(value: string, offset: number, length: number) {\n if (deltaSubs.length === 0) return;\n const resolvedPath = buildResolvedPath(ptKeyStack, ptIndexStack, ptDepth);\n for (const sub of deltaSubs) {\n if (!matchPath(sub.segments, true)) continue;\n sub.callback({ type: 'delta', path: resolvedPath, value, offset, length });\n }\n }\n\n function ptScan(buf: Uint8Array, from: number, to: number) {\n for (let i = from; i < to; i++) {\n const c = buf[i];\n\n // Check if we're continuing a scalar from a previous chunk\n if (ptInScalar) {\n if (c === 0x2C || c === 0x7D || c === 0x5D || c === 0x20 || c === 0x0A || c === 0x0D || c === 0x09) {\n // Scalar ended — fire value complete for the whole span\n const scalarLen = i - ptScalarStart;\n fireValueComplete(buf.slice(ptScalarStart, i), ptScalarStart, scalarLen);\n // Live doc: finalize scalar\n try { ldSetValue(JSON.parse(ldScalarAccum)); } catch { ldSetValue(null); }\n ldScalarAccum = '';\n ptInScalar = false;\n ptScalarStart = -1;\n // Re-process this delimiter char (it may be comma/close bracket)\n i--;\n continue;\n }\n // Still inside the scalar, keep scanning\n ldScalarAccum += B2C[c];\n continue;\n }\n\n if (ptEscapeNext) {\n ptEscapeNext = false;\n if (ptInStringValue && ptSkipDepth < 0) {\n // Decode escape for delta\n let decoded: string;\n switch (c) {\n case 0x6E: decoded = '\\n'; break; // n\n case 0x72: decoded = '\\r'; break; // r\n case 0x74: decoded = '\\t'; break; // t\n case 0x22: decoded = '\"'; break; // \"\n case 0x5C: decoded = '\\\\'; break; // \\\n case 0x2F: decoded = '/'; break; // /\n case 0x62: decoded = '\\b'; break; // b\n case 0x66: decoded = '\\f'; break; // f\n default: decoded = B2C[c]; break;\n }\n ptDeltaAccum += decoded;\n // Live doc: accumulate decoded escape char (batched — flushed at string close or chunk end)\n if (ldInStringValue) {\n ldStringAccum += decoded;\n }\n if (ptAccumulatingKey) ptKeyAccum += decoded;\n } else if (ptAccumulatingKey) {\n ptKeyAccum += B2C[c];\n }\n continue;\n }\n\n if (ptInString) {\n if (c === 0x5C) { // backslash\n ptEscapeNext = true;\n continue;\n }\n if (c === 0x22) { // closing quote\n ptInString = false;\n if (ptAccumulatingKey) {\n ptAccumulatingKey = false;\n // Store key at parent depth (ptDepth-1) since we're inside the container\n if (ptDepth > 0) ptKeyStack[ptDepth - 1] = ptKeyAccum;\n // Live doc: store key for next value assignment\n ldCurrentKey = ptKeyAccum;\n ptKeyAccum = '';\n continue;\n }\n // End of string value\n if (ptInStringValue && ptSkipDepth < 0) {\n // Flush final delta — use tracked byte offsets, not decoded char count\n if (ptDeltaAccum && deltaSubs.length > 0) {\n const deltaByteLen = i - ptDeltaByteStart; // raw bytes from start to closing quote\n fireDelta(ptDeltaAccum, ptDeltaByteStart, deltaByteLen);\n }\n ptDeltaAccum = '';\n // Fire value complete for the string\n const start = ptStringValueStart;\n const len = i + 1 - start;\n fireValueComplete(buf.slice(start, i + 1), start, len);\n // Live doc: final update (value already in parent from ldSetValue('') at open)\n ldUpdateString(ldStringAccum);\n ldStringAccum = '';\n ldInStringValue = false;\n }\n ptInStringValue = false;\n ptStringValueStart = -1;\n continue;\n }\n // Regular string character\n if (ptInStringValue && ptSkipDepth < 0) {\n const ch = B2C[c];\n ptDeltaAccum += ch;\n // Live doc: accumulate string char (batched — flushed at string close or chunk end)\n if (ldInStringValue) ldStringAccum += ch;\n if (ptAccumulatingKey) ptKeyAccum += ch;\n } else if (ptAccumulatingKey) {\n ptKeyAccum += B2C[c];\n }\n continue;\n }\n\n // Not in string\n switch (c) {\n case 0x7B: { // {\n ptContextStack[ptDepth] = 'o';\n ptKeyStack[ptDepth] = null;\n ptIndexStack[ptDepth] = null;\n ptValueStartStack[ptDepth] = i;\n ptDepth++;\n ptExpectingKey = true;\n ptAfterColon = false;\n // Check if we should skip this depth\n if (ptSkipDepth < 0 && isPathSkipped()) {\n ptSkipDepth = ptDepth - 1;\n }\n // Live doc: create object and push to stack\n const obj: Record<string, unknown> = {};\n ldSetValue(obj);\n ldStack.push(obj);\n break;\n }\n case 0x5B: { // [\n ptContextStack[ptDepth] = 'a';\n ptKeyStack[ptDepth] = null;\n ptIndexStack[ptDepth] = 0;\n ptValueStartStack[ptDepth] = i;\n ptDepth++;\n ptExpectingKey = false;\n ptAfterColon = false;\n if (ptSkipDepth < 0 && isPathSkipped()) {\n ptSkipDepth = ptDepth - 1;\n }\n // Live doc: create array and push to stack\n const arr: unknown[] = [];\n ldSetValue(arr);\n ldStack.push(arr);\n break;\n }\n case 0x7D: // }\n case 0x5D: { // ]\n ptDepth--;\n const wasSkipped = ptSkipDepth >= 0;\n if (wasSkipped && ptDepth <= ptSkipDepth) {\n ptSkipDepth = -1;\n }\n // Fire value complete for the container (only if not exiting a skipped path)\n if (ptDepth >= 0 && ptSkipDepth < 0 && !wasSkipped) {\n const start = ptValueStartStack[ptDepth];\n const len = i + 1 - start;\n fireValueComplete(buf.slice(start, i + 1), start, len);\n }\n // Restore parent context\n if (ptDepth > 0) {\n const parentCtx = ptContextStack[ptDepth - 1];\n ptExpectingKey = parentCtx === 'o';\n ptAfterColon = false;\n }\n // Live doc: pop container from stack\n ldStack.pop();\n break;\n }\n case 0x22: { // opening quote\n ptInString = true;\n if (ptExpectingKey && ptSkipDepth < 0) {\n // Start accumulating key\n ptAccumulatingKey = true;\n ptKeyAccum = '';\n } else if (ptAfterColon || ptDepth === 0 || (ptDepth > 0 && ptContextStack[ptDepth - 1] === 'a')) {\n // String value — only track if not in a skipped path\n if (ptSkipDepth < 0 && !isPathSkipped()) {\n ptInStringValue = true;\n ptStringValueStart = i;\n ptDeltaAccum = '';\n ptDeltaByteStart = i + 1; // byte after opening quote\n // Live doc: start string value accumulation\n ldStringAccum = '';\n ldInStringValue = true;\n // Push an empty string as placeholder so updates work\n ldSetValue('');\n }\n ptAfterColon = false;\n }\n break;\n }\n case 0x3A: { // colon\n ptExpectingKey = false;\n ptAfterColon = true;\n // Live doc: set null placeholder for pending key\n if (ldCurrentKey !== null && ldStack.length > 0) {\n const parent = ldStack[ldStack.length - 1];\n if (!Array.isArray(parent)) {\n (parent as Record<string, unknown>)[ldCurrentKey] = null;\n ldActiveKey = ldCurrentKey;\n }\n }\n break;\n }\n case 0x2C: { // comma\n // In array: increment index\n if (ptDepth > 0 && ptContextStack[ptDepth - 1] === 'a') {\n const idx = ptIndexStack[ptDepth - 1];\n ptIndexStack[ptDepth - 1] = (idx ?? -1) + 1;\n // Check skip for new array index\n if (ptSkipDepth < 0 && isPathSkipped()) {\n ptSkipDepth = ptDepth - 1;\n }\n }\n // In object: expect next key\n if (ptDepth > 0 && ptContextStack[ptDepth - 1] === 'o') {\n ptExpectingKey = true;\n ptKeyStack[ptDepth - 1] = null;\n }\n ptAfterColon = false;\n break;\n }\n default: {\n // Scalar values (numbers, true, false, null)\n if (ptAfterColon || ptDepth === 0 || (ptDepth > 0 && ptContextStack[ptDepth - 1] === 'a')) {\n if (c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x74 || c === 0x66 || c === 0x6E) {\n // Find end of scalar\n if (ptSkipDepth < 0 && !isPathSkipped()) {\n let j = i + 1;\n while (j < to) {\n const sc = buf[j];\n if (sc === 0x2C || sc === 0x7D || sc === 0x5D || sc === 0x20 || sc === 0x0A || sc === 0x0D || sc === 0x09) break;\n j++;\n }\n if (j < to) {\n // Complete scalar within this chunk\n fireValueComplete(buf.slice(i, j), i, j - i);\n // Live doc: parse and set scalar value\n const scalarStr = utf8Decoder.decode(buf.slice(i, j));\n try { ldSetValue(JSON.parse(scalarStr)); } catch { ldSetValue(null); }\n i = j - 1; // -1 because loop will increment\n } else {\n // Scalar extends past this chunk — track it\n ptInScalar = true;\n ptScalarStart = i;\n ldScalarAccum = utf8Decoder.decode(buf.slice(i, to));\n i = to; // skip to end, will resume on next feed\n }\n }\n ptAfterColon = false;\n }\n }\n break;\n }\n }\n }\n\n // Flush accumulated string to live doc parent (batched update)\n if (ldInStringValue && ldStringAccum) {\n ldUpdateString(ldStringAccum);\n }\n\n // Flush accumulated deltas at end of each feed for in-progress strings\n // This ensures onDelta fires incrementally per feed(), not just at string close\n if (ptInStringValue && ptDeltaAccum.length > 0 && ptSkipDepth < 0 && deltaSubs.length > 0) {\n fireDelta(ptDeltaAccum, ptDeltaByteStart, to - ptDeltaByteStart);\n ptDeltaAccum = '';\n ptDeltaByteStart = to;\n }\n }\n\n // --- EventParser object ---\n const self: EventParser = {\n on(path: string, ...args: any[]): EventParser {\n let schema: { safeParse: Function } | undefined;\n let callback: (event: PathEvent) => void;\n if (args.length === 2 && typeof args[0] === 'object' && args[0] !== null && 'safeParse' in args[0]) {\n schema = args[0];\n callback = args[1];\n } else {\n callback = args[0];\n }\n pathSubs.push({ segments: compilePath(path), callback, schema });\n return self;\n },\n\n onDelta(path: string, callback: (event: DeltaEvent) => void): EventParser {\n deltaSubs.push({ segments: compilePath(path), callback });\n return self;\n },\n\n onText(callback: (text: string) => void): EventParser {\n textCallbacks.push(callback);\n return self;\n },\n\n skip(...paths: string[]): EventParser {\n for (const p of paths) skipPatterns.push(compilePath(p));\n return self;\n },\n\n off(path: string, callback?: Function): EventParser {\n const compiled = compilePath(path);\n const eq = (a: PathSegment[], b: PathSegment[]) =>\n a.length === b.length && a.every((s, i) => s === b[i]);\n const remove = (subs: Sub[]) => {\n for (let i = subs.length - 1; i >= 0; i--) {\n if (eq(subs[i].segments, compiled) && (!callback || subs[i].callback === callback))\n subs.splice(i, 1);\n }\n };\n remove(pathSubs);\n remove(deltaSubs);\n return self;\n },\n\n feed(chunk: string | Uint8Array): FeedStatus {\n if (destroyed) throw new Error(\"EventParser already destroyed\");\n\n // Run through JSON seeker first\n let jsonContent: string | Uint8Array | null;\n if (typeof chunk === 'string') {\n jsonContent = seeker.feed(chunk);\n if (jsonContent === null) return FEED_STATUS[engine.stream_get_status(streamId)]!;\n } else if (seeker.isFeeding()) {\n // Fast path: skip string conversion when seeker is already feeding JSON\n jsonContent = chunk;\n } else {\n const str = utf8Decoder.decode(chunk);\n const result = seeker.feed(str);\n if (result === null) return FEED_STATUS[engine.stream_get_status(streamId)]!;\n jsonContent = encoder.encode(result);\n }\n\n // Feed to WASM stream\n const { ptr, len } = writeToWasm(jsonContent, feedBuf, 0, 4096);\n const prevLen = engine.stream_get_buffer_len(streamId);\n const status = engine.stream_feed(streamId, ptr, len);\n const newLen = engine.stream_get_buffer_len(streamId);\n\n // Scan new bytes with PathTracker (always runs — needed for live document builder)\n if (newLen > prevLen) {\n const bufPtr = (engine.stream_get_buffer_ptr(streamId) >>> 0);\n // For end_early/complete: only scan up to the value boundary\n const scanEnd = (status === 1 || status === 3)\n ? Math.min(newLen, engine.stream_get_value_len(streamId))\n : newLen;\n if (scanEnd > prevLen) {\n const wasmBuf = new Uint8Array(engine.memory.buffer, bufPtr, scanEnd);\n ptScan(wasmBuf, prevLen, scanEnd);\n }\n // Finalize pending scalar on complete/end_early\n if ((status === 1 || status === 3) && ptInScalar && ldScalarAccum) {\n try { ldSetValue(JSON.parse(ldScalarAccum)); } catch { ldSetValue(null); }\n ldScalarAccum = '';\n ptInScalar = false;\n ptScalarStart = -1;\n }\n }\n\n const feedStatus = FEED_STATUS[status] || \"error\";\n\n // Multi-root handling: drain all complete values\n if (multiRoot && (feedStatus === 'complete' || feedStatus === 'end_early')) {\n let loopGuard = 0;\n while (loopGuard++ < 10000) {\n const curStatus = engine.stream_get_status(streamId);\n if (curStatus !== 1 && curStatus !== 3) break; // not complete/end_early\n\n // Copy value bytes before reset (SIMD padding would overwrite remaining)\n const bp = (engine.stream_get_buffer_ptr(streamId) >>> 0);\n const vl = engine.stream_get_value_len(streamId);\n const valueCopy = new Uint8Array(vl + 64);\n valueCopy.set(new Uint8Array(engine.memory.buffer, bp, vl));\n // Pad copy for SIMD safety\n valueCopy.fill(0x20, vl);\n\n // Reset stream for next value BEFORE parsing (preserves remaining bytes)\n const remaining = engine.stream_reset_for_next(streamId);\n ptReset();\n\n // Now parse the copied value bytes\n const parsePtr = engine.alloc(valueCopy.length) >>> 0;\n if (parsePtr) {\n new Uint8Array(engine.memory.buffer, parsePtr, valueCopy.length).set(valueCopy);\n const did = engine.doc_parse(parsePtr, vl);\n engine.dealloc(parsePtr, valueCopy.length);\n if (did >= 0 && onRootCb) {\n onRootCb({ type: 'root', index: rootIndex++, value: buildDocRoot(did) });\n }\n }\n\n // Scan remaining bytes with PathTracker\n if (remaining > 0 && (pathSubs.length > 0 || deltaSubs.length > 0)) {\n const nbp = (engine.stream_get_buffer_ptr(streamId) >>> 0);\n const nbl = engine.stream_get_buffer_len(streamId);\n if (nbl > 0) {\n const wb = new Uint8Array(engine.memory.buffer, nbp, nbl);\n ptScan(wb, 0, nbl);\n }\n }\n\n if (remaining === 0) break;\n }\n return FEED_STATUS[engine.stream_get_status(streamId)] || \"incomplete\";\n }\n\n return feedStatus;\n },\n\n getValue(): unknown | undefined {\n if (destroyed) throw new Error(\"EventParser already destroyed\");\n const status = engine.stream_get_status(streamId);\n if (status === 2) throw new SyntaxError(\"VectorJSON: Parse error in stream\");\n\n if (status === 0) {\n // incomplete — return the incrementally-built live document\n let value: unknown = ldRoot;\n\n // Handle pending values not yet committed to ldRoot\n if (ptInScalar && ldScalarAccum) {\n const partial = ldScalarAccum;\n const completed = partial.startsWith('t') ? 'true'\n : partial.startsWith('f') ? 'false'\n : partial.startsWith('n') ? 'null'\n : partial;\n try {\n const parsed = JSON.parse(completed);\n if (ldStack.length === 0) value = parsed;\n } catch { /* leave as-is */ }\n } else if (ldInStringValue && ldStack.length === 0) {\n value = ldStringAccum;\n }\n\n if (value === undefined) return undefined;\n return value;\n }\n\n // complete or end_early — do a final WASM parse for correctness\n const bufPtr = (engine.stream_get_buffer_ptr(streamId) >>> 0);\n const valueLen = engine.stream_get_value_len(streamId);\n new Uint8Array(engine.memory.buffer, bufPtr + valueLen, 64).fill(0x20);\n const docId = engine.doc_parse(bufPtr, valueLen);\n if (docId < 0) {\n const errorCode = engine.get_error_code();\n const msg = ERROR_MESSAGES[errorCode] || `Parse error (code ${errorCode})`;\n throw new SyntaxError(`VectorJSON: ${msg}`);\n }\n return buildDocRoot(docId);\n },\n\n getRemaining(): Uint8Array | null {\n if (destroyed) return null;\n const rPtr = (engine.stream_get_remaining_ptr(streamId) >>> 0);\n const rLen = engine.stream_get_remaining_len(streamId);\n if (rLen > 0) {\n const copy = new Uint8Array(rLen);\n copy.set(new Uint8Array(engine.memory.buffer, rPtr, rLen));\n return copy;\n }\n return null;\n },\n\n getStatus(): FeedStatus {\n if (destroyed) return \"error\";\n return FEED_STATUS[engine.stream_get_status(streamId)] || \"error\";\n },\n\n getRawBuffer(): ArrayBuffer | null {\n if (destroyed) return null;\n const bufPtr = engine.stream_get_buffer_ptr(streamId) >>> 0;\n const bufLen = engine.stream_get_buffer_len(streamId);\n if (bufLen === 0) return null;\n const copy = new ArrayBuffer(bufLen);\n new Uint8Array(copy).set(new Uint8Array(engine.memory.buffer, bufPtr, bufLen));\n return copy;\n },\n\n destroy(): void {\n if (!destroyed) {\n engine.stream_destroy(streamId);\n destroyed = true;\n }\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<unknown | undefined> {\n if (!source) throw new Error(\"No source provided — use feed() for push-based parsing\");\n const ep = this;\n const reader = isReadableStream(source) ? source.getReader() : null;\n const iter = reader ? null : (source as AsyncIterable<any>)[Symbol.asyncIterator]();\n let finished = false;\n\n return {\n async next() {\n if (finished) {\n ep.destroy();\n return { done: true as const, value: undefined };\n }\n\n const result = reader\n ? await reader.read()\n : await iter!.next();\n\n if (result.done || !result.value) {\n finished = true;\n ep.destroy();\n return { done: true as const, value: undefined };\n }\n\n const status = ep.feed(result.value);\n const partial = ep.getValue();\n\n if (status === \"complete\" || status === \"end_early\") {\n finished = true;\n return { done: false, value: partial };\n }\n if (status === \"error\") {\n finished = true;\n ep.destroy();\n throw new SyntaxError(\"VectorJSON: Parse error in stream\");\n }\n\n return { done: false, value: partial };\n },\n async return() {\n finished = true;\n ep.destroy();\n if (reader) reader.cancel();\n return { done: true as const, value: undefined };\n },\n [Symbol.asyncIterator]() { return this; },\n };\n },\n };\n\n return self;\n },\n\n createParser(arg?: any): StreamingParser {\n // --- Argument parsing: detect legacy schema vs options object ---\n let schema: { safeParse: (v: unknown) => { success: boolean; data?: unknown } } | undefined;\n let pickPaths: PathSegment[][] | null = null;\n let source: ReadableStream<Uint8Array> | AsyncIterable<Uint8Array | string> | undefined;\n\n if (arg && typeof arg === 'object' && 'safeParse' in arg && !('pick' in arg) && !('source' in arg) && !('schema' in arg)) {\n // Legacy: createParser(zodSchema)\n schema = arg;\n // Auto-derive pick paths from schema shape (Zod, Valibot, ArkType)\n pickPaths = extractSchemaKeys(arg);\n } else if (arg && typeof arg === 'object' && ('pick' in arg || 'source' in arg || 'schema' in arg)) {\n // New: createParser({ pick, schema, source })\n schema = arg.schema;\n source = arg.source;\n if (arg.pick) {\n pickPaths = arg.pick.map(compilePath);\n } else if (arg.schema) {\n // Auto-derive pick paths from schema when no explicit pick\n pickPaths = extractSchemaKeys(arg.schema);\n }\n }\n // Seeker: skip junk text when schema is provided (dirty input handling)\n const cpSeeker = schema ? createSeeker() : null;\n\n const streamId = engine.stream_create();\n if (streamId < 0) {\n throw new Error(\"VectorJSON: Failed to create streaming parser (max 4 concurrent)\");\n }\n\n let destroyed = false;\n let cachedValue: unknown = UNCACHED;\n let cachedRemaining: Uint8Array | null | undefined; // undefined = not yet cached\n\n // --- Live document builder state (same approach as EventParser) ---\n let ldRoot: unknown = undefined;\n let ldStack: (Record<string, unknown> | unknown[])[] = [];\n let ldCurrentKey: string | null = null;\n let ldActiveKey: string | null = null;\n let ldStringAccum = '';\n let ldInStringValue = false;\n let ldScalarAccum = '';\n\n // Byte scanner state\n let scanInString = false;\n let scanEscapeNext = false;\n let scanDepth = 0;\n let scanContext: ('o' | 'a')[] = [];\n let scanExpectingKey = false;\n let scanAfterColon = false;\n let scanKeyAccum = '';\n let scanAccumulatingKey = false;\n let scanInScalar = false;\n\n // --- Pick state ---\n // spKeyStack tracks the current key at each depth for pick matching.\n // spSkipDepth >= 0 means we're inside a non-picked field and should skip building.\n let spKeyStack: (string | null)[] = [];\n let spSkipDepth = -1;\n\n /** Check if the current path (from spKeyStack + scanDepth) matches any pick path.\n * Returns true if current path is an ancestor, descendant, or exact match.\n * Array levels (null entries in spKeyStack) are transparent — skipped during comparison. */\n function isFieldPicked(): boolean {\n if (!pickPaths) return true;\n // Build effective key path (skip null = array levels)\n const effective: string[] = [];\n for (let i = 0; i < scanDepth; i++) {\n if (spKeyStack[i] !== null) effective.push(spKeyStack[i]!);\n }\n for (const pick of pickPaths) {\n const pickLen = pick.length;\n const effLen = effective.length;\n const compareLen = Math.min(effLen, pickLen);\n let matched = true;\n for (let i = 0; i < compareLen; i++) {\n const seg = pick[i];\n if (seg === '*') continue; // wildcard matches anything\n if (typeof seg === 'number') continue; // index matching — arrays are transparent\n if (effective[i] !== seg) { matched = false; break; }\n }\n if (matched) return true; // ancestor, descendant, or exact match\n }\n return false;\n }\n\n function spSetValue(value: unknown) {\n if (ldStack.length === 0) { ldRoot = value; return; }\n const parent = ldStack[ldStack.length - 1];\n if (Array.isArray(parent)) { parent.push(value); }\n else if (ldCurrentKey !== null) { parent[ldCurrentKey] = value; ldActiveKey = ldCurrentKey; ldCurrentKey = null; }\n }\n\n function spUpdateString(str: string) {\n if (ldStack.length === 0) { ldRoot = str; return; }\n const parent = ldStack[ldStack.length - 1];\n if (Array.isArray(parent)) {\n if (parent.length > 0) parent[parent.length - 1] = str;\n else parent.push(str);\n } else if (ldActiveKey !== null) { parent[ldActiveKey] = str; }\n }\n\n /** Scan new bytes to incrementally build the live JS document.\n * When pickPaths is set, fields not matching any pick path are skipped. */\n function spScan(buf: Uint8Array, from: number, to: number) {\n const picking = pickPaths !== null;\n for (let i = from; i < to; i++) {\n const c = buf[i];\n\n if (scanInScalar) {\n if (c === 0x2C || c === 0x7D || c === 0x5D || c === 0x20 || c === 0x0A || c === 0x0D || c === 0x09) {\n if (spSkipDepth < 0) {\n try { spSetValue(JSON.parse(ldScalarAccum)); } catch { spSetValue(null); }\n }\n ldScalarAccum = '';\n scanInScalar = false;\n i--; continue;\n }\n if (spSkipDepth < 0) ldScalarAccum += B2C[c];\n continue;\n }\n\n if (scanEscapeNext) {\n scanEscapeNext = false;\n if (ldInStringValue && spSkipDepth < 0) {\n let decoded: string;\n switch (c) {\n case 0x6E: decoded = '\\n'; break;\n case 0x72: decoded = '\\r'; break;\n case 0x74: decoded = '\\t'; break;\n case 0x22: decoded = '\"'; break;\n case 0x5C: decoded = '\\\\'; break;\n case 0x2F: decoded = '/'; break;\n case 0x62: decoded = '\\b'; break;\n case 0x66: decoded = '\\f'; break;\n default: decoded = B2C[c]; break;\n }\n ldStringAccum += decoded;\n }\n if (scanAccumulatingKey) scanKeyAccum += B2C[c];\n continue;\n }\n\n if (scanInString) {\n if (c === 0x5C) { scanEscapeNext = true; continue; }\n if (c === 0x22) {\n scanInString = false;\n if (scanAccumulatingKey) {\n scanAccumulatingKey = false;\n ldCurrentKey = scanKeyAccum;\n // Store key in spKeyStack for pick path matching\n if (picking && scanDepth > 0) {\n spKeyStack[scanDepth - 1] = scanKeyAccum;\n }\n scanKeyAccum = '';\n continue;\n }\n if (ldInStringValue && spSkipDepth < 0) {\n spUpdateString(ldStringAccum);\n ldStringAccum = '';\n ldInStringValue = false;\n }\n continue;\n }\n if (ldInStringValue && spSkipDepth < 0) ldStringAccum += B2C[c];\n if (scanAccumulatingKey) scanKeyAccum += B2C[c];\n continue;\n }\n\n switch (c) {\n case 0x7B: {\n scanContext[scanDepth] = 'o';\n if (picking) spKeyStack[scanDepth] = null;\n scanDepth++;\n scanExpectingKey = true;\n scanAfterColon = false;\n if (spSkipDepth < 0) {\n const obj: Record<string, unknown> = {};\n spSetValue(obj);\n ldStack.push(obj);\n }\n break;\n }\n case 0x5B: {\n scanContext[scanDepth] = 'a';\n if (picking) spKeyStack[scanDepth] = null;\n scanDepth++;\n scanExpectingKey = false;\n scanAfterColon = false;\n if (spSkipDepth < 0) {\n const arr: unknown[] = [];\n spSetValue(arr);\n ldStack.push(arr);\n }\n break;\n }\n case 0x7D: case 0x5D: {\n scanDepth--;\n if (spSkipDepth >= 0) {\n if (scanDepth <= spSkipDepth) {\n spSkipDepth = -1;\n // Container was opened before skip started — pop it\n ldStack.pop();\n }\n // else: still inside skipped region, container wasn't pushed\n } else {\n ldStack.pop();\n }\n if (scanDepth > 0) {\n scanExpectingKey = scanContext[scanDepth - 1] === 'o';\n scanAfterColon = false;\n }\n break;\n }\n case 0x22: {\n scanInString = true;\n const isValue = scanAfterColon || scanDepth === 0 || (scanDepth > 0 && scanContext[scanDepth - 1] === 'a');\n if (scanExpectingKey) {\n scanAccumulatingKey = true;\n scanKeyAccum = '';\n } else if (isValue && spSkipDepth < 0) {\n ldStringAccum = '';\n ldInStringValue = true;\n spSetValue('');\n scanAfterColon = false;\n }\n break;\n }\n case 0x3A: {\n scanExpectingKey = false;\n scanAfterColon = true;\n // Check pick filter after key is stored\n if (picking && spSkipDepth < 0 && !isFieldPicked()) {\n spSkipDepth = scanDepth - 1;\n ldCurrentKey = null; // discard key since field is skipped\n break;\n }\n // Pre-set null for the pending key — overwritten when the real\n // value arrives. Ensures getValue() shows {\"key\": null} while\n // the value is still being streamed.\n if (spSkipDepth < 0 && ldCurrentKey !== null && ldStack.length > 0) {\n const parent = ldStack[ldStack.length - 1];\n if (!Array.isArray(parent)) {\n (parent as Record<string, unknown>)[ldCurrentKey] = null;\n ldActiveKey = ldCurrentKey;\n }\n }\n break;\n }\n case 0x2C: {\n if (picking && spSkipDepth >= 0 && scanDepth - 1 <= spSkipDepth) {\n spSkipDepth = -1;\n }\n if (scanDepth > 0 && scanContext[scanDepth - 1] === 'o') {\n scanExpectingKey = true;\n if (picking) spKeyStack[scanDepth - 1] = null;\n }\n scanAfterColon = false;\n break;\n }\n default: {\n if (spSkipDepth >= 0) break; // skip scalars inside non-picked fields\n const isValuePos = scanAfterColon || scanDepth === 0 || (scanDepth > 0 && scanContext[scanDepth - 1] === 'a');\n if (isValuePos) {\n if (c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x74 || c === 0x66 || c === 0x6E) {\n let j = i + 1;\n while (j < to) {\n const sc = buf[j];\n if (sc === 0x2C || sc === 0x7D || sc === 0x5D || sc === 0x20 || sc === 0x0A || sc === 0x0D || sc === 0x09) break;\n j++;\n }\n if (j < to) {\n const scalarStr = utf8Decoder.decode(buf.slice(i, j));\n try { spSetValue(JSON.parse(scalarStr)); } catch { spSetValue(null); }\n i = j - 1;\n } else {\n scanInScalar = true;\n ldScalarAccum = utf8Decoder.decode(buf.slice(i, to));\n i = to;\n }\n scanAfterColon = false;\n }\n }\n break;\n }\n }\n }\n\n // End-of-chunk: flush accumulated string to parent (batched update)\n if (ldInStringValue && ldStringAccum && spSkipDepth < 0) {\n spUpdateString(ldStringAccum);\n }\n\n // End-of-chunk: if we're still accumulating a scalar and stream says complete,\n // finalize it now (root-level scalars like \"42\" end at end-of-buffer)\n if (scanInScalar) {\n const status = engine.stream_get_status(streamId);\n if (status === 1 || status === 3) { // complete or end_early\n // Autocomplete partial keywords (e.g., \"tr\" → \"true\")\n const s = ldScalarAccum;\n const completed = s.startsWith('t') ? 'true'\n : s.startsWith('f') ? 'false'\n : s.startsWith('n') ? 'null' : s;\n try { spSetValue(JSON.parse(completed)); } catch { spSetValue(null); }\n ldScalarAccum = '';\n scanInScalar = false;\n }\n }\n }\n\n const ensureRemaining = () => {\n if (cachedRemaining !== undefined) return;\n const rPtr = (engine.stream_get_remaining_ptr(streamId) >>> 0);\n const rLen = engine.stream_get_remaining_len(streamId);\n if (rLen > 0) {\n cachedRemaining = new Uint8Array(rLen);\n cachedRemaining.set(new Uint8Array(engine.memory.buffer, rPtr, rLen));\n } else {\n cachedRemaining = null;\n }\n };\n\n let prevLen = 0;\n\n return {\n feed(chunk: Uint8Array | string): FeedStatus {\n if (destroyed) throw new Error(\"Parser already destroyed\");\n // Run through seeker to skip non-JSON junk (when schema is set)\n if (cpSeeker) {\n const text = typeof chunk === 'string' ? chunk : utf8Decoder.decode(chunk);\n const jsonContent = cpSeeker.feed(text);\n if (jsonContent === null) return FEED_STATUS[engine.stream_get_status(streamId)]!;\n chunk = jsonContent;\n }\n const chunkLen = typeof chunk === \"string\" ? chunk.length : chunk.byteLength;\n if (chunkLen === 0) return FEED_STATUS[engine.stream_get_status(streamId)]!;\n const { ptr, len } = writeToWasm(chunk, feedBuf, 0, 4096);\n const rawStatus = engine.stream_feed(streamId, ptr, len);\n // Scan new bytes for live document building\n const newLen = engine.stream_get_buffer_len(streamId);\n if (newLen > prevLen) {\n const bufPtr = (engine.stream_get_buffer_ptr(streamId) >>> 0);\n // For end_early/complete: only scan up to the value boundary, not trailing data\n const scanEnd = (rawStatus === 1 || rawStatus === 3)\n ? Math.min(newLen, engine.stream_get_value_len(streamId))\n : newLen;\n if (scanEnd > prevLen) {\n const wasmBuf = new Uint8Array(engine.memory.buffer, bufPtr, scanEnd);\n spScan(wasmBuf, prevLen, scanEnd);\n }\n prevLen = newLen;\n }\n return FEED_STATUS[rawStatus] || \"error\";\n },\n\n getValue(): unknown | undefined {\n if (destroyed) throw new Error(\"Parser already destroyed\");\n if (cachedValue !== UNCACHED) return cachedValue;\n\n const status = engine.stream_get_status(streamId);\n if (status === 2) {\n throw new SyntaxError(\"VectorJSON: Parse error in stream\");\n }\n\n if (status === 0) {\n // incomplete — return the incrementally-built live document\n // The returned object IS the live object — it grows as more data arrives.\n // Callers get a reference that automatically reflects future feed() calls.\n let value: unknown = ldRoot;\n\n // Handle pending partial values that haven't been committed to ldRoot yet:\n if (scanInScalar && ldScalarAccum) {\n // Pending scalar: try to autocomplete (e.g., \"tr\" → true)\n const partial = ldScalarAccum;\n const completed = partial.startsWith('t') ? 'true'\n : partial.startsWith('f') ? 'false'\n : partial.startsWith('n') ? 'null'\n : partial;\n try {\n const parsed = JSON.parse(completed);\n if (ldStack.length === 0) value = parsed;\n } catch { /* partial number like \"1.\" — leave as-is */ }\n } else if (ldInStringValue && ldStack.length === 0) {\n // Root-level string still being accumulated\n value = ldStringAccum;\n }\n\n if (value === undefined) return undefined;\n // Incomplete: return partial value without schema gating.\n // User checks getStatus() to know it's not final.\n return value;\n }\n\n // complete or end_early — finalize any pending scalar\n if (scanInScalar && ldScalarAccum) {\n try { spSetValue(JSON.parse(ldScalarAccum)); } catch { spSetValue(null); }\n ldScalarAccum = '';\n scanInScalar = false;\n }\n ensureRemaining();\n\n let value: unknown = ldRoot;\n if (schema) {\n const result = schema.safeParse(value);\n if (!result.success) return (cachedValue = undefined) as undefined;\n value = result.data;\n }\n return (cachedValue = value);\n },\n\n getRemaining(): Uint8Array | null {\n if (destroyed) return null;\n ensureRemaining();\n return cachedRemaining!;\n },\n\n getStatus(): FeedStatus {\n if (destroyed) return \"error\";\n const status = engine.stream_get_status(streamId);\n return FEED_STATUS[status] || \"error\";\n },\n\n getRawBuffer(): ArrayBuffer | null {\n if (destroyed) return null;\n const bufPtr = engine.stream_get_buffer_ptr(streamId) >>> 0;\n const bufLen = engine.stream_get_buffer_len(streamId);\n if (bufLen === 0) return null;\n const copy = new ArrayBuffer(bufLen);\n new Uint8Array(copy).set(new Uint8Array(engine.memory.buffer, bufPtr, bufLen));\n return copy;\n },\n\n destroy(): void {\n if (!destroyed) {\n engine.stream_destroy(streamId);\n destroyed = true;\n cachedValue = UNCACHED;\n }\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<unknown | undefined> {\n if (!source) throw new Error(\"No source provided — use feed() for push-based parsing\");\n const self = this;\n const reader = isReadableStream(source) ? source.getReader() : null;\n const iter = reader ? null : (source as AsyncIterable<any>)[Symbol.asyncIterator]();\n let finished = false;\n\n return {\n async next() {\n if (finished) {\n self.destroy();\n return { done: true as const, value: undefined };\n }\n\n const result = reader\n ? await reader.read()\n : await iter!.next();\n\n if (result.done || !result.value) {\n finished = true;\n self.destroy();\n return { done: true as const, value: undefined };\n }\n\n const status = self.feed(result.value);\n const partial = self.getValue();\n\n if (status === \"complete\" || status === \"end_early\") {\n finished = true;\n return { done: false, value: partial };\n }\n if (status === \"error\") {\n finished = true;\n self.destroy();\n throw new SyntaxError(\"VectorJSON: Parse error in stream\");\n }\n\n return { done: false, value: partial };\n },\n async return() {\n finished = true;\n self.destroy();\n if (reader) reader.cancel();\n return { done: true as const, value: undefined };\n },\n [Symbol.asyncIterator]() { return this; },\n };\n },\n };\n },\n };\n\n return _instance;\n}\n\n// --- Top-level await: auto-initialize with embedded WASM ---\nconst _vj = await init();\n\n/** Parse a JSON string or Uint8Array. Synchronous — no init needed. */\nexport const parse = _vj.parse;\n\n/** Parse partial/incomplete JSON. Compatible with Vercel AI SDK's parsePartialJson. */\nexport const parsePartialJson = _vj.parsePartialJson;\n\n/** Deep-compare two values for structural equality. WASM-accelerated for VJ proxies. */\nexport const deepCompare = _vj.deepCompare;\n\n/** Create a streaming parser for incremental JSON parsing. */\nexport const createParser = _vj.createParser;\n\n/** Create an event-driven streaming parser with path subscriptions. */\nexport const createEventParser = _vj.createEventParser;\n\n/** Eagerly materialize a lazy proxy into plain JS objects. */\nexport const materialize = _vj.materialize;\n"
6
+ "/**\n * VectorJSON — SIMD-accelerated JSON parser\n *\n * Architecture:\n * JS bytes → [Zig + zimdjson SIMD] → tape → lazy Proxy over doc slots\n *\n * The Zig engine (engine.wasm) parses JSON bytes into an internal tape format\n * using SIMD-accelerated algorithms from zimdjson.\n *\n * Primary parse path: doc-slot (tape-direct navigation via Zig exports).\n * FinalizationRegistry auto-frees doc slots when the Proxy is GC'd.\n * Users CAN call .free() to release immediately if desired.\n */\n\nimport { wasmBase64 } from \"./engine-wasm.generated.js\";\n\nfunction decodeBase64(b64: string): Uint8Array {\n if (typeof Buffer !== \"undefined\")\n return new Uint8Array(Buffer.from(b64, \"base64\").buffer);\n const bin = atob(b64);\n const bytes = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);\n return bytes;\n}\n\n// --- Types ---\n\nexport type ParseStatus = \"complete\" | \"complete_early\" | \"incomplete\" | \"invalid\";\nexport type FeedStatus = \"incomplete\" | \"complete\" | \"error\" | \"end_early\";\n\n/** Result shape compatible with Vercel AI SDK's parsePartialJson */\nexport type PartialJsonState =\n | \"successful-parse\"\n | \"repaired-parse\"\n | \"failed-parse\";\n\n/** Discriminated union — narrows `value` type when you check `state`. */\nexport type PartialJsonResult<T = unknown> =\n | { value: T; state: \"successful-parse\" }\n | { value: T | undefined; state: \"repaired-parse\" }\n | { value: undefined; state: \"failed-parse\" };\n\n/** Recursively make all properties optional — matches Vercel AI SDK's DeepPartial. */\nexport type DeepPartial<T> =\n T extends object\n ? T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : { [K in keyof T]?: DeepPartial<T[K]> }\n : T;\n\nexport interface StreamingParser<T = unknown> {\n /** Feed a chunk of bytes to the parser. Only NEW bytes are scanned (O(chunk_size)). */\n feed(chunk: Uint8Array | string): FeedStatus;\n /** Get the parsed value. Returns autocompleted partial value while incomplete, final value when complete; throws on parse errors. */\n getValue(): T | undefined;\n /** Get remaining bytes after end_early status (for NDJSON). */\n getRemaining(): Uint8Array | null;\n /** Get the current status without feeding data. */\n getStatus(): FeedStatus;\n /** Copy the accumulated stream buffer into a new ArrayBuffer (for Worker postMessage transfer). */\n getRawBuffer(): ArrayBuffer | null;\n /** Destroy the parser and free all resources. */\n destroy(): void;\n /** Async iteration over partial values when a source was provided. */\n [Symbol.asyncIterator](): AsyncIterableIterator<T | undefined>;\n}\n\n/** Zod-like schema type for createParser options. */\nexport type ZodLike<T> = { safeParse: (v: unknown) => { success: boolean; data?: T } };\n\n/** Options for createParser when using an options object. */\nexport interface CreateParserOptions<T = unknown> {\n /** Schema for validation on complete values. */\n schema?: ZodLike<T>;\n /** Stream source — makes the parser async-iterable via for-await. */\n source?: ReadableStream<Uint8Array> | AsyncIterable<Uint8Array | string>;\n}\n\nexport interface ParseResult {\n status: ParseStatus;\n value?: unknown;\n remaining?: Uint8Array;\n error?: string;\n /** Check if a value (object/array) from an incomplete parse is fully present in the original input. */\n isComplete(value: unknown): boolean;\n /** Full materialization via JSON.parse — fastest way to get a plain JS object tree. */\n toJSON(): unknown;\n}\n\n// --- EventParser Types ---\n\n/** Compiled path segment: string = key, number = index, '*' = wildcard */\nexport type PathSegment = string | number;\n\nexport interface PathEvent {\n type: 'value';\n path: string;\n value: unknown;\n offset: number;\n length: number;\n index?: number;\n key?: string;\n matches: (string | number)[];\n}\n\nexport interface DeltaEvent {\n type: 'delta';\n path: string;\n value: string;\n offset: number;\n length: number;\n}\n\nexport interface EventParser {\n on(path: string, callback: (event: PathEvent) => void): EventParser;\n on<T>(path: string, schema: { safeParse: (v: unknown) => { success: boolean; data?: T } }, callback: (event: PathEvent & { value: T }) => void): EventParser;\n onDelta(path: string, callback: (event: DeltaEvent) => void): EventParser;\n onText(callback: (text: string) => void): EventParser;\n off(path: string, callback?: Function): EventParser;\n feed(chunk: string | Uint8Array): FeedStatus;\n getValue(): unknown | undefined;\n getRemaining(): Uint8Array | null;\n getStatus(): FeedStatus;\n /** Copy the accumulated stream buffer into a new ArrayBuffer (for Worker postMessage transfer). */\n getRawBuffer(): ArrayBuffer | null;\n destroy(): void;\n /** Async iteration over partial values when a source was provided. */\n [Symbol.asyncIterator](): AsyncIterableIterator<unknown | undefined>;\n}\n\nexport interface VectorJSON {\n /**\n * Parse a JSON string or Uint8Array into a value.\n * Primitives (null, boolean, number) are returned directly as JS values.\n * Objects and arrays return Proxy objects — values materialize only when accessed.\n * Call .free() on the result to release resources immediately, or let\n * FinalizationRegistry handle it automatically when the Proxy is GC'd.\n */\n parse(input: string | Uint8Array): ParseResult;\n /**\n * Create a streaming parser for incremental JSON parsing.\n * Feed chunks as they arrive; only new bytes are processed per call.\n * Total work is O(N) regardless of how many chunks — no re-parsing.\n *\n * ```ts\n * const parser = vj.createParser();\n * for await (const chunk of stream) {\n * const status = parser.feed(chunk);\n * if (status === \"complete\" || status === \"end_early\") {\n * const value = parser.getValue();\n * // use value...\n * parser.destroy();\n * break;\n * }\n * }\n * ```\n */\n createParser(): StreamingParser;\n /**\n * Create a streaming parser with schema validation.\n * `getValue()` returns `undefined` when the schema rejects the value (same as incomplete).\n * T is auto-inferred from the schema — no manual `<T>` needed.\n *\n * ```ts\n * const parser = vj.createParser(z.object({ name: z.string() }));\n * parser.feed('{\"name\":\"Alice\"}');\n * parser.getValue(); // { name: string } | undefined\n * ```\n */\n createParser<T>(schema: ZodLike<T>): StreamingParser<T>;\n /**\n * Create a streaming parser with options: field picking, schema, and/or stream source.\n *\n * ```ts\n * // Pick specific fields + async iteration:\n * const parser = vj.createParser({\n * pick: [\"name\", \"age\"],\n * source: response.body,\n * });\n * for await (const partial of parser) {\n * console.log(partial); // only picked fields\n * }\n * ```\n */\n createParser<T = unknown>(options: CreateParserOptions<T>): StreamingParser<T>;\n /**\n * Deep-compare two values for structural equality.\n * When both values are VJ proxies, comparison happens entirely in WASM\n * (walks tapes in linear memory — zero JS allocations, zero Proxy traps).\n * Falls back to JSON.stringify comparison for plain JS objects.\n *\n * By default, object key order does not matter (`{\"a\":1,\"b\":2}` equals `{\"b\":2,\"a\":1}`).\n * Pass `{ ordered: true }` for faster key-order-sensitive comparison.\n */\n deepCompare(a: unknown, b: unknown, options?: { ignoreKeyOrder?: boolean }): boolean;\n /**\n * Eagerly materialize a lazy proxy into plain JS objects.\n * If the value is already a plain JS value, returns it as-is.\n */\n materialize(value: unknown): unknown;\n /**\n * Drop-in replacement for AI SDK partial JSON parsers.\n * Parses a potentially incomplete JSON string and returns a plain JS object.\n *\n * Compatible with Vercel AI SDK's `parsePartialJson` — returns `{ value, state }`\n * where state is \"successful-parse\", \"repaired-parse\", or \"failed-parse\".\n *\n * ```ts\n * // Drop-in for Vercel AI SDK:\n * const { value, state } = vj.parsePartialJson('{\"a\": 1, \"b\": ');\n * // value = { a: 1, b: null }, state = \"repaired-parse\"\n * ```\n */\n parsePartialJson(input: string): PartialJsonResult;\n /**\n * Parse partial JSON with schema-inferred types.\n * T is auto-inferred from the schema — no manual `<T>` needed.\n *\n * Returns `DeepPartial<T>` because incomplete JSON will have missing fields.\n * When `safeParse` succeeds, returns the validated `data`.\n * When `safeParse` fails on a repaired-parse, returns the raw parsed value\n * (typed as `DeepPartial<T>`) — the object is partial, that's expected.\n *\n * ```ts\n * const User = z.object({ name: z.string(), age: z.number() });\n * const { value, state } = vj.parsePartialJson('{\"name\":\"Al', User);\n * // value: { name?: string; age?: number } | undefined\n * // state: \"repaired-parse\"\n * ```\n */\n parsePartialJson<T>(input: string, schema: { safeParse: (v: unknown) => { success: boolean; data?: T } }): PartialJsonResult<DeepPartial<T>>;\n /**\n * Create an event-driven streaming parser with path subscriptions,\n * string delta emission, and JSON boundary detection.\n */\n createEventParser(options?: {\n source?: ReadableStream<Uint8Array> | AsyncIterable<Uint8Array | string>;\n schema?: { safeParse: (v: unknown) => { success: boolean; data?: unknown } };\n }): EventParser;\n}\n\n// --- Error codes from Zig engine ---\nconst ERROR_MESSAGES: Record<number, string> = {\n 1: \"Exceeded maximum nesting depth\",\n 2: \"Document exceeds maximum capacity\",\n 3: \"Invalid escape sequence\",\n 4: \"Invalid Unicode code point\",\n 5: \"Invalid number literal\",\n 6: \"Expected colon after key\",\n 7: \"Expected string key in object\",\n 8: \"Expected comma or closing bracket in array\",\n 9: \"Expected comma or closing brace in object\",\n 10: \"Incomplete array\",\n 11: \"Incomplete object\",\n 12: \"Unexpected trailing content\",\n 13: \"Out of memory\",\n 99: \"Unknown parse error\",\n};\n\n// --- Module types ---\n\ninterface EngineExports {\n memory: WebAssembly.Memory;\n alloc(size: number): number;\n dealloc(ptr: number, size: number): void;\n get_error_code(): number;\n doc_parse(ptr: number, len: number): number;\n doc_free(docId: number): void;\n doc_get_tag(docId: number, index: number): number;\n doc_get_number(docId: number, index: number): number;\n doc_read_string_raw(docId: number, index: number): number;\n doc_get_count(docId: number, index: number): number;\n doc_get_src_pos(docId: number, index: number): number;\n doc_get_close_index(docId: number, index: number): number;\n doc_find_field(docId: number, objIndex: number, keyPtr: number, keyLen: number): number;\n doc_get_input_ptr(docId: number): number;\n doc_batch_ptr(): number;\n doc_array_elements(docId: number, arrIndex: number, resumeAt: number): number;\n doc_object_keys(docId: number, objIndex: number, resumeAt: number): number;\n doc_deep_equal(doc_a: number, idx_a: number, doc_b: number, idx_b: number, ordered: number): number;\n stream_create(): number;\n stream_destroy(id: number): void;\n stream_feed(id: number, ptr: number, len: number): number;\n stream_get_status(id: number): number;\n stream_get_buffer_ptr(id: number): number;\n stream_get_value_len(id: number): number;\n stream_get_remaining_ptr(id: number): number;\n stream_get_remaining_len(id: number): number;\n stream_get_buffer_len(id: number): number;\n stream_get_buffer_cap(id: number): number;\n stream_reset_for_next(id: number): number;\n classify_input(ptr: number, len: number): number;\n autocomplete_input(ptr: number, len: number, buf_cap: number): number;\n get_value_end(): number;\n}\n\nconst utf8Decoder = new TextDecoder('utf-8');\n\n// Pre-computed byte→char table — avoids String.fromCharCode() calls in hot loops\nconst B2C: string[] = Array.from({ length: 256 }, (_, i) => String.fromCharCode(i));\n\nlet _instance: VectorJSON | null = null;\n\n/**\n * Initialize VectorJSON by loading and linking the WASM module.\n * Call this once; subsequent calls return the cached instance.\n */\nexport async function init(options?: {\n engineWasm?: string | URL | BufferSource;\n}): Promise<VectorJSON> {\n if (_instance) return _instance;\n\n // Load WASM bytes — embedded base64 by default, filesystem/URL/buffer when explicit\n let engineBytes: BufferSource;\n const wasmOpt = options?.engineWasm;\n if (wasmOpt instanceof ArrayBuffer || ArrayBuffer.isView(wasmOpt)) {\n engineBytes = wasmOpt as BufferSource;\n } else if (typeof wasmOpt === \"string\" || wasmOpt instanceof URL) {\n // Dynamic import for filesystem — only when user explicitly passes a path\n const { readFile } = await import(\"node:fs/promises\");\n const { fileURLToPath } = await import(\"node:url\");\n const path = typeof wasmOpt === \"string\" ? wasmOpt : fileURLToPath(wasmOpt);\n engineBytes = await readFile(path);\n } else {\n engineBytes = decodeBase64(wasmBase64).buffer as ArrayBuffer;\n }\n\n // --- Instantiate Zig engine ---\n const { instance: engineInstance } = await WebAssembly.instantiate(engineBytes as ArrayBuffer, {});\n const engine = engineInstance.exports as unknown as EngineExports;\n\n const encoder = new TextEncoder();\n\n // --- Reusable WASM buffers — grow-only, shared allocator pattern ---\n const inputBuf = { ptr: 0, cap: 0 };\n const keyBuf = { ptr: 0, cap: 0 };\n const feedBuf = { ptr: 0, cap: 0 };\n\n function ensureBuf(buf: typeof inputBuf, needed: number, minCap: number): number {\n if (needed <= buf.cap) return buf.ptr;\n if (buf.ptr !== 0) engine.dealloc(buf.ptr, buf.cap);\n let cap = buf.cap === 0 ? minCap : buf.cap;\n while (cap < needed) cap *= 2;\n buf.ptr = engine.alloc(cap) >>> 0;\n if (buf.ptr === 0) throw new Error(\"VectorJSON: allocation failed\");\n buf.cap = cap;\n return buf.ptr;\n }\n\n /** Encode string or copy Uint8Array into a reusable WASM buffer. Returns { ptr, len }. */\n function writeToWasm(\n input: string | Uint8Array, buf: typeof inputBuf, extraCap: number, minCap: number,\n ): { ptr: number; len: number } {\n if (typeof input === \"string\") {\n // Try optimistic allocation (1x for likely-ASCII), fall back to 3x for multi-byte\n let maxBytes = input.length + extraCap;\n let ptr = ensureBuf(buf, maxBytes, minCap);\n let result = encoder.encodeInto(input, new Uint8Array(engine.memory.buffer, ptr, maxBytes));\n if (result.read! < input.length) {\n // Input has multi-byte chars — reallocate with worst-case 3x\n maxBytes = input.length * 3 + extraCap;\n ptr = ensureBuf(buf, maxBytes, minCap);\n result = encoder.encodeInto(input, new Uint8Array(engine.memory.buffer, ptr, maxBytes));\n }\n return { ptr, len: result.written! };\n }\n const len = input.byteLength;\n const ptr = ensureBuf(buf, len + extraCap, minCap);\n new Uint8Array(engine.memory.buffer, ptr, len).set(input);\n return { ptr, len };\n }\n\n function writeKeyToMemory(key: string): { ptr: number; len: number } {\n if (key.length === 0) return { ptr: 1, len: 0 };\n return writeToWasm(key, keyBuf, 0, 256);\n }\n\n // --- Constants ---\n // Batch buffer address is a fixed global in WASM — cache to avoid repeated WASM calls\n const batchAddr = engine.doc_batch_ptr() >>> 0;\n\n const TAG_NULL = 0;\n const TAG_TRUE = 1;\n const TAG_FALSE = 2;\n const TAG_NUMBER = 3;\n const TAG_STRING = 4;\n const TAG_OBJECT = 5;\n const TAG_ARRAY = 6;\n\n const FEED_STATUS: readonly FeedStatus[] = [\"incomplete\", \"complete\", \"error\", \"end_early\"];\n const CLASSIFY_INCOMPLETE = 0; // FeedStatus.incomplete\n const CLASSIFY_ERR = 2; // FeedStatus.err\n const CLASSIFY_END_EARLY = 3; // FeedStatus.end_early\n\n // --- Sentinels ---\n const LAZY_PROXY = Symbol(\"vectorjson.lazy\");\n const UNCACHED = Symbol();\n\n // --- Explicit document disposal ---\n // Track generation per docId to prevent stale FinalizationRegistry callbacks\n // from freeing a reused slot. Each parse increments the generation.\n const docGenerations = new Map<number, number>();\n\n // --- FinalizationRegistry for auto-cleanup of document slots ---\n const docRegistry = new FinalizationRegistry(\n ({ docId, generation }: { docId: number; generation: number }) => {\n if (docGenerations.get(docId) !== generation) return; // stale callback\n docGenerations.delete(docId);\n docInputs.delete(docId);\n engine.doc_free(docId);\n },\n );\n\n /** Copy `count` u32 indices from the WASM batch buffer into a JS Uint32Array. */\n function copyBatchIndices(count: number): Uint32Array {\n const copy = new Uint32Array(count);\n copy.set(new Uint32Array(engine.memory.buffer, batchAddr, count));\n return copy;\n }\n\n /** Read all batch indices with pagination for >16384 items. */\n function readBatchPaginated(\n fn: (docId: number, idx: number, resume: number) => number,\n docId: number, idx: number,\n ): Uint32Array {\n const BATCH_CAP = 16384;\n let count = fn(docId, idx, 0);\n if (count < BATCH_CAP) return copyBatchIndices(count);\n const all: number[] = [];\n let page = copyBatchIndices(count);\n for (let i = 0; i < count; i++) all.push(page[i]);\n while (count === BATCH_CAP) {\n const resumeAt = new Uint32Array(engine.memory.buffer, batchAddr + BATCH_CAP * 4, 1)[0];\n count = fn(docId, idx, resumeAt);\n page = copyBatchIndices(count);\n for (let i = 0; i < count; i++) all.push(page[i]);\n }\n return new Uint32Array(all);\n }\n\n // --- Per-document original input tracking (for ASCII fast-path) ---\n // When input is a JS string and all chars are ASCII (byteLen === str.length),\n // we can slice the original string directly instead of reading WASM memory.\n const docInputs = new Map<number, string>();\n\n // --- Read a doc string at a tape index into a JS string ---\n // Strings are stored as source offsets into the original input.\n // The escape flag (batch_buffer[2]) tells us if decoding is needed,\n // avoiding a linear scan with includes('\\\\').\n function docReadString(docId: number, index: number): string {\n const rawLen = engine.doc_read_string_raw(docId, index) >>> 0;\n if (rawLen === 0) return \"\";\n\n const batch = new Uint32Array(engine.memory.buffer, batchAddr, 3);\n const srcOffset = batch[0];\n const hasEscapes = batch[2];\n\n // ASCII fast-path: if original JS string is available and was ASCII,\n // slice directly — no WASM memory read, no TextDecoder overhead.\n const asciiInput = docInputs.get(docId);\n if (asciiInput !== undefined) {\n const raw = asciiInput.slice(srcOffset, srcOffset + rawLen);\n return hasEscapes ? JSON.parse('\"' + raw + '\"') : raw;\n }\n\n const inputPtr = engine.doc_get_input_ptr(docId) >>> 0;\n const raw = utf8Decoder.decode(\n new Uint8Array(engine.memory.buffer, inputPtr + srcOffset, rawLen),\n );\n // has_escapes flag from SIMD skipString — no need for includes('\\\\')\n return hasEscapes ? JSON.parse('\"' + raw + '\"') : raw;\n }\n\n // --- Deep materialize from document tape ---\n // For containers (objects/arrays), slices the source span from WASM memory\n // and delegates to native JSON.parse — faster than recursive tape walking.\n // For primitives, reads directly from the tape.\n function deepMaterializeDoc(docId: number, index: number): unknown {\n const tag = engine.doc_get_tag(docId, index);\n if (tag === TAG_NULL) return null;\n if (tag === TAG_TRUE) return true;\n if (tag === TAG_FALSE) return false;\n if (tag === TAG_NUMBER) return engine.doc_get_number(docId, index);\n if (tag === TAG_STRING) return docReadString(docId, index);\n if (tag === TAG_OBJECT || tag === TAG_ARRAY) {\n // Get source span: opening bracket → closing bracket (inclusive)\n // doc_get_close_index returns one-past-end (simdjson convention for skipping).\n // The actual closing bracket is at closeIdx - 1.\n const startPos = (engine.doc_get_src_pos(docId, index) >>> 0);\n const closingTapeIdx = engine.doc_get_close_index(docId, index) - 1;\n const closePos = engine.doc_get_src_pos(docId, closingTapeIdx);\n const inputPtr = engine.doc_get_input_ptr(docId) >>> 0;\n const raw = new Uint8Array(\n engine.memory.buffer, inputPtr + startPos, closePos + 1 - startPos,\n );\n return JSON.parse(utf8Decoder.decode(raw));\n }\n return null;\n }\n\n /** Batch-read all element tape indices for an array (cached). */\n function batchElemIndices(target: any): Uint32Array {\n return target._e || (target._e = readBatchPaginated(engine.doc_array_elements, target._d, target._i));\n }\n\n /** Resolve a tape value: primitives return directly.\n * Objects: deep-materialize (complete parses) or Proxy (incomplete, for isComplete).\n * Arrays: always lazy Proxy. */\n function resolveValue(\n docId: number, index: number,\n keepAlive: object, generation: number,\n freeFn: (() => void) | undefined,\n proxyObjects = false,\n ): unknown {\n const tag = engine.doc_get_tag(docId, index);\n if (tag === TAG_NULL) return null;\n if (tag === TAG_TRUE) return true;\n if (tag === TAG_FALSE) return false;\n if (tag === TAG_NUMBER) return engine.doc_get_number(docId, index);\n if (tag === TAG_STRING) return docReadString(docId, index);\n\n // Objects: Proxy for incomplete parses (so isComplete can get tape index),\n // deep-materialize for complete parses (fast native property access).\n if (tag === TAG_OBJECT) {\n if (proxyObjects) {\n return new Proxy({ _d: docId, _i: index, _k: keepAlive, _g: generation, _f: freeFn } as any, docObjHandler);\n }\n return deepMaterializeDoc(docId, index);\n }\n\n // Arrays → lazy Proxy (materialize elements on access, cached)\n return new Proxy(\n Object.assign([], { _d: docId, _i: index, _k: keepAlive, _g: generation, _f: freeFn,\n _l: engine.doc_get_count(docId, index), _p: proxyObjects }),\n docArrHandler,\n );\n }\n\n // --- Shared Proxy handler for doc-backed array cursors ---\n const docArrHandler: ProxyHandler<any> = {\n get(target, prop, _receiver) {\n if (prop === 'free' || prop === Symbol.dispose) return target._f;\n if (prop === LAZY_PROXY) return target._m || (target._m = { docId: target._d, index: target._i });\n if (prop === 'length') return target._l;\n if (prop === Symbol.iterator) {\n const t = target; // single capture instead of 7 locals\n return function () {\n let i = 0;\n return {\n next() {\n if (i >= t._l) return { done: true as const, value: undefined };\n // Use indexed get to populate cache (avoids double-resolving)\n return { done: false as const, value: docArrHandler.get!(t, String(i++), t) };\n },\n };\n };\n }\n if (prop === Symbol.toStringTag) return \"Array\";\n if (typeof prop === 'string') {\n const idx = Number(prop);\n if (Number.isInteger(idx) && idx >= 0 && idx < target._l) {\n if (!target._c) target._c = new Array(target._l);\n if (target._c[idx] !== undefined) return target._c[idx];\n const indices = batchElemIndices(target);\n const val = resolveValue(target._d, indices[idx], target._k, target._g, target._f, target._p);\n target._c[idx] = val;\n return val;\n }\n if (prop in Array.prototype) {\n const materialized = deepMaterializeDoc(target._d, target._i) as unknown[];\n return (materialized as unknown as Record<string, unknown>)[prop];\n }\n }\n return undefined;\n },\n has(target, prop) {\n if (prop === LAZY_PROXY || prop === 'free' || prop === Symbol.dispose || prop === 'length') return true;\n if (typeof prop !== 'string') return false;\n const idx = Number(prop);\n return Number.isInteger(idx) && idx >= 0 && idx < target._l;\n },\n ownKeys(target) {\n const keys: string[] = [];\n for (let i = 0; i < target._l; i++) keys.push(String(i));\n keys.push('length');\n return keys;\n },\n getOwnPropertyDescriptor(target, prop) {\n if (prop === 'length') {\n return { value: target._l, writable: false, enumerable: false, configurable: false };\n }\n if (typeof prop === 'string') {\n const idx = Number(prop);\n if (Number.isInteger(idx) && idx >= 0 && idx < target._l) {\n return { value: this.get!(target, prop, target), writable: false, enumerable: true, configurable: true };\n }\n }\n return undefined;\n },\n };\n\n // --- Shared Proxy handler for doc-backed object proxies (incomplete parses) ---\n // doc_find_field compares raw source bytes against the key. For keys with\n // escape sequences (\\n, \\uXXXX), raw comparison fails — we fall back to\n // ownKeys iteration which properly decodes each key via docReadString.\n const docObjHandler: ProxyHandler<any> = {\n get(target, prop, _receiver) {\n if (prop === 'free' || prop === Symbol.dispose) return target._f;\n if (prop === LAZY_PROXY) return target._m || (target._m = { docId: target._d, index: target._i });\n if (typeof prop !== 'string') return prop === Symbol.toStringTag ? \"Object\" : undefined;\n if (!target._c) target._c = Object.create(null);\n if (prop in target._c) return target._c[prop];\n const { ptr, len } = writeKeyToMemory(prop);\n const valIdx = engine.doc_find_field(target._d, target._i, ptr, len);\n if (valIdx !== 0) {\n // Fast path: key matched raw source bytes (no escapes)\n const val = resolveValue(target._d, valIdx, target._k, target._g, target._f, true);\n target._c[prop] = val;\n return val;\n }\n // Fallback: escaped keys won't match raw bytes — iterate all keys\n const keys = this.ownKeys!(target) as string[];\n const keyIdx = keys.indexOf(prop);\n if (keyIdx === -1) return undefined;\n // Resolve value via cached key tape indices\n const val = resolveValue(target._d, target._ki[keyIdx] + 1, target._k, target._g, target._f, true);\n target._c[prop] = val;\n return val;\n },\n has(target, prop) {\n if (prop === LAZY_PROXY || prop === 'free' || prop === Symbol.dispose) return true;\n if (typeof prop !== 'string') return false;\n const { ptr, len } = writeKeyToMemory(prop);\n if (engine.doc_find_field(target._d, target._i, ptr, len) !== 0) return true;\n // Fallback for escaped keys\n const keys = this.ownKeys!(target) as string[];\n return keys.includes(prop);\n },\n ownKeys(target) {\n if (!target._keys) {\n const indices = readBatchPaginated(engine.doc_object_keys, target._d, target._i);\n target._ki = indices;\n target._keys = Array.from(indices, (idx) => docReadString(target._d, idx));\n }\n return target._keys;\n },\n getOwnPropertyDescriptor(target, prop) {\n if (typeof prop !== 'string') return undefined;\n // JSON cannot produce undefined — get() returning undefined means field not found\n const val = this.get!(target, prop, target);\n if (val === undefined) return undefined;\n return { value: val, writable: false, enumerable: true, configurable: true };\n },\n };\n\n // --- Check if a value is a lazy proxy ---\n function isLazyProxy(value: unknown): boolean {\n if (value === null || typeof value !== \"object\") return false;\n try { return LAZY_PROXY in (value as Record<symbol, unknown>); }\n catch { return false; }\n }\n\n // --- Build a value from a doc slot root (shared by parse + createParser) ---\n function buildDocRoot(docId: number, proxyObjects = false): unknown {\n const rootTag = engine.doc_get_tag(docId, 1);\n // Primitives: extract value and free doc immediately (no Proxy needed)\n if (rootTag <= TAG_STRING) {\n const value = rootTag === TAG_NULL ? null\n : rootTag === TAG_TRUE ? true\n : rootTag === TAG_FALSE ? false\n : rootTag === TAG_NUMBER ? engine.doc_get_number(docId, 1)\n : docReadString(docId, 1);\n docInputs.delete(docId);\n engine.doc_free(docId);\n return value;\n }\n // Containers: register for GC and wrap in Proxy with manual .free()\n const generation = (docGenerations.get(docId) ?? 0) + 1;\n docGenerations.set(docId, generation);\n const keepAlive = { docId };\n docRegistry.register(keepAlive, { docId, generation }, keepAlive);\n const freeFn = () => {\n void keepAlive; // prevent GC of sentinel\n if (docGenerations.get(docId) !== generation) return;\n docGenerations.delete(docId);\n docInputs.delete(docId);\n engine.doc_free(docId);\n docRegistry.unregister(keepAlive);\n };\n // Root always gets Proxy so .free() is accessible; force objects to Proxy for isComplete()\n return resolveValue(docId, 1, keepAlive, generation, freeFn, rootTag === TAG_OBJECT || proxyObjects);\n }\n\n // --- Helper: retry doc_parse with GC on slot exhaustion ---\n function tryDocParse(p: number, l: number): number {\n let docId = engine.doc_parse(p, l);\n if (docId < 0) {\n const errCode = engine.get_error_code();\n if (errCode === 2 || errCode === 13) {\n if (typeof globalThis.gc === \"function\") globalThis.gc();\n docId = engine.doc_parse(p, l);\n }\n }\n return docId;\n }\n\n // --- Helpers ---\n function isReadableStream(s: any): s is ReadableStream {\n return typeof s?.getReader === 'function';\n }\n\n // --- JSON Seeker Factory ---\n // Extracts a reusable state machine that skips non-JSON text (think tags, code fences, prose)\n // to find the start of JSON content. Used by both createEventParser and createParser.\n function createSeeker(textCallbacks?: ((text: string) => void)[]) {\n const SEEKING = 0, IN_THINK = 1, IN_FENCE = 2, FEEDING = 3;\n let state = SEEKING;\n let buf = '';\n let fenceBacktickCount = 0;\n\n return {\n feed(text: string): string | null {\n if (state === FEEDING) return text;\n\n const cbs = textCallbacks ?? [];\n let result = '';\n let i = 0;\n\n while (i < text.length) {\n if (state === FEEDING) {\n result += text.slice(i);\n break;\n }\n\n if (state === IN_THINK) {\n const closeIdx = text.indexOf('</think>', i);\n if (closeIdx === -1) {\n const captured = text.slice(i);\n for (const cb of cbs) cb(captured);\n i = text.length;\n } else {\n const captured = text.slice(i, closeIdx);\n if (captured) for (const cb of cbs) cb(captured);\n i = closeIdx + '</think>'.length;\n state = SEEKING;\n buf = '';\n }\n continue;\n }\n\n if (state === IN_FENCE) {\n const closeFence = '`'.repeat(fenceBacktickCount);\n const closeIdx = text.indexOf(closeFence, i);\n if (closeIdx === -1) {\n result += text.slice(i);\n i = text.length;\n } else {\n result += text.slice(i, closeIdx);\n i = closeIdx + fenceBacktickCount;\n fenceBacktickCount = 0;\n state = SEEKING;\n buf = '';\n }\n continue;\n }\n\n // SEEKING state\n const ch = text[i];\n\n if (ch === '{' || ch === '[' || ch === '\"') {\n if (buf) {\n for (const cb of cbs) cb(buf);\n buf = '';\n }\n state = FEEDING;\n result += text.slice(i);\n break;\n }\n\n // Check for <think> tag\n buf += ch;\n if (buf.endsWith('<think>')) {\n const beforeTag = buf.slice(0, -'<think>'.length);\n if (beforeTag) for (const cb of cbs) cb(beforeTag);\n state = IN_THINK;\n buf = '';\n i++;\n continue;\n }\n\n // Check for code fence (``` with optional label)\n if (ch === '`') {\n let btCount = 0;\n let j = i;\n while (j < text.length && text[j] === '`') { btCount++; j++; }\n if (btCount >= 3) {\n while (j < text.length && text[j] !== '\\n') j++;\n if (j < text.length) j++;\n fenceBacktickCount = btCount;\n state = IN_FENCE;\n const beforeFence = buf.slice(0, -1);\n if (beforeFence) for (const cb of cbs) cb(beforeFence);\n buf = '';\n i = j;\n continue;\n }\n }\n\n i++;\n\n if (buf.length > 1024) {\n for (const cb of cbs) cb(buf);\n buf = '';\n }\n }\n\n if (result.length > 0) return result;\n return null;\n },\n reset() { state = SEEKING; buf = ''; fenceBacktickCount = 0; },\n isFeeding() { return state === FEEDING; },\n };\n }\n\n // --- Path Pattern Compiler ---\n // Segments: string = key, number = index, '*' = wildcard\n\n function compilePath(pattern: string): PathSegment[] {\n return pattern.replace(/\\[(\\*|\\d+)\\]/g, '.$1').split('.').filter(Boolean)\n .map(s => s === '*' ? '*' : /^\\d+$/.test(s) ? +s : s);\n }\n\n /** Extract top-level keys from a Zod-like schema and return as compiled pick paths.\n * Supports Zod (.shape), Valibot (.entries), ArkType (.props).\n * Recursively extracts nested object keys for nested pick paths.\n * Returns null if schema shape can't be detected (no auto-pick). */\n function extractSchemaKeys(schema: any, prefix: string[] = []): PathSegment[][] | null {\n const shape = schema?.shape ?? schema?._def?.shape?.() ?? schema?.entries ?? schema?.props;\n if (!shape || typeof shape !== 'object') return null;\n const paths: PathSegment[][] = [];\n for (const key of Object.keys(shape)) {\n const fullPath = [...prefix, key];\n // Check if this field's schema has nested shape (nested object)\n const fieldSchema = shape[key];\n const nested = extractSchemaKeys(fieldSchema, fullPath);\n if (nested && nested.length > 0) {\n paths.push(...nested);\n } else {\n paths.push(fullPath.map(s => /^\\d+$/.test(s) ? +s : s));\n }\n }\n return paths.length > 0 ? paths : null;\n }\n\n function buildResolvedPath(keyStack: (string | null)[], indexStack: (number | null)[], depth: number): string {\n const parts: string[] = [];\n for (let i = 0; i < depth; i++) {\n if (keyStack[i] !== null) parts.push(keyStack[i]!);\n else if (indexStack[i] !== null) parts.push(String(indexStack[i]));\n }\n return parts.join('.');\n }\n\n // --- Public API ---\n _instance = {\n parse(input: string | Uint8Array): ParseResult {\n // Write input into reusable WASM buffer with extra headroom for autocomplete\n const { ptr, len } = writeToWasm(input, inputBuf, 64, 4096);\n // Pad after input for SIMD safety\n new Uint8Array(engine.memory.buffer, ptr + len, 64).fill(0x20);\n\n // Helper: build ParseResult with isComplete() and toJSON()\n const makeResult = (\n status: ParseStatus,\n value: unknown,\n autocompleteBoundary: number,\n toJSONStr: string | undefined,\n remaining?: Uint8Array,\n error?: string,\n ): ParseResult => {\n let _toJSONCache: unknown = UNCACHED;\n return {\n status,\n value,\n remaining,\n error,\n isComplete(val: unknown): boolean {\n if (autocompleteBoundary === Infinity) return true;\n if (val === null || val === undefined || typeof val !== \"object\") return true;\n try {\n const handle = (val as any)[LAZY_PROXY] as { docId?: number; index?: number } | undefined;\n if (!handle || typeof handle.docId !== \"number\") return true;\n const tag = engine.doc_get_tag(handle.docId, handle.index!);\n if (tag === TAG_OBJECT || tag === TAG_ARRAY) {\n const closeIdx = engine.doc_get_close_index(handle.docId, handle.index!);\n const closeSrcPos = engine.doc_get_src_pos(handle.docId, closeIdx) >>> 0;\n return closeSrcPos < autocompleteBoundary;\n }\n return true;\n } catch {\n return true; // fail-safe: freed doc → treat as complete\n }\n },\n toJSON(): unknown {\n if (_toJSONCache !== UNCACHED) return _toJSONCache;\n return (_toJSONCache = toJSONStr !== undefined ? JSON.parse(toJSONStr) : value);\n },\n };\n };\n\n // Helper: build an invalid ParseResult from the last engine error code\n const invalidResult = (msg?: string): ParseResult => {\n if (!msg) {\n const code = engine.get_error_code();\n msg = `VectorJSON: ${ERROR_MESSAGES[code] || `Parse error (code ${code})`}`;\n }\n return makeResult(\"invalid\", undefined, Infinity, undefined, undefined, msg);\n };\n\n // Track whether input is an ASCII JS string (byteLen === str.length).\n // If so, docReadString can slice the original string directly.\n const isAsciiStr = typeof input === \"string\" && len === input.length;\n\n // ── Happy path: try doc_parse directly (no classify overhead) ──\n let docId = tryDocParse(ptr, len);\n if (docId >= 0) {\n if (isAsciiStr) docInputs.set(docId, input as string);\n // For string input at full length, reuse the original string (avoids decode)\n const toJSONStr = typeof input === \"string\" ? input\n : utf8Decoder.decode(new Uint8Array(engine.memory.buffer, ptr, len));\n return makeResult(\"complete\", buildDocRoot(docId), Infinity, toJSONStr);\n }\n\n // ── doc_parse failed — classify to determine why ──\n const classification = engine.classify_input(ptr, len);\n\n if (classification === CLASSIFY_ERR) {\n return invalidResult(\"Invalid JSON structure\");\n }\n\n if (classification === CLASSIFY_END_EARLY) {\n const parseLen = engine.get_value_end();\n const remainLen = len - parseLen;\n const remainingCopy = new Uint8Array(remainLen);\n remainingCopy.set(new Uint8Array(engine.memory.buffer, ptr + parseLen, remainLen));\n new Uint8Array(engine.memory.buffer, ptr + parseLen, 64).fill(0x20);\n\n const toJSONStr = utf8Decoder.decode(new Uint8Array(engine.memory.buffer, ptr, parseLen));\n docId = tryDocParse(ptr, parseLen);\n if (docId >= 0) {\n if (isAsciiStr) docInputs.set(docId, input as string);\n return makeResult(\"complete_early\", buildDocRoot(docId), Infinity, toJSONStr, remainingCopy);\n }\n return invalidResult();\n }\n\n if (classification === CLASSIFY_INCOMPLETE) {\n const parseLen = engine.autocomplete_input(ptr, len, inputBuf.cap);\n if (parseLen === 0) {\n if (len === 0) return makeResult(\"incomplete\", undefined, len, undefined);\n return invalidResult(\"Invalid JSON structure\");\n }\n const toJSONStr = utf8Decoder.decode(new Uint8Array(engine.memory.buffer, ptr, parseLen));\n docId = tryDocParse(ptr, parseLen);\n if (docId >= 0) {\n // Don't use ASCII fast-path for incomplete: autocomplete appended\n // closing tokens that aren't in the original JS string.\n return makeResult(\"incomplete\", buildDocRoot(docId, true), len, toJSONStr);\n }\n return invalidResult();\n }\n\n return invalidResult();\n },\n\n deepCompare(a: unknown, b: unknown, options?: { ignoreKeyOrder?: boolean }): boolean {\n const ordered = (options?.ignoreKeyOrder === false) ? 1 : 0;\n\n // Fast path: both are VJ proxies → WASM tape comparison.\n // Single [LAZY_PROXY] access per arg (1 Proxy get trap) instead of\n // isLazyProxy + [LAZY_PROXY] (has trap + get trap + object allocation × 2).\n if (a !== null && typeof a === \"object\" && b !== null && typeof b === \"object\") {\n try {\n const metaA = (a as any)[LAZY_PROXY] as { docId: number; index: number } | undefined;\n const metaB = (b as any)[LAZY_PROXY] as { docId: number; index: number } | undefined;\n if (metaA && metaB) {\n const result = engine.doc_deep_equal(metaA.docId, metaA.index, metaB.docId, metaB.index, ordered);\n if (result >= 0) return result === 1;\n // fallthrough on error (-1 = invalid doc_id)\n }\n } catch { /* not a proxy, fall through */ }\n }\n\n // Fallback: materialize and compare with JSON round-trip\n return JSON.stringify(a) === JSON.stringify(b);\n },\n\n materialize(value: unknown): unknown {\n if (!isLazyProxy(value)) return value;\n const { docId, index } = (value as any)[LAZY_PROXY];\n return deepMaterializeDoc(docId, index);\n },\n\n parsePartialJson(input: string, schema?: { safeParse: (v: unknown) => { success: boolean; data?: unknown } }): PartialJsonResult {\n if (!input) return { value: undefined, state: \"failed-parse\" as const };\n const result = _instance!.parse(input);\n switch (result.status) {\n case \"complete\":\n case \"complete_early\": {\n const value = result.toJSON();\n if (schema) {\n const validated = schema.safeParse(value);\n if (validated.success) return { value: validated.data, state: \"successful-parse\" as const };\n return { value: undefined, state: \"successful-parse\" as const };\n }\n return { value, state: \"successful-parse\" as const };\n }\n case \"incomplete\": {\n const value = result.toJSON();\n if (schema) {\n const validated = schema.safeParse(value);\n if (validated.success) return { value: validated.data, state: \"repaired-parse\" as const };\n // Partial JSON: safeParse fails (missing fields expected) → keep raw value\n return { value, state: \"repaired-parse\" as const };\n }\n return { value, state: \"repaired-parse\" as const };\n }\n default:\n return { value: undefined, state: \"failed-parse\" as const };\n }\n },\n\n createEventParser(options?: {\n source?: ReadableStream<Uint8Array> | AsyncIterable<Uint8Array | string>;\n schema?: { safeParse: (v: unknown) => { success: boolean; data?: unknown } };\n }): EventParser {\n const source = options?.source;\n\n // Schema-driven field selection + validation (same as createParser)\n const epSchema = options?.schema;\n let epPickPaths: PathSegment[][] | null = null;\n if (options?.schema) {\n epPickPaths = extractSchemaKeys(options.schema);\n }\n\n const streamId = engine.stream_create();\n if (streamId < 0) {\n throw new Error(\"VectorJSON: Failed to create event parser (max 4 concurrent)\");\n }\n\n let destroyed = false;\n\n // --- Subscription storage ---\n type Sub = { segments: PathSegment[]; callback: Function; schema?: { safeParse: Function } };\n const pathSubs: Sub[] = [];\n const deltaSubs: Sub[] = [];\n const textCallbacks: ((text: string) => void)[] = [];\n\n // --- JSON Seeker (reusable factory) ---\n const seeker = createSeeker(textCallbacks);\n\n // --- PathTracker state ---\n let ptDepth = 0;\n let ptInString = false;\n let ptEscapeNext = false;\n let ptContextStack: ('o' | 'a')[] = []; // object or array at each level\n let ptKeyStack: (string | null)[] = []; // current key at each depth\n let ptIndexStack: (number | null)[] = []; // current array index at each depth\n let ptValueStartStack: number[] = []; // byte offset where value started\n let ptSkipDepth = -1; // if >= 0, we're inside a skipped path\n let ptExpectingKey = false;\n let ptAfterColon = false;\n let ptKeyAccum = '';\n let ptAccumulatingKey = false;\n let ptStringValueStart = -1;\n let ptInStringValue = false;\n let ptDeltaAccum = '';\n let ptDeltaByteStart = 0; // byte offset where current delta accumulation started\n let ptInScalar = false; // tracking a scalar that may span chunks\n let ptScalarStart = -1; // byte offset where current scalar started\n\n // --- Live document builder ---\n // Incrementally builds a JS object/array as bytes are scanned.\n // getValue() returns this growing object. O(n) total materialization.\n let ldRoot: unknown = undefined; // the growing root value\n let ldStack: (Record<string, unknown> | unknown[])[] = []; // container stack\n let ldCurrentKey: string | null = null; // pending key for object assignment\n let ldActiveKey: string | null = null; // key used for current string being updated\n let ldStringAccum = ''; // accumulating string value\n let ldInStringValue = false; // currently inside a string value\n let ldScalarAccum = ''; // accumulating scalar chars\n\n function ldSetValue(value: unknown) {\n if (ldStack.length === 0) {\n ldRoot = value;\n return;\n }\n const parent = ldStack[ldStack.length - 1];\n if (Array.isArray(parent)) {\n parent.push(value);\n } else if (ldCurrentKey !== null) {\n parent[ldCurrentKey] = value;\n ldActiveKey = ldCurrentKey; // remember key for in-place updates\n ldCurrentKey = null;\n }\n }\n\n // Update a string/scalar value in-place (for partial strings being built)\n function ldUpdateString(str: string) {\n if (ldStack.length === 0) {\n ldRoot = str;\n return;\n }\n const parent = ldStack[ldStack.length - 1];\n if (Array.isArray(parent)) {\n if (parent.length > 0) parent[parent.length - 1] = str;\n else parent.push(str);\n } else if (ldActiveKey !== null) {\n parent[ldActiveKey] = str;\n }\n }\n\n function ldReset() {\n ldRoot = undefined;\n ldStack.length = 0;\n ldCurrentKey = null;\n ldActiveKey = null;\n ldStringAccum = '';\n ldInStringValue = false;\n ldScalarAccum = '';\n }\n\n function ptReset() {\n ptDepth = 0; ptInString = false; ptEscapeNext = false;\n ptContextStack.length = 0; ptKeyStack.length = 0;\n ptIndexStack.length = 0; ptValueStartStack.length = 0;\n ptSkipDepth = -1; ptExpectingKey = false; ptAfterColon = false;\n ptKeyAccum = ''; ptAccumulatingKey = false;\n ptStringValueStart = -1; ptInStringValue = false;\n ptDeltaAccum = ''; ptDeltaByteStart = 0;\n ptInScalar = false; ptScalarStart = -1;\n ldReset();\n }\n\n /** Unified path matcher: exact = segments.length must equal depth, prefix = <= depth.\n * Returns wildcard matches on success, null on failure. */\n function matchPath(segments: PathSegment[], exact: boolean): (string | number)[] | null {\n const len = segments.length;\n if (exact ? len !== ptDepth : len > ptDepth) return null;\n const matches: (string | number)[] = [];\n for (let s = 0; s < len; s++) {\n const seg = segments[s];\n const key = ptKeyStack[s], idx = ptIndexStack[s];\n if (seg === '*') matches.push(idx !== null ? idx : (key ?? ''));\n else if (typeof seg === 'number' ? idx !== seg : key !== seg) return null;\n }\n return matches;\n }\n\n function isPathSkipped(): boolean {\n if (epPickPaths && !epIsFieldPicked()) return true;\n return false;\n }\n\n /** Check if current path matches any pick path (array-transparent). */\n function epIsFieldPicked(): boolean {\n if (!epPickPaths) return true;\n // Build effective key path (skip array levels)\n const effective: string[] = [];\n for (let i = 0; i < ptDepth; i++) {\n if (ptKeyStack[i] !== null) effective.push(ptKeyStack[i]!);\n }\n for (const pick of epPickPaths) {\n const pickLen = pick.length;\n const effLen = effective.length;\n const compareLen = Math.min(effLen, pickLen);\n let matched = true;\n for (let i = 0; i < compareLen; i++) {\n const seg = pick[i];\n if (seg === '*') continue;\n if (typeof seg === 'number') continue;\n if (effective[i] !== seg) { matched = false; break; }\n }\n if (matched) return true;\n }\n return false;\n }\n\n function fireValueComplete(valueBytes: Uint8Array, offset: number, length: number) {\n if (pathSubs.length === 0) return;\n const resolvedPath = buildResolvedPath(ptKeyStack, ptIndexStack, ptDepth);\n for (const sub of pathSubs) {\n const matches = matchPath(sub.segments, true);\n if (!matches) continue;\n let value: unknown;\n try { value = JSON.parse(utf8Decoder.decode(valueBytes)); } catch { continue; }\n if (sub.schema) {\n const result = sub.schema.safeParse(value);\n if (!result.success) continue;\n value = result.data;\n }\n const event: PathEvent = { type: 'value', path: resolvedPath, value, offset, length, matches };\n for (let i = matches.length - 1; i >= 0; i--) {\n const m = matches[i];\n if (typeof m === 'number' && event.index === undefined) event.index = m;\n if (typeof m === 'string' && event.key === undefined) event.key = m;\n }\n sub.callback(event as any);\n }\n }\n\n function fireDelta(value: string, offset: number, length: number) {\n if (deltaSubs.length === 0) return;\n const resolvedPath = buildResolvedPath(ptKeyStack, ptIndexStack, ptDepth);\n for (const sub of deltaSubs) {\n if (!matchPath(sub.segments, true)) continue;\n sub.callback({ type: 'delta', path: resolvedPath, value, offset, length });\n }\n }\n\n function ptScan(buf: Uint8Array, from: number, to: number) {\n for (let i = from; i < to; i++) {\n const c = buf[i];\n\n // Check if we're continuing a scalar from a previous chunk\n if (ptInScalar) {\n if (c === 0x2C || c === 0x7D || c === 0x5D || c === 0x20 || c === 0x0A || c === 0x0D || c === 0x09) {\n // Scalar ended — fire value complete for the whole span\n const scalarLen = i - ptScalarStart;\n fireValueComplete(buf.slice(ptScalarStart, i), ptScalarStart, scalarLen);\n // Live doc: finalize scalar\n try { ldSetValue(JSON.parse(ldScalarAccum)); } catch { ldSetValue(null); }\n ldScalarAccum = '';\n ptInScalar = false;\n ptScalarStart = -1;\n // Re-process this delimiter char (it may be comma/close bracket)\n i--;\n continue;\n }\n // Still inside the scalar, keep scanning\n ldScalarAccum += B2C[c];\n continue;\n }\n\n if (ptEscapeNext) {\n ptEscapeNext = false;\n if (ptInStringValue && ptSkipDepth < 0) {\n // Decode escape for delta\n let decoded: string;\n switch (c) {\n case 0x6E: decoded = '\\n'; break; // n\n case 0x72: decoded = '\\r'; break; // r\n case 0x74: decoded = '\\t'; break; // t\n case 0x22: decoded = '\"'; break; // \"\n case 0x5C: decoded = '\\\\'; break; // \\\n case 0x2F: decoded = '/'; break; // /\n case 0x62: decoded = '\\b'; break; // b\n case 0x66: decoded = '\\f'; break; // f\n default: decoded = B2C[c]; break;\n }\n ptDeltaAccum += decoded;\n // Live doc: accumulate decoded escape char (batched — flushed at string close or chunk end)\n if (ldInStringValue) {\n ldStringAccum += decoded;\n }\n if (ptAccumulatingKey) ptKeyAccum += decoded;\n } else if (ptAccumulatingKey) {\n ptKeyAccum += B2C[c];\n }\n continue;\n }\n\n if (ptInString) {\n if (c === 0x5C) { // backslash\n ptEscapeNext = true;\n continue;\n }\n if (c === 0x22) { // closing quote\n ptInString = false;\n if (ptAccumulatingKey) {\n ptAccumulatingKey = false;\n // Store key at parent depth (ptDepth-1) since we're inside the container\n if (ptDepth > 0) ptKeyStack[ptDepth - 1] = ptKeyAccum;\n // Live doc: store key for next value assignment\n ldCurrentKey = ptKeyAccum;\n ptKeyAccum = '';\n continue;\n }\n // End of string value\n if (ptInStringValue && ptSkipDepth < 0) {\n // Flush final delta — use tracked byte offsets, not decoded char count\n if (ptDeltaAccum && deltaSubs.length > 0) {\n const deltaByteLen = i - ptDeltaByteStart; // raw bytes from start to closing quote\n fireDelta(ptDeltaAccum, ptDeltaByteStart, deltaByteLen);\n }\n ptDeltaAccum = '';\n // Fire value complete for the string\n const start = ptStringValueStart;\n const len = i + 1 - start;\n fireValueComplete(buf.slice(start, i + 1), start, len);\n // Live doc: final update (value already in parent from ldSetValue('') at open)\n ldUpdateString(ldStringAccum);\n ldStringAccum = '';\n ldInStringValue = false;\n }\n ptInStringValue = false;\n ptStringValueStart = -1;\n continue;\n }\n // Regular string character\n if (ptInStringValue && ptSkipDepth < 0) {\n const ch = B2C[c];\n ptDeltaAccum += ch;\n // Live doc: accumulate string char (batched — flushed at string close or chunk end)\n if (ldInStringValue) ldStringAccum += ch;\n if (ptAccumulatingKey) ptKeyAccum += ch;\n } else if (ptAccumulatingKey) {\n ptKeyAccum += B2C[c];\n }\n continue;\n }\n\n // Not in string\n switch (c) {\n case 0x7B: { // {\n ptContextStack[ptDepth] = 'o';\n ptKeyStack[ptDepth] = null;\n ptIndexStack[ptDepth] = null;\n ptValueStartStack[ptDepth] = i;\n ptDepth++;\n ptExpectingKey = true;\n ptAfterColon = false;\n // Check if we should skip this depth\n if (ptSkipDepth < 0 && isPathSkipped()) {\n ptSkipDepth = ptDepth - 1;\n }\n // Live doc: create object and push to stack (only if not skipped)\n if (ptSkipDepth < 0) {\n const obj: Record<string, unknown> = {};\n ldSetValue(obj);\n ldStack.push(obj);\n }\n break;\n }\n case 0x5B: { // [\n ptContextStack[ptDepth] = 'a';\n ptKeyStack[ptDepth] = null;\n ptIndexStack[ptDepth] = 0;\n ptValueStartStack[ptDepth] = i;\n ptDepth++;\n ptExpectingKey = false;\n ptAfterColon = false;\n if (ptSkipDepth < 0 && isPathSkipped()) {\n ptSkipDepth = ptDepth - 1;\n }\n // Live doc: create array and push to stack (only if not skipped)\n if (ptSkipDepth < 0) {\n const arr: unknown[] = [];\n ldSetValue(arr);\n ldStack.push(arr);\n }\n break;\n }\n case 0x7D: // }\n case 0x5D: { // ]\n ptDepth--;\n const wasSkipped = ptSkipDepth >= 0;\n if (wasSkipped && ptDepth <= ptSkipDepth) {\n ptSkipDepth = -1;\n }\n // Fire value complete for the container (only if not exiting a skipped path)\n if (ptDepth >= 0 && ptSkipDepth < 0 && !wasSkipped) {\n const start = ptValueStartStack[ptDepth];\n const len = i + 1 - start;\n fireValueComplete(buf.slice(start, i + 1), start, len);\n }\n // Restore parent context\n if (ptDepth > 0) {\n const parentCtx = ptContextStack[ptDepth - 1];\n ptExpectingKey = parentCtx === 'o';\n ptAfterColon = false;\n }\n // Live doc: pop container from stack\n if (ptSkipDepth < 0) {\n ldStack.pop();\n }\n break;\n }\n case 0x22: { // opening quote\n ptInString = true;\n if (ptExpectingKey && ptSkipDepth < 0) {\n // Start accumulating key\n ptAccumulatingKey = true;\n ptKeyAccum = '';\n } else if (ptAfterColon || ptDepth === 0 || (ptDepth > 0 && ptContextStack[ptDepth - 1] === 'a')) {\n // String value — only track if not in a skipped path\n if (ptSkipDepth < 0 && !isPathSkipped()) {\n ptInStringValue = true;\n ptStringValueStart = i;\n ptDeltaAccum = '';\n ptDeltaByteStart = i + 1; // byte after opening quote\n // Live doc: start string value accumulation\n ldStringAccum = '';\n ldInStringValue = true;\n // Push an empty string as placeholder so updates work\n ldSetValue('');\n }\n ptAfterColon = false;\n }\n break;\n }\n case 0x3A: { // colon\n ptExpectingKey = false;\n ptAfterColon = true;\n // Check pick filter after key is stored\n if (epPickPaths && ptSkipDepth < 0 && !epIsFieldPicked()) {\n ptSkipDepth = ptDepth - 1;\n ldCurrentKey = null;\n break;\n }\n // Live doc: pre-set null for pending key (overwritten when real value arrives)\n if (ptSkipDepth < 0 && ldCurrentKey !== null && ldStack.length > 0) {\n const parent = ldStack[ldStack.length - 1];\n if (!Array.isArray(parent)) {\n (parent as Record<string, unknown>)[ldCurrentKey] = null;\n ldActiveKey = ldCurrentKey;\n }\n }\n break;\n }\n case 0x2C: { // comma\n // Reset pick-based skip at comma boundary\n if (epPickPaths && ptSkipDepth >= 0 && ptDepth - 1 <= ptSkipDepth) {\n ptSkipDepth = -1;\n }\n // In array: increment index\n if (ptDepth > 0 && ptContextStack[ptDepth - 1] === 'a') {\n const idx = ptIndexStack[ptDepth - 1];\n ptIndexStack[ptDepth - 1] = (idx ?? -1) + 1;\n // Check skip for new array index\n if (ptSkipDepth < 0 && isPathSkipped()) {\n ptSkipDepth = ptDepth - 1;\n }\n }\n // In object: expect next key\n if (ptDepth > 0 && ptContextStack[ptDepth - 1] === 'o') {\n ptExpectingKey = true;\n ptKeyStack[ptDepth - 1] = null;\n }\n ptAfterColon = false;\n break;\n }\n default: {\n // Scalar values (numbers, true, false, null)\n if (ptAfterColon || ptDepth === 0 || (ptDepth > 0 && ptContextStack[ptDepth - 1] === 'a')) {\n if (c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x74 || c === 0x66 || c === 0x6E) {\n // Find end of scalar\n if (ptSkipDepth < 0 && !isPathSkipped()) {\n let j = i + 1;\n while (j < to) {\n const sc = buf[j];\n if (sc === 0x2C || sc === 0x7D || sc === 0x5D || sc === 0x20 || sc === 0x0A || sc === 0x0D || sc === 0x09) break;\n j++;\n }\n if (j < to) {\n // Complete scalar within this chunk\n fireValueComplete(buf.slice(i, j), i, j - i);\n // Live doc: parse and set scalar value\n const scalarStr = utf8Decoder.decode(buf.slice(i, j));\n try { ldSetValue(JSON.parse(scalarStr)); } catch { ldSetValue(null); }\n i = j - 1; // -1 because loop will increment\n } else {\n // Scalar extends past this chunk — track it\n ptInScalar = true;\n ptScalarStart = i;\n ldScalarAccum = utf8Decoder.decode(buf.slice(i, to));\n i = to; // skip to end, will resume on next feed\n }\n }\n ptAfterColon = false;\n }\n }\n break;\n }\n }\n }\n\n // Flush accumulated string to live doc parent (batched update)\n if (ldInStringValue && ldStringAccum) {\n ldUpdateString(ldStringAccum);\n }\n\n // Flush accumulated deltas at end of each feed for in-progress strings\n // This ensures onDelta fires incrementally per feed(), not just at string close\n if (ptInStringValue && ptDeltaAccum.length > 0 && ptSkipDepth < 0 && deltaSubs.length > 0) {\n fireDelta(ptDeltaAccum, ptDeltaByteStart, to - ptDeltaByteStart);\n ptDeltaAccum = '';\n ptDeltaByteStart = to;\n }\n }\n\n // --- EventParser object ---\n const self: EventParser = {\n on(path: string, ...args: any[]): EventParser {\n let schema: { safeParse: Function } | undefined;\n let callback: (event: PathEvent) => void;\n if (args.length === 2 && typeof args[0] === 'object' && args[0] !== null && 'safeParse' in args[0]) {\n schema = args[0];\n callback = args[1];\n } else {\n callback = args[0];\n }\n pathSubs.push({ segments: compilePath(path), callback, schema });\n return self;\n },\n\n onDelta(path: string, callback: (event: DeltaEvent) => void): EventParser {\n deltaSubs.push({ segments: compilePath(path), callback });\n return self;\n },\n\n onText(callback: (text: string) => void): EventParser {\n textCallbacks.push(callback);\n return self;\n },\n\n\n off(path: string, callback?: Function): EventParser {\n const compiled = compilePath(path);\n const eq = (a: PathSegment[], b: PathSegment[]) =>\n a.length === b.length && a.every((s, i) => s === b[i]);\n const remove = (subs: Sub[]) => {\n for (let i = subs.length - 1; i >= 0; i--) {\n if (eq(subs[i].segments, compiled) && (!callback || subs[i].callback === callback))\n subs.splice(i, 1);\n }\n };\n remove(pathSubs);\n remove(deltaSubs);\n return self;\n },\n\n feed(chunk: string | Uint8Array): FeedStatus {\n if (destroyed) throw new Error(\"EventParser already destroyed\");\n\n // Run through JSON seeker first\n let jsonContent: string | Uint8Array | null;\n if (typeof chunk === 'string') {\n jsonContent = seeker.feed(chunk);\n if (jsonContent === null) return FEED_STATUS[engine.stream_get_status(streamId)]!;\n } else if (seeker.isFeeding()) {\n // Fast path: skip string conversion when seeker is already feeding JSON\n jsonContent = chunk;\n } else {\n const str = utf8Decoder.decode(chunk);\n const result = seeker.feed(str);\n if (result === null) return FEED_STATUS[engine.stream_get_status(streamId)]!;\n jsonContent = encoder.encode(result);\n }\n\n // Feed to WASM stream\n const { ptr, len } = writeToWasm(jsonContent, feedBuf, 0, 4096);\n const prevLen = engine.stream_get_buffer_len(streamId);\n const status = engine.stream_feed(streamId, ptr, len);\n const newLen = engine.stream_get_buffer_len(streamId);\n\n // Scan new bytes with PathTracker (always runs — needed for live document builder)\n if (newLen > prevLen) {\n const bufPtr = (engine.stream_get_buffer_ptr(streamId) >>> 0);\n // For end_early/complete: only scan up to the value boundary\n const scanEnd = (status === 1 || status === 3)\n ? Math.min(newLen, engine.stream_get_value_len(streamId))\n : newLen;\n if (scanEnd > prevLen) {\n const wasmBuf = new Uint8Array(engine.memory.buffer, bufPtr, scanEnd);\n ptScan(wasmBuf, prevLen, scanEnd);\n }\n // Finalize pending scalar on complete/end_early\n if ((status === 1 || status === 3) && ptInScalar && ldScalarAccum) {\n try { ldSetValue(JSON.parse(ldScalarAccum)); } catch { ldSetValue(null); }\n ldScalarAccum = '';\n ptInScalar = false;\n ptScalarStart = -1;\n }\n }\n\n const feedStatus = FEED_STATUS[status] || \"error\";\n\n return feedStatus;\n },\n\n getValue(): unknown | undefined {\n if (destroyed) throw new Error(\"EventParser already destroyed\");\n const status = engine.stream_get_status(streamId);\n if (status === 2) throw new SyntaxError(\"VectorJSON: Parse error in stream\");\n\n if (status === 0) {\n // incomplete — return the incrementally-built live document\n let value: unknown = ldRoot;\n\n // Handle pending values not yet committed to ldRoot\n if (ptInScalar && ldScalarAccum) {\n const partial = ldScalarAccum;\n const completed = partial.startsWith('t') ? 'true'\n : partial.startsWith('f') ? 'false'\n : partial.startsWith('n') ? 'null'\n : partial;\n try {\n const parsed = JSON.parse(completed);\n if (ldStack.length === 0) value = parsed;\n } catch { /* leave as-is */ }\n } else if (ldInStringValue && ldStack.length === 0) {\n value = ldStringAccum;\n }\n\n if (value === undefined) return undefined;\n return value;\n }\n\n // complete or end_early\n let value: unknown;\n if (epPickPaths) {\n // Pick active — return the filtered live doc\n value = ldRoot;\n } else {\n // Full WASM parse for correctness\n const bufPtr = (engine.stream_get_buffer_ptr(streamId) >>> 0);\n const valueLen = engine.stream_get_value_len(streamId);\n new Uint8Array(engine.memory.buffer, bufPtr + valueLen, 64).fill(0x20);\n const docId = engine.doc_parse(bufPtr, valueLen);\n if (docId < 0) {\n const errorCode = engine.get_error_code();\n const msg = ERROR_MESSAGES[errorCode] || `Parse error (code ${errorCode})`;\n throw new SyntaxError(`VectorJSON: ${msg}`);\n }\n value = buildDocRoot(docId);\n }\n // Schema validation on complete\n if (epSchema) {\n const result = epSchema.safeParse(value);\n if (!result.success) return undefined;\n return result.data;\n }\n return value;\n },\n\n getRemaining(): Uint8Array | null {\n if (destroyed) return null;\n const rPtr = (engine.stream_get_remaining_ptr(streamId) >>> 0);\n const rLen = engine.stream_get_remaining_len(streamId);\n if (rLen > 0) {\n const copy = new Uint8Array(rLen);\n copy.set(new Uint8Array(engine.memory.buffer, rPtr, rLen));\n return copy;\n }\n return null;\n },\n\n getStatus(): FeedStatus {\n if (destroyed) return \"error\";\n return FEED_STATUS[engine.stream_get_status(streamId)] || \"error\";\n },\n\n getRawBuffer(): ArrayBuffer | null {\n if (destroyed) return null;\n const bufPtr = engine.stream_get_buffer_ptr(streamId) >>> 0;\n const bufLen = engine.stream_get_buffer_len(streamId);\n if (bufLen === 0) return null;\n const copy = new ArrayBuffer(bufLen);\n new Uint8Array(copy).set(new Uint8Array(engine.memory.buffer, bufPtr, bufLen));\n return copy;\n },\n\n destroy(): void {\n if (!destroyed) {\n engine.stream_destroy(streamId);\n destroyed = true;\n }\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<unknown | undefined> {\n if (!source) throw new Error(\"No source provided — use feed() for push-based parsing\");\n const ep = this;\n const reader = isReadableStream(source) ? source.getReader() : null;\n const iter = reader ? null : (source as AsyncIterable<any>)[Symbol.asyncIterator]();\n let finished = false;\n\n return {\n async next() {\n if (finished) {\n ep.destroy();\n return { done: true as const, value: undefined };\n }\n\n const result = reader\n ? await reader.read()\n : await iter!.next();\n\n if (result.done || !result.value) {\n finished = true;\n ep.destroy();\n return { done: true as const, value: undefined };\n }\n\n const status = ep.feed(result.value);\n const partial = ep.getValue();\n\n if (status === \"complete\" || status === \"end_early\") {\n finished = true;\n return { done: false, value: partial };\n }\n if (status === \"error\") {\n finished = true;\n ep.destroy();\n throw new SyntaxError(\"VectorJSON: Parse error in stream\");\n }\n\n return { done: false, value: partial };\n },\n async return() {\n finished = true;\n ep.destroy();\n if (reader) reader.cancel();\n return { done: true as const, value: undefined };\n },\n [Symbol.asyncIterator]() { return this; },\n };\n },\n };\n\n return self;\n },\n\n createParser(arg?: any): StreamingParser {\n // --- Argument parsing: detect legacy schema vs options object ---\n let schema: { safeParse: (v: unknown) => { success: boolean; data?: unknown } } | undefined;\n let pickPaths: PathSegment[][] | null = null;\n let source: ReadableStream<Uint8Array> | AsyncIterable<Uint8Array | string> | undefined;\n\n if (arg && typeof arg === 'object' && 'safeParse' in arg && !('source' in arg) && !('schema' in arg)) {\n // Legacy: createParser(zodSchema)\n schema = arg;\n pickPaths = extractSchemaKeys(arg);\n } else if (arg && typeof arg === 'object' && ('source' in arg || 'schema' in arg)) {\n // createParser({ schema, source })\n schema = arg.schema;\n source = arg.source;\n if (arg.schema) {\n pickPaths = extractSchemaKeys(arg.schema);\n }\n }\n const streamId = engine.stream_create();\n if (streamId < 0) {\n throw new Error(\"VectorJSON: Failed to create streaming parser (max 4 concurrent)\");\n }\n\n let destroyed = false;\n let cachedValue: unknown = UNCACHED;\n let cachedRemaining: Uint8Array | null | undefined; // undefined = not yet cached\n\n // --- Live document builder state (same approach as EventParser) ---\n let ldRoot: unknown = undefined;\n let ldStack: (Record<string, unknown> | unknown[])[] = [];\n let ldCurrentKey: string | null = null;\n let ldActiveKey: string | null = null;\n let ldStringAccum = '';\n let ldInStringValue = false;\n let ldScalarAccum = '';\n\n // Byte scanner state\n let scanInString = false;\n let scanEscapeNext = false;\n let scanDepth = 0;\n let scanContext: ('o' | 'a')[] = [];\n let scanExpectingKey = false;\n let scanAfterColon = false;\n let scanKeyAccum = '';\n let scanAccumulatingKey = false;\n let scanInScalar = false;\n\n // --- Pick state ---\n // spKeyStack tracks the current key at each depth for pick matching.\n // spSkipDepth >= 0 means we're inside a non-picked field and should skip building.\n let spKeyStack: (string | null)[] = [];\n let spSkipDepth = -1;\n\n /** Check if the current path (from spKeyStack + scanDepth) matches any pick path.\n * Returns true if current path is an ancestor, descendant, or exact match.\n * Array levels (null entries in spKeyStack) are transparent — skipped during comparison. */\n function isFieldPicked(): boolean {\n if (!pickPaths) return true;\n // Build effective key path (skip null = array levels)\n const effective: string[] = [];\n for (let i = 0; i < scanDepth; i++) {\n if (spKeyStack[i] !== null) effective.push(spKeyStack[i]!);\n }\n for (const pick of pickPaths) {\n const pickLen = pick.length;\n const effLen = effective.length;\n const compareLen = Math.min(effLen, pickLen);\n let matched = true;\n for (let i = 0; i < compareLen; i++) {\n const seg = pick[i];\n if (seg === '*') continue; // wildcard matches anything\n if (typeof seg === 'number') continue; // index matching — arrays are transparent\n if (effective[i] !== seg) { matched = false; break; }\n }\n if (matched) return true; // ancestor, descendant, or exact match\n }\n return false;\n }\n\n function spSetValue(value: unknown) {\n if (ldStack.length === 0) { ldRoot = value; return; }\n const parent = ldStack[ldStack.length - 1];\n if (Array.isArray(parent)) { parent.push(value); }\n else if (ldCurrentKey !== null) { parent[ldCurrentKey] = value; ldActiveKey = ldCurrentKey; ldCurrentKey = null; }\n }\n\n function spUpdateString(str: string) {\n if (ldStack.length === 0) { ldRoot = str; return; }\n const parent = ldStack[ldStack.length - 1];\n if (Array.isArray(parent)) {\n if (parent.length > 0) parent[parent.length - 1] = str;\n else parent.push(str);\n } else if (ldActiveKey !== null) { parent[ldActiveKey] = str; }\n }\n\n /** Scan new bytes to incrementally build the live JS document.\n * When pickPaths is set, fields not matching any pick path are skipped. */\n function spScan(buf: Uint8Array, from: number, to: number) {\n const picking = pickPaths !== null;\n for (let i = from; i < to; i++) {\n const c = buf[i];\n\n if (scanInScalar) {\n if (c === 0x2C || c === 0x7D || c === 0x5D || c === 0x20 || c === 0x0A || c === 0x0D || c === 0x09) {\n if (spSkipDepth < 0) {\n try { spSetValue(JSON.parse(ldScalarAccum)); } catch { spSetValue(null); }\n }\n ldScalarAccum = '';\n scanInScalar = false;\n i--; continue;\n }\n if (spSkipDepth < 0) ldScalarAccum += B2C[c];\n continue;\n }\n\n if (scanEscapeNext) {\n scanEscapeNext = false;\n if (ldInStringValue && spSkipDepth < 0) {\n let decoded: string;\n switch (c) {\n case 0x6E: decoded = '\\n'; break;\n case 0x72: decoded = '\\r'; break;\n case 0x74: decoded = '\\t'; break;\n case 0x22: decoded = '\"'; break;\n case 0x5C: decoded = '\\\\'; break;\n case 0x2F: decoded = '/'; break;\n case 0x62: decoded = '\\b'; break;\n case 0x66: decoded = '\\f'; break;\n default: decoded = B2C[c]; break;\n }\n ldStringAccum += decoded;\n }\n if (scanAccumulatingKey) scanKeyAccum += B2C[c];\n continue;\n }\n\n if (scanInString) {\n if (c === 0x5C) { scanEscapeNext = true; continue; }\n if (c === 0x22) {\n scanInString = false;\n if (scanAccumulatingKey) {\n scanAccumulatingKey = false;\n ldCurrentKey = scanKeyAccum;\n // Store key in spKeyStack for pick path matching\n if (picking && scanDepth > 0) {\n spKeyStack[scanDepth - 1] = scanKeyAccum;\n }\n scanKeyAccum = '';\n continue;\n }\n if (ldInStringValue && spSkipDepth < 0) {\n spUpdateString(ldStringAccum);\n ldStringAccum = '';\n ldInStringValue = false;\n }\n continue;\n }\n if (ldInStringValue && spSkipDepth < 0) ldStringAccum += B2C[c];\n if (scanAccumulatingKey) scanKeyAccum += B2C[c];\n continue;\n }\n\n switch (c) {\n case 0x7B: {\n scanContext[scanDepth] = 'o';\n if (picking) spKeyStack[scanDepth] = null;\n scanDepth++;\n scanExpectingKey = true;\n scanAfterColon = false;\n if (spSkipDepth < 0) {\n const obj: Record<string, unknown> = {};\n spSetValue(obj);\n ldStack.push(obj);\n }\n break;\n }\n case 0x5B: {\n scanContext[scanDepth] = 'a';\n if (picking) spKeyStack[scanDepth] = null;\n scanDepth++;\n scanExpectingKey = false;\n scanAfterColon = false;\n if (spSkipDepth < 0) {\n const arr: unknown[] = [];\n spSetValue(arr);\n ldStack.push(arr);\n }\n break;\n }\n case 0x7D: case 0x5D: {\n scanDepth--;\n if (spSkipDepth >= 0) {\n if (scanDepth <= spSkipDepth) {\n spSkipDepth = -1;\n // Container was opened before skip started — pop it\n ldStack.pop();\n }\n // else: still inside skipped region, container wasn't pushed\n } else {\n ldStack.pop();\n }\n if (scanDepth > 0) {\n scanExpectingKey = scanContext[scanDepth - 1] === 'o';\n scanAfterColon = false;\n }\n break;\n }\n case 0x22: {\n scanInString = true;\n const isValue = scanAfterColon || scanDepth === 0 || (scanDepth > 0 && scanContext[scanDepth - 1] === 'a');\n if (scanExpectingKey) {\n scanAccumulatingKey = true;\n scanKeyAccum = '';\n } else if (isValue && spSkipDepth < 0) {\n ldStringAccum = '';\n ldInStringValue = true;\n spSetValue('');\n scanAfterColon = false;\n }\n break;\n }\n case 0x3A: {\n scanExpectingKey = false;\n scanAfterColon = true;\n // Check pick filter after key is stored\n if (picking && spSkipDepth < 0 && !isFieldPicked()) {\n spSkipDepth = scanDepth - 1;\n ldCurrentKey = null; // discard key since field is skipped\n break;\n }\n // Pre-set null for the pending key — overwritten when the real\n // value arrives. Ensures getValue() shows {\"key\": null} while\n // the value is still being streamed.\n if (spSkipDepth < 0 && ldCurrentKey !== null && ldStack.length > 0) {\n const parent = ldStack[ldStack.length - 1];\n if (!Array.isArray(parent)) {\n (parent as Record<string, unknown>)[ldCurrentKey] = null;\n ldActiveKey = ldCurrentKey;\n }\n }\n break;\n }\n case 0x2C: {\n if (picking && spSkipDepth >= 0 && scanDepth - 1 <= spSkipDepth) {\n spSkipDepth = -1;\n }\n if (scanDepth > 0 && scanContext[scanDepth - 1] === 'o') {\n scanExpectingKey = true;\n if (picking) spKeyStack[scanDepth - 1] = null;\n }\n scanAfterColon = false;\n break;\n }\n default: {\n if (spSkipDepth >= 0) break; // skip scalars inside non-picked fields\n const isValuePos = scanAfterColon || scanDepth === 0 || (scanDepth > 0 && scanContext[scanDepth - 1] === 'a');\n if (isValuePos) {\n if (c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x74 || c === 0x66 || c === 0x6E) {\n let j = i + 1;\n while (j < to) {\n const sc = buf[j];\n if (sc === 0x2C || sc === 0x7D || sc === 0x5D || sc === 0x20 || sc === 0x0A || sc === 0x0D || sc === 0x09) break;\n j++;\n }\n if (j < to) {\n const scalarStr = utf8Decoder.decode(buf.slice(i, j));\n try { spSetValue(JSON.parse(scalarStr)); } catch { spSetValue(null); }\n i = j - 1;\n } else {\n scanInScalar = true;\n ldScalarAccum = utf8Decoder.decode(buf.slice(i, to));\n i = to;\n }\n scanAfterColon = false;\n }\n }\n break;\n }\n }\n }\n\n // End-of-chunk: flush accumulated string to parent (batched update)\n if (ldInStringValue && ldStringAccum && spSkipDepth < 0) {\n spUpdateString(ldStringAccum);\n }\n\n // End-of-chunk: if we're still accumulating a scalar and stream says complete,\n // finalize it now (root-level scalars like \"42\" end at end-of-buffer)\n if (scanInScalar) {\n const status = engine.stream_get_status(streamId);\n if (status === 1 || status === 3) { // complete or end_early\n // Autocomplete partial keywords (e.g., \"tr\" → \"true\")\n const s = ldScalarAccum;\n const completed = s.startsWith('t') ? 'true'\n : s.startsWith('f') ? 'false'\n : s.startsWith('n') ? 'null' : s;\n try { spSetValue(JSON.parse(completed)); } catch { spSetValue(null); }\n ldScalarAccum = '';\n scanInScalar = false;\n }\n }\n }\n\n const ensureRemaining = () => {\n if (cachedRemaining !== undefined) return;\n const rPtr = (engine.stream_get_remaining_ptr(streamId) >>> 0);\n const rLen = engine.stream_get_remaining_len(streamId);\n if (rLen > 0) {\n cachedRemaining = new Uint8Array(rLen);\n cachedRemaining.set(new Uint8Array(engine.memory.buffer, rPtr, rLen));\n } else {\n cachedRemaining = null;\n }\n };\n\n let prevLen = 0;\n\n return {\n feed(chunk: Uint8Array | string): FeedStatus {\n if (destroyed) throw new Error(\"Parser already destroyed\");\n const chunkLen = typeof chunk === \"string\" ? chunk.length : chunk.byteLength;\n if (chunkLen === 0) return FEED_STATUS[engine.stream_get_status(streamId)]!;\n const { ptr, len } = writeToWasm(chunk, feedBuf, 0, 4096);\n const rawStatus = engine.stream_feed(streamId, ptr, len);\n // Scan new bytes for live document building\n const newLen = engine.stream_get_buffer_len(streamId);\n if (newLen > prevLen) {\n const bufPtr = (engine.stream_get_buffer_ptr(streamId) >>> 0);\n // For end_early/complete: only scan up to the value boundary, not trailing data\n const scanEnd = (rawStatus === 1 || rawStatus === 3)\n ? Math.min(newLen, engine.stream_get_value_len(streamId))\n : newLen;\n if (scanEnd > prevLen) {\n const wasmBuf = new Uint8Array(engine.memory.buffer, bufPtr, scanEnd);\n spScan(wasmBuf, prevLen, scanEnd);\n }\n prevLen = newLen;\n }\n return FEED_STATUS[rawStatus] || \"error\";\n },\n\n getValue(): unknown | undefined {\n if (destroyed) throw new Error(\"Parser already destroyed\");\n if (cachedValue !== UNCACHED) return cachedValue;\n\n const status = engine.stream_get_status(streamId);\n if (status === 2) {\n throw new SyntaxError(\"VectorJSON: Parse error in stream\");\n }\n\n if (status === 0) {\n // incomplete — return the incrementally-built live document\n // The returned object IS the live object — it grows as more data arrives.\n // Callers get a reference that automatically reflects future feed() calls.\n let value: unknown = ldRoot;\n\n // Handle pending partial values that haven't been committed to ldRoot yet:\n if (scanInScalar && ldScalarAccum) {\n // Pending scalar: try to autocomplete (e.g., \"tr\" → true)\n const partial = ldScalarAccum;\n const completed = partial.startsWith('t') ? 'true'\n : partial.startsWith('f') ? 'false'\n : partial.startsWith('n') ? 'null'\n : partial;\n try {\n const parsed = JSON.parse(completed);\n if (ldStack.length === 0) value = parsed;\n } catch { /* partial number like \"1.\" — leave as-is */ }\n } else if (ldInStringValue && ldStack.length === 0) {\n // Root-level string still being accumulated\n value = ldStringAccum;\n }\n\n if (value === undefined) return undefined;\n // Incomplete: return partial value without schema gating.\n // User checks getStatus() to know it's not final.\n return value;\n }\n\n // complete or end_early — finalize any pending scalar\n if (scanInScalar && ldScalarAccum) {\n try { spSetValue(JSON.parse(ldScalarAccum)); } catch { spSetValue(null); }\n ldScalarAccum = '';\n scanInScalar = false;\n }\n ensureRemaining();\n\n let value: unknown = ldRoot;\n if (schema) {\n const result = schema.safeParse(value);\n if (!result.success) return (cachedValue = undefined) as undefined;\n value = result.data;\n }\n return (cachedValue = value);\n },\n\n getRemaining(): Uint8Array | null {\n if (destroyed) return null;\n ensureRemaining();\n return cachedRemaining!;\n },\n\n getStatus(): FeedStatus {\n if (destroyed) return \"error\";\n const status = engine.stream_get_status(streamId);\n return FEED_STATUS[status] || \"error\";\n },\n\n getRawBuffer(): ArrayBuffer | null {\n if (destroyed) return null;\n const bufPtr = engine.stream_get_buffer_ptr(streamId) >>> 0;\n const bufLen = engine.stream_get_buffer_len(streamId);\n if (bufLen === 0) return null;\n const copy = new ArrayBuffer(bufLen);\n new Uint8Array(copy).set(new Uint8Array(engine.memory.buffer, bufPtr, bufLen));\n return copy;\n },\n\n destroy(): void {\n if (!destroyed) {\n engine.stream_destroy(streamId);\n destroyed = true;\n cachedValue = UNCACHED;\n }\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<unknown | undefined> {\n if (!source) throw new Error(\"No source provided — use feed() for push-based parsing\");\n const self = this;\n const reader = isReadableStream(source) ? source.getReader() : null;\n const iter = reader ? null : (source as AsyncIterable<any>)[Symbol.asyncIterator]();\n let finished = false;\n\n return {\n async next() {\n if (finished) {\n self.destroy();\n return { done: true as const, value: undefined };\n }\n\n const result = reader\n ? await reader.read()\n : await iter!.next();\n\n if (result.done || !result.value) {\n finished = true;\n self.destroy();\n return { done: true as const, value: undefined };\n }\n\n const status = self.feed(result.value);\n const partial = self.getValue();\n\n if (status === \"complete\" || status === \"end_early\") {\n finished = true;\n return { done: false, value: partial };\n }\n if (status === \"error\") {\n finished = true;\n self.destroy();\n throw new SyntaxError(\"VectorJSON: Parse error in stream\");\n }\n\n return { done: false, value: partial };\n },\n async return() {\n finished = true;\n self.destroy();\n if (reader) reader.cancel();\n return { done: true as const, value: undefined };\n },\n [Symbol.asyncIterator]() { return this; },\n };\n },\n };\n },\n };\n\n return _instance;\n}\n\n// --- Top-level await: auto-initialize with embedded WASM ---\nconst _vj = await init();\n\n/** Parse a JSON string or Uint8Array. Synchronous — no init needed. */\nexport const parse = _vj.parse;\n\n/** Parse partial/incomplete JSON. Compatible with Vercel AI SDK's parsePartialJson. */\nexport const parsePartialJson = _vj.parsePartialJson;\n\n/** Deep-compare two values for structural equality. WASM-accelerated for VJ proxies. */\nexport const deepCompare = _vj.deepCompare;\n\n/** Create a streaming parser for incremental JSON parsing. */\nexport const createParser = _vj.createParser;\n\n/** Create an event-driven streaming parser with path subscriptions. */\nexport const createEventParser = _vj.createEventParser;\n\n/** Eagerly materialize a lazy proxy into plain JS objects. */\nexport const materialize = _vj.materialize;\n"
7
7
  ],
8
- "mappings": "wEACO,IAAM,GAAa,2r/HCe1B,SAAS,EAAY,CAAC,GAAyB,CAC7C,GAAI,OAAO,OAAW,IACpB,OAAO,IAAI,WAAW,OAAO,KAAK,GAAK,QAAQ,EAAE,MAAM,EACzD,IAAM,EAAM,KAAK,EAAG,EACd,EAAQ,IAAI,WAAW,EAAI,MAAM,EACvC,QAAS,GAAI,EAAG,GAAI,EAAI,OAAQ,KAAK,EAAM,IAAK,EAAI,WAAW,EAAC,EAChE,OAAO,EAqOT,IAAM,GAAyC,CAC7C,EAAG,iCACH,EAAG,oCACH,EAAG,0BACH,EAAG,6BACH,EAAG,yBACH,EAAG,2BACH,EAAG,gCACH,EAAG,6CACH,EAAG,4CACH,GAAI,mBACJ,GAAI,oBACJ,GAAI,8BACJ,GAAI,gBACJ,GAAI,qBACN,EAuCM,EAAc,IAAI,YAAY,OAAO,EAGrC,GAAgB,MAAM,KAAK,CAAE,OAAQ,GAAI,EAAG,CAAC,GAAG,IAAM,OAAO,aAAa,CAAC,CAAC,EAE9E,GAA+B,KAMnC,eAAsB,EAAI,CAAC,GAEH,CACtB,GAAI,GAAW,OAAO,GAGtB,IAAI,EACE,EAAU,IAAS,WACzB,GAAI,aAAmB,aAAe,YAAY,OAAO,CAAO,EAC9D,EAAc,EACT,QAAI,OAAO,IAAY,UAAY,aAAmB,IAAK,CAEhE,IAAQ,YAAa,KAAa,6BAC1B,iBAAkB,KAAa,oBACjC,EAAO,OAAO,IAAY,SAAW,EAAU,EAAc,CAAO,EAC1E,EAAc,MAAM,EAAS,CAAI,EAEjC,OAAc,GAAa,EAAU,EAAE,OAIzC,IAAQ,SAAU,IAAmB,MAAM,YAAY,YAAY,EAA4B,CAAC,CAAC,EAC3F,EAAS,GAAe,QAExB,GAAU,IAAI,YAGd,GAAW,CAAE,IAAK,EAAG,IAAK,CAAE,EAC5B,GAAS,CAAE,IAAK,EAAG,IAAK,CAAE,EAC1B,GAAU,CAAE,IAAK,EAAG,IAAK,CAAE,EAEjC,SAAS,EAAS,CAAC,EAAsB,EAAgB,EAAwB,CAC/E,GAAI,GAAU,EAAI,IAAK,OAAO,EAAI,IAClC,GAAI,EAAI,MAAQ,EAAG,EAAO,QAAQ,EAAI,IAAK,EAAI,GAAG,EAClD,IAAI,EAAM,EAAI,MAAQ,EAAI,EAAS,EAAI,IACvC,MAAO,EAAM,EAAQ,GAAO,EAE5B,GADA,EAAI,IAAM,EAAO,MAAM,CAAG,IAAM,EAC5B,EAAI,MAAQ,EAAG,MAAU,MAAM,+BAA+B,EAElE,OADA,EAAI,IAAM,EACH,EAAI,IAIb,SAAS,EAAW,CAClB,EAA4B,EAAsB,EAAkB,EACtC,CAC9B,GAAI,OAAO,IAAU,SAAU,CAE7B,IAAI,EAAW,EAAM,OAAS,EAC1B,EAAM,GAAU,EAAK,EAAU,CAAM,EACrC,EAAS,GAAQ,WAAW,EAAO,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAK,CAAQ,CAAC,EAC1F,GAAI,EAAO,KAAQ,EAAM,OAEvB,EAAW,EAAM,OAAS,EAAI,EAC9B,EAAM,GAAU,EAAK,EAAU,CAAM,EACrC,EAAS,GAAQ,WAAW,EAAO,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAK,CAAQ,CAAC,EAExF,MAAO,CAAE,MAAK,IAAK,EAAO,OAAS,EAErC,IAAM,EAAM,EAAM,WACZ,EAAM,GAAU,EAAK,EAAM,EAAU,CAAM,EAEjD,OADA,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAK,CAAG,EAAE,IAAI,CAAK,EACjD,CAAE,MAAK,KAAI,EAGpB,SAAS,EAAgB,CAAC,EAA2C,CACnE,GAAI,EAAI,SAAW,EAAG,MAAO,CAAE,IAAK,EAAG,IAAK,CAAE,EAC9C,OAAO,GAAY,EAAK,GAAQ,EAAG,GAAG,EAKxC,IAAM,GAAY,EAAO,cAAc,IAAM,EAEvC,GAAW,EACX,GAAW,EACX,GAAY,EACZ,GAAa,EACb,GAAa,EACb,GAAa,EACb,GAAY,EAEZ,GAAqC,CAAC,aAAc,WAAY,QAAS,WAAW,EACpF,GAAsB,EACtB,GAAe,EACf,GAAqB,EAGrB,GAAa,OAAO,iBAAiB,EACrC,GAAW,OAAO,EAKlB,GAAiB,IAAI,IAGrB,GAAc,IAAI,qBACtB,EAAG,QAAO,gBAAwD,CAChE,GAAI,GAAe,IAAI,CAAK,IAAM,EAAY,OAC9C,GAAe,OAAO,CAAK,EAC3B,GAAU,OAAO,CAAK,EACtB,EAAO,SAAS,CAAK,EAEzB,EAGA,SAAS,EAAgB,CAAC,EAA4B,CACpD,IAAM,EAAO,IAAI,YAAY,CAAK,EAElC,OADA,EAAK,IAAI,IAAI,YAAY,EAAO,OAAO,OAAQ,GAAW,CAAK,CAAC,EACzD,EAIT,SAAS,EAAkB,CACzB,EACA,EAAe,EACF,CAEb,IAAI,EAAQ,EAAG,EAAO,EAAK,CAAC,EAC5B,GAAI,EAFc,MAEK,OAAO,GAAiB,CAAK,EACpD,IAAM,EAAgB,CAAC,EACnB,EAAO,GAAiB,CAAK,EACjC,QAAS,EAAI,EAAG,EAAI,EAAO,IAAK,EAAI,KAAK,EAAK,EAAE,EAChD,MAAO,IANW,MAMU,CAC1B,IAAM,EAAW,IAAI,YAAY,EAAO,OAAO,OAAQ,GAAY,MAAe,CAAC,EAAE,GACrF,EAAQ,EAAG,EAAO,EAAK,CAAQ,EAC/B,EAAO,GAAiB,CAAK,EAC7B,QAAS,EAAI,EAAG,EAAI,EAAO,IAAK,EAAI,KAAK,EAAK,EAAE,EAElD,OAAO,IAAI,YAAY,CAAG,EAM5B,IAAM,GAAY,IAAI,IAMtB,SAAS,EAAa,CAAC,EAAe,EAAuB,CAC3D,IAAM,EAAS,EAAO,oBAAoB,EAAO,CAAK,IAAM,EAC5D,GAAI,IAAW,EAAG,MAAO,GAEzB,IAAM,EAAQ,IAAI,YAAY,EAAO,OAAO,OAAQ,GAAW,CAAC,EAC1D,EAAY,EAAM,GAClB,EAAa,EAAM,GAInB,EAAa,GAAU,IAAI,CAAK,EACtC,GAAI,IAAe,OAAW,CAC5B,IAAM,EAAM,EAAW,MAAM,EAAW,EAAY,CAAM,EAC1D,OAAO,EAAa,KAAK,MAAM,IAAM,EAAM,GAAG,EAAI,EAGpD,IAAM,EAAW,EAAO,kBAAkB,CAAK,IAAM,EAC/C,EAAM,EAAY,OACtB,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAW,EAAW,CAAM,CACnE,EAEA,OAAO,EAAa,KAAK,MAAM,IAAM,EAAM,GAAG,EAAI,EAOpD,SAAS,EAAkB,CAAC,EAAe,EAAwB,CACjE,IAAM,EAAM,EAAO,YAAY,EAAO,CAAK,EAC3C,GAAI,IAAQ,GAAU,OAAO,KAC7B,GAAI,IAAQ,GAAU,MAAO,GAC7B,GAAI,IAAQ,GAAW,MAAO,GAC9B,GAAI,IAAQ,GAAY,OAAO,EAAO,eAAe,EAAO,CAAK,EACjE,GAAI,IAAQ,GAAY,OAAO,GAAc,EAAO,CAAK,EACzD,GAAI,IAAQ,IAAc,IAAQ,GAAW,CAI3C,IAAM,EAAY,EAAO,gBAAgB,EAAO,CAAK,IAAM,EACrD,EAAiB,EAAO,oBAAoB,EAAO,CAAK,EAAI,EAC5D,EAAW,EAAO,gBAAgB,EAAO,CAAc,EACvD,EAAW,EAAO,kBAAkB,CAAK,IAAM,EAC/C,EAAM,IAAI,WACd,EAAO,OAAO,OAAQ,EAAW,EAAU,EAAW,EAAI,CAC5D,EACA,OAAO,KAAK,MAAM,EAAY,OAAO,CAAG,CAAC,EAE3C,OAAO,KAIT,SAAS,EAAgB,CAAC,EAA0B,CAClD,OAAO,EAAO,KAAO,EAAO,GAAK,GAAmB,EAAO,mBAAoB,EAAO,GAAI,EAAO,EAAE,GAMrG,SAAS,EAAY,CACnB,EAAe,EACf,EAAmB,EACnB,EACA,EAAe,GACN,CACT,IAAM,EAAM,EAAO,YAAY,EAAO,CAAK,EAC3C,GAAI,IAAQ,GAAU,OAAO,KAC7B,GAAI,IAAQ,GAAU,MAAO,GAC7B,GAAI,IAAQ,GAAW,MAAO,GAC9B,GAAI,IAAQ,GAAY,OAAO,EAAO,eAAe,EAAO,CAAK,EACjE,GAAI,IAAQ,GAAY,OAAO,GAAc,EAAO,CAAK,EAIzD,GAAI,IAAQ,GAAY,CACtB,GAAI,EACF,OAAO,IAAI,MAAM,CAAE,GAAI,EAAO,GAAI,EAAO,GAAI,EAAW,GAAI,EAAY,GAAI,CAAO,EAAU,EAAa,EAE5G,OAAO,GAAmB,EAAO,CAAK,EAIxC,OAAO,IAAI,MACT,OAAO,OAAO,CAAC,EAAG,CAAE,GAAI,EAAO,GAAI,EAAO,GAAI,EAAW,GAAI,EAAY,GAAI,EAC3E,GAAI,EAAO,cAAc,EAAO,CAAK,EAAG,GAAI,CAAa,CAAC,EAC5D,EACF,EAIF,IAAM,GAAmC,CACvC,GAAG,CAAC,EAAQ,EAAM,EAAW,CAC3B,GAAI,IAAS,QAAU,IAAS,OAAO,QAAS,OAAO,EAAO,GAC9D,GAAI,IAAS,GAAY,OAAO,EAAO,KAAO,EAAO,GAAK,CAAE,MAAO,EAAO,GAAI,MAAO,EAAO,EAAG,GAC/F,GAAI,IAAS,SAAU,OAAO,EAAO,GACrC,GAAI,IAAS,OAAO,SAAU,CAC5B,IAAM,EAAI,EACV,OAAO,QAAS,EAAG,CACjB,IAAI,EAAI,EACR,MAAO,CACL,IAAI,EAAG,CACL,GAAI,GAAK,EAAE,GAAI,MAAO,CAAE,KAAM,GAAe,MAAO,MAAU,EAE9D,MAAO,CAAE,KAAM,GAAgB,MAAO,GAAc,IAAK,EAAG,OAAO,GAAG,EAAG,CAAC,CAAE,EAEhF,GAGJ,GAAI,IAAS,OAAO,YAAa,MAAO,QACxC,GAAI,OAAO,IAAS,SAAU,CAC5B,IAAM,EAAM,OAAO,CAAI,EACvB,GAAI,OAAO,UAAU,CAAG,GAAK,GAAO,GAAK,EAAM,EAAO,GAAI,CACxD,GAAI,CAAC,EAAO,GAAI,EAAO,GAAS,MAAM,EAAO,EAAE,EAC/C,GAAI,EAAO,GAAG,KAAS,OAAW,OAAO,EAAO,GAAG,GACnD,IAAM,EAAU,GAAiB,CAAM,EACjC,EAAM,GAAa,EAAO,GAAI,EAAQ,GAAM,EAAO,GAAI,EAAO,GAAI,EAAO,GAAI,EAAO,EAAE,EAE5F,OADA,EAAO,GAAG,GAAO,EACV,EAET,GAAI,KAAQ,MAAM,UAEhB,OADqB,GAAmB,EAAO,GAAI,EAAO,EAAE,EACA,GAGhE,QAEF,GAAG,CAAC,EAAQ,EAAM,CAChB,GAAI,IAAS,IAAc,IAAS,QAAU,IAAS,OAAO,SAAW,IAAS,SAAU,MAAO,GACnG,GAAI,OAAO,IAAS,SAAU,MAAO,GACrC,IAAM,EAAM,OAAO,CAAI,EACvB,OAAO,OAAO,UAAU,CAAG,GAAK,GAAO,GAAK,EAAM,EAAO,IAE3D,OAAO,CAAC,EAAQ,CACd,IAAM,EAAiB,CAAC,EACxB,QAAS,EAAI,EAAG,EAAI,EAAO,GAAI,IAAK,EAAK,KAAK,OAAO,CAAC,CAAC,EAEvD,OADA,EAAK,KAAK,QAAQ,EACX,GAET,wBAAwB,CAAC,EAAQ,EAAM,CACrC,GAAI,IAAS,SACX,MAAO,CAAE,MAAO,EAAO,GAAI,SAAU,GAAO,WAAY,GAAO,aAAc,EAAM,EAErF,GAAI,OAAO,IAAS,SAAU,CAC5B,IAAM,EAAM,OAAO,CAAI,EACvB,GAAI,OAAO,UAAU,CAAG,GAAK,GAAO,GAAK,EAAM,EAAO,GACpD,MAAO,CAAE,MAAO,KAAK,IAAK,EAAQ,EAAM,CAAM,EAAG,SAAU,GAAO,WAAY,GAAM,aAAc,EAAK,EAG3G,OAEJ,EAMM,GAAmC,CACvC,GAAG,CAAC,EAAQ,EAAM,EAAW,CAC3B,GAAI,IAAS,QAAU,IAAS,OAAO,QAAS,OAAO,EAAO,GAC9D,GAAI,IAAS,GAAY,OAAO,EAAO,KAAO,EAAO,GAAK,CAAE,MAAO,EAAO,GAAI,MAAO,EAAO,EAAG,GAC/F,GAAI,OAAO,IAAS,SAAU,OAAO,IAAS,OAAO,YAAc,SAAW,OAC9E,GAAI,CAAC,EAAO,GAAI,EAAO,GAAK,OAAO,OAAO,IAAI,EAC9C,GAAI,KAAQ,EAAO,GAAI,OAAO,EAAO,GAAG,GACxC,IAAQ,MAAK,OAAQ,GAAiB,CAAI,EACpC,EAAS,EAAO,eAAe,EAAO,GAAI,EAAO,GAAI,EAAK,CAAG,EACnE,GAAI,IAAW,EAAG,CAEhB,IAAM,EAAM,GAAa,EAAO,GAAI,EAAQ,EAAO,GAAI,EAAO,GAAI,EAAO,GAAI,EAAI,EAEjF,OADA,EAAO,GAAG,GAAQ,EACX,EAIT,IAAM,EADO,KAAK,QAAS,CAAM,EACb,QAAQ,CAAI,EAChC,GAAI,IAAW,GAAI,OAEnB,IAAM,EAAM,GAAa,EAAO,GAAI,EAAO,IAAI,GAAU,EAAG,EAAO,GAAI,EAAO,GAAI,EAAO,GAAI,EAAI,EAEjG,OADA,EAAO,GAAG,GAAQ,EACX,GAET,GAAG,CAAC,EAAQ,EAAM,CAChB,GAAI,IAAS,IAAc,IAAS,QAAU,IAAS,OAAO,QAAS,MAAO,GAC9E,GAAI,OAAO,IAAS,SAAU,MAAO,GACrC,IAAQ,MAAK,OAAQ,GAAiB,CAAI,EAC1C,GAAI,EAAO,eAAe,EAAO,GAAI,EAAO,GAAI,EAAK,CAAG,IAAM,EAAG,MAAO,GAGxE,OADa,KAAK,QAAS,CAAM,EACrB,SAAS,CAAI,GAE3B,OAAO,CAAC,EAAQ,CACd,GAAI,CAAC,EAAO,MAAO,CACjB,IAAM,EAAU,GAAmB,EAAO,gBAAiB,EAAO,GAAI,EAAO,EAAE,EAC/E,EAAO,IAAM,EACb,EAAO,MAAQ,MAAM,KAAK,EAAS,CAAC,IAAQ,GAAc,EAAO,GAAI,CAAG,CAAC,EAE3E,OAAO,EAAO,OAEhB,wBAAwB,CAAC,EAAQ,EAAM,CACrC,GAAI,OAAO,IAAS,SAAU,OAE9B,IAAM,EAAM,KAAK,IAAK,EAAQ,EAAM,CAAM,EAC1C,GAAI,IAAQ,OAAW,OACvB,MAAO,CAAE,MAAO,EAAK,SAAU,GAAO,WAAY,GAAM,aAAc,EAAK,EAE/E,EAGA,SAAS,EAAW,CAAC,EAAyB,CAC5C,GAAI,IAAU,MAAQ,OAAO,IAAU,SAAU,MAAO,GACxD,GAAI,CAAE,OAAO,MAAe,EAC5B,KAAM,CAAE,MAAO,IAIjB,SAAS,EAAY,CAAC,EAAe,EAAe,GAAgB,CAClE,IAAM,EAAU,EAAO,YAAY,EAAO,CAAC,EAE3C,GAAI,GAAW,GAAY,CACzB,IAAM,EAAQ,IAAY,GAAW,KACjC,IAAY,GAAW,GACvB,IAAY,GAAY,GACxB,IAAY,GAAa,EAAO,eAAe,EAAO,CAAC,EACvD,GAAc,EAAO,CAAC,EAG1B,OAFA,GAAU,OAAO,CAAK,EACtB,EAAO,SAAS,CAAK,EACd,EAGT,IAAM,GAAc,GAAe,IAAI,CAAK,GAAK,GAAK,EACtD,GAAe,IAAI,EAAO,CAAU,EACpC,IAAM,EAAY,CAAE,OAAM,EAW1B,OAVA,GAAY,SAAS,EAAW,CAAE,QAAO,YAAW,EAAG,CAAS,EAUzD,GAAa,EAAO,EAAG,EAAW,EAT1B,IAAM,CAEnB,GAAI,GAAe,IAAI,CAAK,IAAM,EAAY,OAC9C,GAAe,OAAO,CAAK,EAC3B,GAAU,OAAO,CAAK,EACtB,EAAO,SAAS,CAAK,EACrB,GAAY,WAAW,CAAS,GAG2B,IAAY,IAAc,CAAY,EAIrG,SAAS,EAAW,CAAC,EAAW,EAAmB,CACjD,IAAI,EAAQ,EAAO,UAAU,EAAG,CAAC,EACjC,GAAI,EAAQ,EAAG,CACb,IAAM,EAAU,EAAO,eAAe,EACtC,GAAI,IAAY,GAAK,IAAY,GAAI,CACnC,GAAI,OAAO,WAAW,KAAO,WAAY,WAAW,GAAG,EACvD,EAAQ,EAAO,UAAU,EAAG,CAAC,GAGjC,OAAO,EAIT,SAAS,EAAgB,CAAC,EAA6B,CACrD,OAAO,OAAO,GAAG,YAAc,WAMjC,SAAS,EAAY,CAAC,EAA4C,CAEhE,IAAI,EADY,EAEZ,EAAM,GACN,EAAqB,EAEzB,MAAO,CACL,IAAI,CAAC,EAA6B,CAChC,GAAI,IAPiD,EAO9B,OAAO,EAE9B,IAAM,EAAM,GAAiB,CAAC,EAC1B,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAK,OAAQ,CACtB,GAAI,IAd+C,EAc5B,CACrB,GAAU,EAAK,MAAM,CAAC,EACtB,MAGF,GAAI,IAnBoB,EAmBA,CACtB,IAAM,EAAW,EAAK,QAAQ,WAAY,CAAC,EAC3C,GAAI,IAAa,GAAI,CACnB,IAAM,EAAW,EAAK,MAAM,CAAC,EAC7B,QAAW,KAAM,EAAK,EAAG,CAAQ,EACjC,EAAI,EAAK,OACJ,KACL,IAAM,EAAW,EAAK,MAAM,EAAG,CAAQ,EACvC,GAAI,EAAU,QAAW,KAAM,EAAK,EAAG,CAAQ,EAC/C,EAAI,EAAW,EACf,EA7BM,EA8BN,EAAM,GAER,SAGF,GAAI,IAnCkC,EAmCd,CACtB,IAAM,EAAa,IAAI,OAAO,CAAkB,EAC1C,EAAW,EAAK,QAAQ,EAAY,CAAC,EAC3C,GAAI,IAAa,GACf,GAAU,EAAK,MAAM,CAAC,EACtB,EAAI,EAAK,OAET,QAAU,EAAK,MAAM,EAAG,CAAQ,EAChC,EAAI,EAAW,EACf,EAAqB,EACrB,EA7CM,EA8CN,EAAM,GAER,SAIF,IAAM,EAAK,EAAK,GAEhB,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,CAC1C,GAAI,EAAK,CACP,QAAW,KAAM,EAAK,EAAG,CAAG,EAC5B,EAAM,GAER,EA3DiD,EA4DjD,GAAU,EAAK,MAAM,CAAC,EACtB,MAKF,GADA,GAAO,EACH,EAAI,SAAS,SAAS,EAAG,CAC3B,IAAM,EAAY,EAAI,MAAM,EAAG,EAAiB,EAChD,GAAI,EAAW,QAAW,KAAM,EAAK,EAAG,CAAS,EACjD,EArEsB,EAsEtB,EAAM,GACN,IACA,SAIF,GAAI,IAAO,IAAK,CACd,IAAI,EAAU,EACV,EAAI,EACR,MAAO,EAAI,EAAK,QAAU,EAAK,KAAO,IAAO,IAAW,IACxD,GAAI,GAAW,EAAG,CAChB,MAAO,EAAI,EAAK,QAAU,EAAK,KAAO;AAAA,EAAM,IAC5C,GAAI,EAAI,EAAK,OAAQ,IACrB,EAAqB,EACrB,EApFkC,EAqFlC,IAAM,EAAc,EAAI,MAAM,EAAG,EAAE,EACnC,GAAI,EAAa,QAAW,KAAM,EAAK,EAAG,CAAW,EACrD,EAAM,GACN,EAAI,EACJ,UAMJ,GAFA,IAEI,EAAI,OAAS,KAAM,CACrB,QAAW,KAAM,EAAK,EAAG,CAAG,EAC5B,EAAM,IAIV,GAAI,EAAO,OAAS,EAAG,OAAO,EAC9B,OAAO,MAET,KAAK,EAAG,CAAE,EAxGI,EAwGa,EAAM,GAAI,EAAqB,GAC1D,SAAS,EAAG,CAAE,OAAO,IAzGkC,EA0GzD,EAMF,SAAS,EAAW,CAAC,EAAgC,CACnD,OAAO,EAAQ,QAAQ,gBAAiB,KAAK,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO,EACrE,IAAI,KAAK,IAAM,IAAM,IAAM,QAAQ,KAAK,CAAC,EAAI,CAAC,EAAI,CAAC,EAOxD,SAAS,EAAiB,CAAC,EAAa,EAAmB,CAAC,EAA2B,CACrF,IAAM,EAAQ,GAAQ,OAAS,GAAQ,MAAM,QAAQ,GAAK,GAAQ,SAAW,GAAQ,MACrF,GAAI,CAAC,GAAS,OAAO,IAAU,SAAU,OAAO,KAChD,IAAM,EAAyB,CAAC,EAChC,QAAW,KAAO,OAAO,KAAK,CAAK,EAAG,CACpC,IAAM,EAAW,CAAC,GAAG,EAAQ,CAAG,EAE1B,EAAc,EAAM,GACpB,EAAS,GAAkB,EAAa,CAAQ,EACtD,GAAI,GAAU,EAAO,OAAS,EAC5B,EAAM,KAAK,GAAG,CAAM,EAEpB,OAAM,KAAK,EAAS,IAAI,KAAK,QAAQ,KAAK,CAAC,EAAI,CAAC,EAAI,CAAC,CAAC,EAG1D,OAAO,EAAM,OAAS,EAAI,EAAQ,KAGpC,SAAS,EAAiB,CAAC,EAA6B,EAA+B,EAAuB,CAC5G,IAAM,EAAkB,CAAC,EACzB,QAAS,EAAI,EAAG,EAAI,EAAO,IACzB,GAAI,EAAS,KAAO,KAAM,EAAM,KAAK,EAAS,EAAG,EAC5C,QAAI,EAAW,KAAO,KAAM,EAAM,KAAK,OAAO,EAAW,EAAE,CAAC,EAEnE,OAAO,EAAM,KAAK,GAAG,EA60CvB,OAz0CA,GAAY,CACV,KAAK,CAAC,EAAyC,CAE7C,IAAQ,MAAK,OAAQ,GAAY,EAAO,GAAU,GAAI,IAAI,EAE1D,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAM,EAAK,EAAE,EAAE,KAAK,EAAI,EAG7D,IAAM,EAAa,CACjB,EACA,EACA,EACA,EACA,EACA,IACgB,CAChB,IAAI,EAAwB,GAC5B,MAAO,CACL,SACA,QACA,YACA,QACA,UAAU,CAAC,EAAuB,CAChC,GAAI,IAAyB,IAAU,MAAO,GAC9C,GAAI,IAAQ,MAAQ,IAAQ,QAAa,OAAO,IAAQ,SAAU,MAAO,GACzE,GAAI,CACF,IAAM,EAAU,EAAY,IAC5B,GAAI,CAAC,GAAU,OAAO,EAAO,QAAU,SAAU,MAAO,GACxD,IAAM,EAAM,EAAO,YAAY,EAAO,MAAO,EAAO,KAAM,EAC1D,GAAI,IAAQ,IAAc,IAAQ,GAAW,CAC3C,IAAM,EAAW,EAAO,oBAAoB,EAAO,MAAO,EAAO,KAAM,EAEvE,OADoB,EAAO,gBAAgB,EAAO,MAAO,CAAQ,IAAM,EAClD,EAEvB,MAAO,GACP,KAAM,CACN,MAAO,KAGX,MAAM,EAAY,CAChB,GAAI,IAAiB,GAAU,OAAO,EACtC,OAAQ,EAAe,IAAc,OAAY,KAAK,MAAM,CAAS,EAAI,EAE7E,GAII,EAAgB,CAAC,IAA8B,CACnD,GAAI,CAAC,EAAK,CACR,IAAM,EAAO,EAAO,eAAe,EACnC,EAAM,eAAe,GAAe,IAAS,qBAAqB,OAEpE,OAAO,EAAW,UAAW,OAAW,IAAU,OAAW,OAAW,CAAG,GAKvE,EAAa,OAAO,IAAU,UAAY,IAAQ,EAAM,OAG1D,EAAQ,GAAY,EAAK,CAAG,EAChC,GAAI,GAAS,EAAG,CACd,GAAI,EAAY,GAAU,IAAI,EAAO,CAAe,EAEpD,IAAM,EAAY,OAAO,IAAU,SAAW,EAC1C,EAAY,OAAO,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAK,CAAG,CAAC,EACrE,OAAO,EAAW,WAAY,GAAa,CAAK,EAAG,IAAU,CAAS,EAIxE,IAAM,EAAiB,EAAO,eAAe,EAAK,CAAG,EAErD,GAAI,IAAmB,GACrB,OAAO,EAAc,wBAAwB,EAG/C,GAAI,IAAmB,GAAoB,CACzC,IAAM,EAAW,EAAO,cAAc,EAChC,EAAY,EAAM,EAClB,EAAgB,IAAI,WAAW,CAAS,EAC9C,EAAc,IAAI,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAM,EAAU,CAAS,CAAC,EACjF,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAM,EAAU,EAAE,EAAE,KAAK,EAAI,EAElE,IAAM,EAAY,EAAY,OAAO,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAK,CAAQ,CAAC,EAExF,GADA,EAAQ,GAAY,EAAK,CAAQ,EAC7B,GAAS,EAAG,CACd,GAAI,EAAY,GAAU,IAAI,EAAO,CAAe,EACpD,OAAO,EAAW,iBAAkB,GAAa,CAAK,EAAG,IAAU,EAAW,CAAa,EAE7F,OAAO,EAAc,EAGvB,GAAI,IAAmB,GAAqB,CAC1C,IAAM,EAAW,EAAO,mBAAmB,EAAK,EAAK,GAAS,GAAG,EACjE,GAAI,IAAa,EAAG,CAClB,GAAI,IAAQ,EAAG,OAAO,EAAW,aAAc,OAAW,EAAK,MAAS,EACxE,OAAO,EAAc,wBAAwB,EAE/C,IAAM,EAAY,EAAY,OAAO,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAK,CAAQ,CAAC,EAExF,GADA,EAAQ,GAAY,EAAK,CAAQ,EAC7B,GAAS,EAGX,OAAO,EAAW,aAAc,GAAa,EAAO,EAAI,EAAG,EAAK,CAAS,EAE3E,OAAO,EAAc,EAGvB,OAAO,EAAc,GAGvB,WAAW,CAAC,EAAY,EAAY,EAAiD,CACnF,IAAM,EAAW,GAAS,iBAAmB,GAAS,EAAI,EAK1D,GAAI,IAAM,MAAQ,OAAO,IAAM,UAAY,IAAM,MAAQ,OAAO,IAAM,SACpE,GAAI,CACF,IAAM,EAAS,EAAU,IACnB,EAAS,EAAU,IACzB,GAAI,GAAS,EAAO,CAClB,IAAM,EAAS,EAAO,eAAe,EAAM,MAAO,EAAM,MAAO,EAAM,MAAO,EAAM,MAAO,CAAO,EAChG,GAAI,GAAU,EAAG,OAAO,IAAW,GAGrC,KAAM,EAIV,OAAO,KAAK,UAAU,CAAC,IAAM,KAAK,UAAU,CAAC,GAG/C,WAAW,CAAC,EAAyB,CACnC,GAAI,CAAC,GAAY,CAAK,EAAG,OAAO,EAChC,IAAQ,QAAO,SAAW,EAAc,IACxC,OAAO,GAAmB,EAAO,CAAK,GAGxC,gBAAgB,CAAC,EAAe,EAAiG,CAC/H,GAAI,CAAC,EAAO,MAAO,CAAE,MAAO,OAAW,MAAO,cAAwB,EACtE,IAAM,EAAS,GAAW,MAAM,CAAK,EACrC,OAAQ,EAAO,YACR,eACA,iBAAkB,CACrB,IAAM,EAAQ,EAAO,OAAO,EAC5B,GAAI,EAAQ,CACV,IAAM,EAAY,EAAO,UAAU,CAAK,EACxC,GAAI,EAAU,QAAS,MAAO,CAAE,MAAO,EAAU,KAAM,MAAO,kBAA4B,EAC1F,MAAO,CAAE,MAAO,OAAW,MAAO,kBAA4B,EAEhE,MAAO,CAAE,QAAO,MAAO,kBAA4B,CACrD,KACK,aAAc,CACjB,IAAM,EAAQ,EAAO,OAAO,EAC5B,GAAI,EAAQ,CACV,IAAM,EAAY,EAAO,UAAU,CAAK,EACxC,GAAI,EAAU,QAAS,MAAO,CAAE,MAAO,EAAU,KAAM,MAAO,gBAA0B,EAExF,MAAO,CAAE,QAAO,MAAO,gBAA0B,EAEnD,MAAO,CAAE,QAAO,MAAO,gBAA0B,CACnD,SAEE,MAAO,CAAE,MAAO,OAAW,MAAO,cAAwB,IAIhE,iBAAiB,CAAC,EAIF,CACd,IAAM,EAAY,GAAS,WAAa,GAClC,EAAW,GAAS,OACpB,EAAS,GAAS,OAElB,EAAW,EAAO,cAAc,EACtC,GAAI,EAAW,EACb,MAAU,MAAM,8DAA8D,EAGhF,IAAI,EAAY,GACZ,EAAY,EAIV,EAAkB,CAAC,EACnB,EAAmB,CAAC,EACpB,EAAgC,CAAC,EACjC,EAA4C,CAAC,EAG7C,EAAS,GAAa,CAAa,EAGrC,EAAU,EACV,EAAa,GACb,EAAe,GACf,EAAgC,CAAC,EACjC,EAAgC,CAAC,EACjC,EAAkC,CAAC,EACnC,EAA8B,CAAC,EAC/B,EAAc,GACd,EAAiB,GACjB,EAAe,GACf,EAAa,GACb,EAAoB,GACpB,EAAqB,GACrB,EAAkB,GAClB,EAAe,GACf,GAAmB,EACnB,EAAa,GACb,EAAgB,GAKhB,GAAkB,OAClB,EAAmD,CAAC,EACpD,EAA8B,KAC9B,EAA6B,KAC7B,EAAgB,GAChB,EAAkB,GAClB,EAAgB,GAEpB,SAAS,CAAU,CAAC,EAAgB,CAClC,GAAI,EAAQ,SAAW,EAAG,CACxB,GAAS,EACT,OAEF,IAAM,EAAS,EAAQ,EAAQ,OAAS,GACxC,GAAI,MAAM,QAAQ,CAAM,EACtB,EAAO,KAAK,CAAK,EACZ,QAAI,IAAiB,KAC1B,EAAO,GAAgB,EACvB,EAAc,EACd,EAAe,KAKnB,SAAS,CAAc,CAAC,EAAa,CACnC,GAAI,EAAQ,SAAW,EAAG,CACxB,GAAS,EACT,OAEF,IAAM,EAAS,EAAQ,EAAQ,OAAS,GACxC,GAAI,MAAM,QAAQ,CAAM,EACtB,GAAI,EAAO,OAAS,EAAG,EAAO,EAAO,OAAS,GAAK,EAC9C,OAAO,KAAK,CAAG,EACf,QAAI,IAAgB,KACzB,EAAO,GAAe,EAI1B,SAAS,CAAO,EAAG,CACjB,GAAS,OACT,EAAQ,OAAS,EACjB,EAAe,KACf,EAAc,KACd,EAAgB,GAChB,EAAkB,GAClB,EAAgB,GAGlB,SAAS,CAAO,EAAG,CACjB,EAAU,EAAG,EAAa,GAAO,EAAe,GAChD,EAAe,OAAS,EAAG,EAAW,OAAS,EAC/C,EAAa,OAAS,EAAG,EAAkB,OAAS,EACpD,EAAc,GAAI,EAAiB,GAAO,EAAe,GACzD,EAAa,GAAI,EAAoB,GACrC,EAAqB,GAAI,EAAkB,GAC3C,EAAe,GAAI,GAAmB,EACtC,EAAa,GAAO,EAAgB,GACpC,EAAQ,EAKV,SAAS,CAAS,CAAC,EAAyB,EAA4C,CACtF,IAAM,EAAM,EAAS,OACrB,GAAI,EAAQ,IAAQ,EAAU,EAAM,EAAS,OAAO,KACpD,IAAM,EAA+B,CAAC,EACtC,QAAS,EAAI,EAAG,EAAI,EAAK,IAAK,CAC5B,IAAM,EAAM,EAAS,GACf,EAAM,EAAW,GAAI,EAAM,EAAa,GAC9C,GAAI,IAAQ,IAAK,EAAQ,KAAK,IAAQ,KAAO,EAAO,GAAO,EAAG,EACzD,QAAI,OAAO,IAAQ,SAAW,IAAQ,EAAM,IAAQ,EAAK,OAAO,KAEvE,OAAO,EAGT,SAAS,EAAa,EAAY,CAChC,OAAO,EAAa,OAAS,GAAK,EAAa,KAAK,KAAK,EAAU,EAAG,EAAK,IAAM,IAAI,EAGvF,SAAS,EAAiB,CAAC,EAAwB,EAAgB,EAAgB,CACjF,GAAI,EAAS,SAAW,EAAG,OAC3B,IAAM,EAAe,GAAkB,EAAY,EAAc,CAAO,EACxE,QAAW,KAAO,EAAU,CAC1B,IAAM,EAAU,EAAU,EAAI,SAAU,EAAI,EAC5C,GAAI,CAAC,EAAS,SACd,IAAI,EACJ,GAAI,CAAE,EAAQ,KAAK,MAAM,EAAY,OAAO,CAAU,CAAC,EAAK,KAAM,CAAE,SACpE,GAAI,EAAI,OAAQ,CACd,IAAM,EAAS,EAAI,OAAO,UAAU,CAAK,EACzC,GAAI,CAAC,EAAO,QAAS,SACrB,EAAQ,EAAO,KAEjB,IAAM,EAAmB,CAAE,KAAM,QAAS,KAAM,EAAc,QAAO,SAAQ,SAAQ,SAAQ,EAC7F,QAAS,EAAI,EAAQ,OAAS,EAAG,GAAK,EAAG,IAAK,CAC5C,IAAM,EAAI,EAAQ,GAClB,GAAI,OAAO,IAAM,UAAY,EAAM,QAAU,OAAW,EAAM,MAAQ,EACtE,GAAI,OAAO,IAAM,UAAY,EAAM,MAAQ,OAAW,EAAM,IAAM,EAEpE,EAAI,SAAS,CAAY,GAI7B,SAAS,EAAS,CAAC,EAAe,EAAgB,EAAgB,CAChE,GAAI,EAAU,SAAW,EAAG,OAC5B,IAAM,EAAe,GAAkB,EAAY,EAAc,CAAO,EACxE,QAAW,KAAO,EAAW,CAC3B,GAAI,CAAC,EAAU,EAAI,SAAU,EAAI,EAAG,SACpC,EAAI,SAAS,CAAE,KAAM,QAAS,KAAM,EAAc,QAAO,SAAQ,QAAO,CAAC,GAI7E,SAAS,EAAM,CAAC,EAAiB,EAAc,EAAY,CACzD,QAAS,EAAI,EAAM,EAAI,EAAI,IAAK,CAC9B,IAAM,EAAI,EAAI,GAGd,GAAI,EAAY,CACd,GAAI,IAAM,IAAQ,IAAM,KAAQ,IAAM,IAAQ,IAAM,IAAQ,IAAM,IAAQ,IAAM,IAAQ,IAAM,EAAM,CAElG,IAAM,EAAY,EAAI,EACtB,GAAkB,EAAI,MAAM,EAAe,CAAC,EAAG,EAAe,CAAS,EAEvE,GAAI,CAAE,EAAW,KAAK,MAAM,CAAa,CAAC,EAAK,KAAM,CAAE,EAAW,IAAI,EACtE,EAAgB,GAChB,EAAa,GACb,EAAgB,GAEhB,IACA,SAGF,GAAiB,GAAI,GACrB,SAGF,GAAI,EAAc,CAEhB,GADA,EAAe,GACX,GAAmB,EAAc,EAAG,CAEtC,IAAI,EACJ,OAAQ,OACD,KAAM,EAAU;AAAA,EAAM,UACtB,KAAM,EAAU,KAAM,UACtB,KAAM,EAAU,KAAM,UACtB,IAAM,EAAU,IAAK,UACrB,IAAM,EAAU,KAAM,UACtB,IAAM,EAAU,IAAK,UACrB,IAAM,EAAU,KAAM,UACtB,KAAM,EAAU,KAAM,cAClB,EAAU,GAAI,GAAI,MAI7B,GAFA,GAAgB,EAEZ,EACF,GAAiB,EAEnB,GAAI,EAAmB,GAAc,EAChC,QAAI,EACT,GAAc,GAAI,GAEpB,SAGF,GAAI,EAAY,CACd,GAAI,IAAM,GAAM,CACd,EAAe,GACf,SAEF,GAAI,IAAM,GAAM,CAEd,GADA,EAAa,GACT,EAAmB,CAGrB,GAFA,EAAoB,GAEhB,EAAU,EAAG,EAAW,EAAU,GAAK,EAE3C,EAAe,EACf,EAAa,GACb,SAGF,GAAI,GAAmB,EAAc,EAAG,CAEtC,GAAI,GAAgB,EAAU,OAAS,EAAG,CACxC,IAAM,EAAe,EAAI,GACzB,GAAU,EAAc,GAAkB,CAAY,EAExD,EAAe,GAEf,IAAM,EAAQ,EACR,EAAM,EAAI,EAAI,EACpB,GAAkB,EAAI,MAAM,EAAO,EAAI,CAAC,EAAG,EAAO,CAAG,EAErD,EAAe,CAAa,EAC5B,EAAgB,GAChB,EAAkB,GAEpB,EAAkB,GAClB,EAAqB,GACrB,SAGF,GAAI,GAAmB,EAAc,EAAG,CACtC,IAAM,EAAK,GAAI,GAGf,GAFA,GAAgB,EAEZ,EAAiB,GAAiB,EACtC,GAAI,EAAmB,GAAc,EAChC,QAAI,EACT,GAAc,GAAI,GAEpB,SAIF,OAAQ,OACD,KAAM,CAST,GARA,EAAe,GAAW,IAC1B,EAAW,GAAW,KACtB,EAAa,GAAW,KACxB,EAAkB,GAAW,EAC7B,IACA,EAAiB,GACjB,EAAe,GAEX,EAAc,GAAK,GAAc,EACnC,EAAc,EAAU,EAG1B,IAAM,EAA+B,CAAC,EACtC,EAAW,CAAG,EACd,EAAQ,KAAK,CAAG,EAChB,KACF,KACK,IAAM,CAQT,GAPA,EAAe,GAAW,IAC1B,EAAW,GAAW,KACtB,EAAa,GAAW,EACxB,EAAkB,GAAW,EAC7B,IACA,EAAiB,GACjB,EAAe,GACX,EAAc,GAAK,GAAc,EACnC,EAAc,EAAU,EAG1B,IAAM,EAAiB,CAAC,EACxB,EAAW,CAAG,EACd,EAAQ,KAAK,CAAG,EAChB,KACF,KACK,SACA,IAAM,CACT,IACA,IAAM,EAAa,GAAe,EAClC,GAAI,GAAc,GAAW,EAC3B,EAAc,GAGhB,GAAI,GAAW,GAAK,EAAc,GAAK,CAAC,EAAY,CAClD,IAAM,EAAQ,EAAkB,GAC1B,EAAM,EAAI,EAAI,EACpB,GAAkB,EAAI,MAAM,EAAO,EAAI,CAAC,EAAG,EAAO,CAAG,EAGvD,GAAI,EAAU,EAEZ,EADkB,EAAe,EAAU,KACZ,IAC/B,EAAe,GAGjB,EAAQ,IAAI,EACZ,KACF,KACK,IAAM,CAET,GADA,EAAa,GACT,GAAkB,EAAc,EAElC,EAAoB,GACpB,EAAa,GACR,QAAI,GAAgB,IAAY,GAAM,EAAU,GAAK,EAAe,EAAU,KAAO,IAAM,CAEhG,GAAI,EAAc,GAAK,CAAC,GAAc,EACpC,EAAkB,GAClB,EAAqB,EACrB,EAAe,GACf,GAAmB,EAAI,EAEvB,EAAgB,GAChB,EAAkB,GAElB,EAAW,EAAE,EAEf,EAAe,GAEjB,KACF,KACK,IAAM,CAIT,GAHA,EAAiB,GACjB,EAAe,GAEX,IAAiB,MAAQ,EAAQ,OAAS,EAAG,CAC/C,IAAM,EAAS,EAAQ,EAAQ,OAAS,GACxC,GAAI,CAAC,MAAM,QAAQ,CAAM,EACtB,EAAmC,GAAgB,KACpD,EAAc,EAGlB,KACF,KACK,IAAM,CAET,GAAI,EAAU,GAAK,EAAe,EAAU,KAAO,IAAK,CACtD,IAAM,EAAM,EAAa,EAAU,GAGnC,GAFA,EAAa,EAAU,IAAM,GAAO,IAAM,EAEtC,EAAc,GAAK,GAAc,EACnC,EAAc,EAAU,EAI5B,GAAI,EAAU,GAAK,EAAe,EAAU,KAAO,IACjD,EAAiB,GACjB,EAAW,EAAU,GAAK,KAE5B,EAAe,GACf,KACF,SACS,CAEP,GAAI,GAAgB,IAAY,GAAM,EAAU,GAAK,EAAe,EAAU,KAAO,KACnF,GAAI,GAAK,IAAQ,GAAK,IAAQ,IAAM,IAAQ,IAAM,KAAQ,IAAM,KAAQ,IAAM,IAAM,CAElF,GAAI,EAAc,GAAK,CAAC,GAAc,EAAG,CACvC,IAAI,EAAI,EAAI,EACZ,MAAO,EAAI,EAAI,CACb,IAAM,EAAK,EAAI,GACf,GAAI,IAAO,IAAQ,IAAO,KAAQ,IAAO,IAAQ,IAAO,IAAQ,IAAO,IAAQ,IAAO,IAAQ,IAAO,EAAM,MAC3G,IAEF,GAAI,EAAI,EAAI,CAEV,GAAkB,EAAI,MAAM,EAAG,CAAC,EAAG,EAAG,EAAI,CAAC,EAE3C,IAAM,EAAY,EAAY,OAAO,EAAI,MAAM,EAAG,CAAC,CAAC,EACpD,GAAI,CAAE,EAAW,KAAK,MAAM,CAAS,CAAC,EAAK,KAAM,CAAE,EAAW,IAAI,EAClE,EAAI,EAAI,EAGR,OAAa,GACb,EAAgB,EAChB,EAAgB,EAAY,OAAO,EAAI,MAAM,EAAG,CAAE,CAAC,EACnD,EAAI,EAGR,EAAe,IAGnB,KACF,GAKJ,GAAI,GAAmB,EACrB,EAAe,CAAa,EAK9B,GAAI,GAAmB,EAAa,OAAS,GAAK,EAAc,GAAK,EAAU,OAAS,EACtF,GAAU,EAAc,GAAkB,EAAK,EAAgB,EAC/D,EAAe,GACf,GAAmB,EAKvB,IAAM,GAAoB,CACxB,EAAE,CAAC,KAAiB,EAA0B,CAC5C,IAAI,EACA,EACJ,GAAI,EAAK,SAAW,GAAK,OAAO,EAAK,KAAO,UAAY,EAAK,KAAO,MAAQ,cAAe,EAAK,GAC9F,EAAS,EAAK,GACd,EAAW,EAAK,GAEhB,OAAW,EAAK,GAGlB,OADA,EAAS,KAAK,CAAE,SAAU,GAAY,CAAI,EAAG,WAAU,QAAO,CAAC,EACxD,IAGT,OAAO,CAAC,EAAc,EAAoD,CAExE,OADA,EAAU,KAAK,CAAE,SAAU,GAAY,CAAI,EAAG,UAAS,CAAC,EACjD,IAGT,MAAM,CAAC,EAA+C,CAEpD,OADA,EAAc,KAAK,CAAQ,EACpB,IAGT,IAAI,IAAI,EAA8B,CACpC,QAAW,KAAK,EAAO,EAAa,KAAK,GAAY,CAAC,CAAC,EACvD,OAAO,IAGT,GAAG,CAAC,EAAc,EAAkC,CAClD,IAAM,EAAW,GAAY,CAAI,EAC3B,EAAK,CAAC,EAAkB,IAC5B,EAAE,SAAW,EAAE,QAAU,EAAE,MAAM,CAAC,EAAG,IAAM,IAAM,EAAE,EAAE,EACjD,EAAS,CAAC,IAAgB,CAC9B,QAAS,EAAI,EAAK,OAAS,EAAG,GAAK,EAAG,IACpC,GAAI,EAAG,EAAK,GAAG,SAAU,CAAQ,IAAM,CAAC,GAAY,EAAK,GAAG,WAAa,GACvE,EAAK,OAAO,EAAG,CAAC,GAKtB,OAFA,EAAO,CAAQ,EACf,EAAO,CAAS,EACT,IAGT,IAAI,CAAC,EAAwC,CAC3C,GAAI,EAAW,MAAU,MAAM,+BAA+B,EAG9D,IAAI,EACJ,GAAI,OAAO,IAAU,UAEnB,GADA,EAAc,EAAO,KAAK,CAAK,EAC3B,IAAgB,KAAM,OAAO,GAAY,EAAO,kBAAkB,CAAQ,GACzE,QAAI,EAAO,UAAU,EAE1B,EAAc,EACT,KACL,IAAM,EAAM,EAAY,OAAO,CAAK,EAC9B,EAAS,EAAO,KAAK,CAAG,EAC9B,GAAI,IAAW,KAAM,OAAO,GAAY,EAAO,kBAAkB,CAAQ,GACzE,EAAc,GAAQ,OAAO,CAAM,EAIrC,IAAQ,MAAK,OAAQ,GAAY,EAAa,GAAS,EAAG,IAAI,EACxD,EAAU,EAAO,sBAAsB,CAAQ,EAC/C,EAAS,EAAO,YAAY,EAAU,EAAK,CAAG,EAC9C,EAAS,EAAO,sBAAsB,CAAQ,EAGpD,GAAI,EAAS,EAAS,CACpB,IAAM,EAAU,EAAO,sBAAsB,CAAQ,IAAM,EAErD,EAAW,IAAW,GAAK,IAAW,EACxC,KAAK,IAAI,EAAQ,EAAO,qBAAqB,CAAQ,CAAC,EACtD,EACJ,GAAI,EAAU,EAAS,CACrB,IAAM,GAAU,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAQ,CAAO,EACpE,GAAO,GAAS,EAAS,CAAO,EAGlC,IAAK,IAAW,GAAK,IAAW,IAAM,GAAc,EAAe,CACjE,GAAI,CAAE,EAAW,KAAK,MAAM,CAAa,CAAC,EAAK,KAAM,CAAE,EAAW,IAAI,EACtE,EAAgB,GAChB,EAAa,GACb,EAAgB,IAIpB,IAAM,EAAa,GAAY,IAAW,QAG1C,GAAI,IAAc,IAAe,YAAc,IAAe,aAAc,CAC1E,IAAI,EAAY,EAChB,MAAO,IAAc,IAAO,CAC1B,IAAM,EAAY,EAAO,kBAAkB,CAAQ,EACnD,GAAI,IAAc,GAAK,IAAc,EAAG,MAGxC,IAAM,GAAM,EAAO,sBAAsB,CAAQ,IAAM,EACjD,GAAK,EAAO,qBAAqB,CAAQ,EACzC,GAAY,IAAI,WAAW,GAAK,EAAE,EACxC,GAAU,IAAI,IAAI,WAAW,EAAO,OAAO,OAAQ,GAAI,EAAE,CAAC,EAE1D,GAAU,KAAK,GAAM,EAAE,EAGvB,IAAM,GAAY,EAAO,sBAAsB,CAAQ,EACvD,EAAQ,EAGR,IAAM,GAAW,EAAO,MAAM,GAAU,MAAM,IAAM,EACpD,GAAI,GAAU,CACZ,IAAI,WAAW,EAAO,OAAO,OAAQ,GAAU,GAAU,MAAM,EAAE,IAAI,EAAS,EAC9E,IAAM,GAAM,EAAO,UAAU,GAAU,EAAE,EAEzC,GADA,EAAO,QAAQ,GAAU,GAAU,MAAM,EACrC,IAAO,GAAK,EACd,EAAS,CAAE,KAAM,OAAQ,MAAO,IAAa,MAAO,GAAa,EAAG,CAAE,CAAC,EAK3E,GAAI,GAAY,IAAM,EAAS,OAAS,GAAK,EAAU,OAAS,GAAI,CAClE,IAAM,GAAO,EAAO,sBAAsB,CAAQ,IAAM,EAClD,GAAM,EAAO,sBAAsB,CAAQ,EACjD,GAAI,GAAM,EAAG,CACX,IAAM,GAAK,IAAI,WAAW,EAAO,OAAO,OAAQ,GAAK,EAAG,EACxD,GAAO,GAAI,EAAG,EAAG,GAIrB,GAAI,KAAc,EAAG,MAEvB,OAAO,GAAY,EAAO,kBAAkB,CAAQ,IAAM,aAG5D,OAAO,GAGT,QAAQ,EAAwB,CAC9B,GAAI,EAAW,MAAU,MAAM,+BAA+B,EAC9D,IAAM,EAAS,EAAO,kBAAkB,CAAQ,EAChD,GAAI,IAAW,EAAG,MAAU,YAAY,mCAAmC,EAE3E,GAAI,IAAW,EAAG,CAEhB,IAAI,EAAiB,GAGrB,GAAI,GAAc,EAAe,CAC/B,IAAM,EAAU,EACV,EAAY,EAAQ,WAAW,GAAG,EAAI,OACxC,EAAQ,WAAW,GAAG,EAAI,QAC1B,EAAQ,WAAW,GAAG,EAAI,OAC1B,EACJ,GAAI,CACF,IAAM,EAAS,KAAK,MAAM,CAAS,EACnC,GAAI,EAAQ,SAAW,EAAG,EAAQ,EAClC,KAAM,GACH,QAAI,GAAmB,EAAQ,SAAW,EAC/C,EAAQ,EAGV,GAAI,IAAU,OAAW,OACzB,OAAO,EAIT,IAAM,EAAU,EAAO,sBAAsB,CAAQ,IAAM,EACrD,EAAW,EAAO,qBAAqB,CAAQ,EACrD,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAS,EAAU,EAAE,EAAE,KAAK,EAAI,EACrE,IAAM,EAAQ,EAAO,UAAU,EAAQ,CAAQ,EAC/C,GAAI,EAAQ,EAAG,CACb,IAAM,EAAY,EAAO,eAAe,EAClC,EAAM,GAAe,IAAc,qBAAqB,KAC9D,MAAU,YAAY,eAAe,GAAK,EAE5C,OAAO,GAAa,CAAK,GAG3B,YAAY,EAAsB,CAChC,GAAI,EAAW,OAAO,KACtB,IAAM,EAAQ,EAAO,yBAAyB,CAAQ,IAAM,EACtD,EAAO,EAAO,yBAAyB,CAAQ,EACrD,GAAI,EAAO,EAAG,CACZ,IAAM,EAAO,IAAI,WAAW,CAAI,EAEhC,OADA,EAAK,IAAI,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAM,CAAI,CAAC,EAClD,EAET,OAAO,MAGT,SAAS,EAAe,CACtB,GAAI,EAAW,MAAO,QACtB,OAAO,GAAY,EAAO,kBAAkB,CAAQ,IAAM,SAG5D,YAAY,EAAuB,CACjC,GAAI,EAAW,OAAO,KACtB,IAAM,EAAS,EAAO,sBAAsB,CAAQ,IAAM,EACpD,EAAS,EAAO,sBAAsB,CAAQ,EACpD,GAAI,IAAW,EAAG,OAAO,KACzB,IAAM,EAAO,IAAI,YAAY,CAAM,EAEnC,OADA,IAAI,WAAW,CAAI,EAAE,IAAI,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAQ,CAAM,CAAC,EACtE,GAGT,OAAO,EAAS,CACd,GAAI,CAAC,EACH,EAAO,eAAe,CAAQ,EAC9B,EAAY,KAIf,OAAO,cAAc,EAA+C,CACnE,GAAI,CAAC,EAAQ,MAAU,MAAM,wDAAuD,EACpF,IAAM,EAAK,KACL,EAAS,GAAiB,CAAM,EAAI,EAAO,UAAU,EAAI,KACzD,EAAO,EAAS,KAAQ,EAA8B,OAAO,eAAe,EAC9E,EAAW,GAEf,MAAO,MACC,KAAI,EAAG,CACX,GAAI,EAEF,OADA,EAAG,QAAQ,EACJ,CAAE,KAAM,GAAe,MAAO,MAAU,EAGjD,IAAM,EAAS,EACX,MAAM,EAAO,KAAK,EAClB,MAAM,EAAM,KAAK,EAErB,GAAI,EAAO,MAAQ,CAAC,EAAO,MAGzB,OAFA,EAAW,GACX,EAAG,QAAQ,EACJ,CAAE,KAAM,GAAe,MAAO,MAAU,EAGjD,IAAM,EAAS,EAAG,KAAK,EAAO,KAAK,EAC7B,EAAU,EAAG,SAAS,EAE5B,GAAI,IAAW,YAAc,IAAW,YAEtC,OADA,EAAW,GACJ,CAAE,KAAM,GAAO,MAAO,CAAQ,EAEvC,GAAI,IAAW,QAGb,MAFA,EAAW,GACX,EAAG,QAAQ,EACD,YAAY,mCAAmC,EAG3D,MAAO,CAAE,KAAM,GAAO,MAAO,CAAQ,QAEjC,OAAM,EAAG,CAGb,GAFA,EAAW,GACX,EAAG,QAAQ,EACP,EAAQ,EAAO,OAAO,EAC1B,MAAO,CAAE,KAAM,GAAe,MAAO,MAAU,IAEhD,OAAO,cAAc,EAAG,CAAE,OAAO,KACpC,EAEJ,EAEA,OAAO,IAGT,YAAY,CAAC,EAA4B,CAEvC,IAAI,EACA,EAAoC,KACpC,EAEJ,GAAI,GAAO,OAAO,IAAQ,UAAY,cAAe,GAAO,EAAE,SAAU,IAAQ,EAAE,WAAY,IAAQ,EAAE,WAAY,GAElH,EAAS,EAET,EAAY,GAAkB,CAAG,EAC5B,QAAI,GAAO,OAAO,IAAQ,YAAa,SAAU,KAAO,WAAY,KAAO,WAAY,KAI5F,GAFA,EAAS,EAAI,OACb,EAAS,EAAI,OACT,EAAI,KACN,EAAY,EAAI,KAAK,IAAI,EAAW,EAC/B,QAAI,EAAI,OAEb,EAAY,GAAkB,EAAI,MAAM,EAI5C,IAAM,EAAW,EAAS,GAAa,EAAI,KAErC,EAAW,EAAO,cAAc,EACtC,GAAI,EAAW,EACb,MAAU,MAAM,kEAAkE,EAGpF,IAAI,EAAY,GACZ,EAAuB,GACvB,EAGA,EAAkB,OAClB,EAAmD,CAAC,EACpD,EAA8B,KAC9B,EAA6B,KAC7B,EAAgB,GAChB,EAAkB,GAClB,EAAgB,GAGhB,EAAe,GACf,EAAiB,GACjB,EAAY,EACZ,EAA6B,CAAC,EAC9B,EAAmB,GACnB,EAAiB,GACjB,EAAe,GACf,EAAsB,GACtB,EAAe,GAKf,EAAgC,CAAC,EACjC,EAAc,GAKlB,SAAS,EAAa,EAAY,CAChC,GAAI,CAAC,EAAW,MAAO,GAEvB,IAAM,EAAsB,CAAC,EAC7B,QAAS,EAAI,EAAG,EAAI,EAAW,IAC7B,GAAI,EAAW,KAAO,KAAM,EAAU,KAAK,EAAW,EAAG,EAE3D,QAAW,KAAQ,EAAW,CAC5B,IAAM,EAAU,EAAK,OACf,EAAS,EAAU,OACnB,EAAa,KAAK,IAAI,EAAQ,CAAO,EACvC,EAAU,GACd,QAAS,EAAI,EAAG,EAAI,EAAY,IAAK,CACnC,IAAM,EAAM,EAAK,GACjB,GAAI,IAAQ,IAAK,SACjB,GAAI,OAAO,IAAQ,SAAU,SAC7B,GAAI,EAAU,KAAO,EAAK,CAAE,EAAU,GAAO,OAE/C,GAAI,EAAS,MAAO,GAEtB,MAAO,GAGT,SAAS,CAAU,CAAC,EAAgB,CAClC,GAAI,EAAQ,SAAW,EAAG,CAAE,EAAS,EAAO,OAC5C,IAAM,EAAS,EAAQ,EAAQ,OAAS,GACxC,GAAI,MAAM,QAAQ,CAAM,EAAK,EAAO,KAAK,CAAK,EACzC,QAAI,IAAiB,KAAQ,EAAO,GAAgB,EAAO,EAAc,EAAc,EAAe,KAG7G,SAAS,CAAc,CAAC,EAAa,CACnC,GAAI,EAAQ,SAAW,EAAG,CAAE,EAAS,EAAK,OAC1C,IAAM,EAAS,EAAQ,EAAQ,OAAS,GACxC,GAAI,MAAM,QAAQ,CAAM,EACtB,GAAI,EAAO,OAAS,EAAG,EAAO,EAAO,OAAS,GAAK,EAC9C,OAAO,KAAK,CAAG,EACf,QAAI,IAAgB,KAAQ,EAAO,GAAe,EAK3D,SAAS,EAAM,CAAC,EAAiB,EAAc,EAAY,CACzD,IAAM,EAAU,IAAc,KAC9B,QAAS,EAAI,EAAM,EAAI,EAAI,IAAK,CAC9B,IAAM,EAAI,EAAI,GAEd,GAAI,EAAc,CAChB,GAAI,IAAM,IAAQ,IAAM,KAAQ,IAAM,IAAQ,IAAM,IAAQ,IAAM,IAAQ,IAAM,IAAQ,IAAM,EAAM,CAClG,GAAI,EAAc,EAChB,GAAI,CAAE,EAAW,KAAK,MAAM,CAAa,CAAC,EAAK,KAAM,CAAE,EAAW,IAAI,EAExE,EAAgB,GAChB,EAAe,GACf,IAAK,SAEP,GAAI,EAAc,EAAG,GAAiB,GAAI,GAC1C,SAGF,GAAI,EAAgB,CAElB,GADA,EAAiB,GACb,GAAmB,EAAc,EAAG,CACtC,IAAI,EACJ,OAAQ,OACD,KAAM,EAAU;AAAA,EAAM,UACtB,KAAM,EAAU,KAAM,UACtB,KAAM,EAAU,KAAM,UACtB,IAAM,EAAU,IAAK,UACrB,IAAM,EAAU,KAAM,UACtB,IAAM,EAAU,IAAK,UACrB,IAAM,EAAU,KAAM,UACtB,KAAM,EAAU,KAAM,cAClB,EAAU,GAAI,GAAI,MAE7B,GAAiB,EAEnB,GAAI,EAAqB,GAAgB,GAAI,GAC7C,SAGF,GAAI,EAAc,CAChB,GAAI,IAAM,GAAM,CAAE,EAAiB,GAAM,SACzC,GAAI,IAAM,GAAM,CAEd,GADA,EAAe,GACX,EAAqB,CAIvB,GAHA,EAAsB,GACtB,EAAe,EAEX,GAAW,EAAY,EACzB,EAAW,EAAY,GAAK,EAE9B,EAAe,GACf,SAEF,GAAI,GAAmB,EAAc,EACnC,EAAe,CAAa,EAC5B,EAAgB,GAChB,EAAkB,GAEpB,SAEF,GAAI,GAAmB,EAAc,EAAG,GAAiB,GAAI,GAC7D,GAAI,EAAqB,GAAgB,GAAI,GAC7C,SAGF,OAAQ,OACD,KAAM,CAET,GADA,EAAY,GAAa,IACrB,EAAS,EAAW,GAAa,KAIrC,GAHA,IACA,EAAmB,GACnB,EAAiB,GACb,EAAc,EAAG,CACnB,IAAM,EAA+B,CAAC,EACtC,EAAW,CAAG,EACd,EAAQ,KAAK,CAAG,EAElB,KACF,KACK,IAAM,CAET,GADA,EAAY,GAAa,IACrB,EAAS,EAAW,GAAa,KAIrC,GAHA,IACA,EAAmB,GACnB,EAAiB,GACb,EAAc,EAAG,CACnB,IAAM,EAAiB,CAAC,EACxB,EAAW,CAAG,EACd,EAAQ,KAAK,CAAG,EAElB,KACF,KACK,SAAW,IAAM,CAEpB,GADA,IACI,GAAe,GACjB,GAAI,GAAa,EACf,EAAc,GAEd,EAAQ,IAAI,EAId,OAAQ,IAAI,EAEd,GAAI,EAAY,EACd,EAAmB,EAAY,EAAY,KAAO,IAClD,EAAiB,GAEnB,KACF,KACK,IAAM,CACT,EAAe,GACf,IAAM,EAAU,GAAkB,IAAc,GAAM,EAAY,GAAK,EAAY,EAAY,KAAO,IACtG,GAAI,EACF,EAAsB,GACtB,EAAe,GACV,QAAI,GAAW,EAAc,EAClC,EAAgB,GAChB,EAAkB,GAClB,EAAW,EAAE,EACb,EAAiB,GAEnB,KACF,KACK,IAAM,CAIT,GAHA,EAAmB,GACnB,EAAiB,GAEb,GAAW,EAAc,GAAK,CAAC,GAAc,EAAG,CAClD,EAAc,EAAY,EAC1B,EAAe,KACf,MAKF,GAAI,EAAc,GAAK,IAAiB,MAAQ,EAAQ,OAAS,EAAG,CAClE,IAAM,EAAS,EAAQ,EAAQ,OAAS,GACxC,GAAI,CAAC,MAAM,QAAQ,CAAM,EACtB,EAAmC,GAAgB,KACpD,EAAc,EAGlB,KACF,KACK,IAAM,CACT,GAAI,GAAW,GAAe,GAAK,EAAY,GAAK,EAClD,EAAc,GAEhB,GAAI,EAAY,GAAK,EAAY,EAAY,KAAO,KAElD,GADA,EAAmB,GACf,EAAS,EAAW,EAAY,GAAK,KAE3C,EAAiB,GACjB,KACF,SACS,CACP,GAAI,GAAe,EAAG,MAEtB,GADmB,GAAkB,IAAc,GAAM,EAAY,GAAK,EAAY,EAAY,KAAO,KAEvG,GAAI,GAAK,IAAQ,GAAK,IAAQ,IAAM,IAAQ,IAAM,KAAQ,IAAM,KAAQ,IAAM,IAAM,CAClF,IAAI,EAAI,EAAI,EACZ,MAAO,EAAI,EAAI,CACb,IAAM,EAAK,EAAI,GACf,GAAI,IAAO,IAAQ,IAAO,KAAQ,IAAO,IAAQ,IAAO,IAAQ,IAAO,IAAQ,IAAO,IAAQ,IAAO,EAAM,MAC3G,IAEF,GAAI,EAAI,EAAI,CACV,IAAM,EAAY,EAAY,OAAO,EAAI,MAAM,EAAG,CAAC,CAAC,EACpD,GAAI,CAAE,EAAW,KAAK,MAAM,CAAS,CAAC,EAAK,KAAM,CAAE,EAAW,IAAI,EAClE,EAAI,EAAI,EAER,OAAe,GACf,EAAgB,EAAY,OAAO,EAAI,MAAM,EAAG,CAAE,CAAC,EACnD,EAAI,EAEN,EAAiB,IAGrB,KACF,GAKJ,GAAI,GAAmB,GAAiB,EAAc,EACpD,EAAe,CAAa,EAK9B,GAAI,EAAc,CAChB,IAAM,EAAS,EAAO,kBAAkB,CAAQ,EAChD,GAAI,IAAW,GAAK,IAAW,EAAG,CAEhC,IAAM,EAAI,EACJ,EAAY,EAAE,WAAW,GAAG,EAAI,OAClC,EAAE,WAAW,GAAG,EAAI,QACpB,EAAE,WAAW,GAAG,EAAI,OAAS,EACjC,GAAI,CAAE,EAAW,KAAK,MAAM,CAAS,CAAC,EAAK,KAAM,CAAE,EAAW,IAAI,EAClE,EAAgB,GAChB,EAAe,KAKrB,IAAM,EAAkB,IAAM,CAC5B,GAAI,IAAoB,OAAW,OACnC,IAAM,EAAQ,EAAO,yBAAyB,CAAQ,IAAM,EACtD,EAAO,EAAO,yBAAyB,CAAQ,EACrD,GAAI,EAAO,EACT,EAAkB,IAAI,WAAW,CAAI,EACrC,EAAgB,IAAI,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAM,CAAI,CAAC,EAEpE,OAAkB,MAIlB,EAAU,EAEd,MAAO,CACL,IAAI,CAAC,EAAwC,CAC3C,GAAI,EAAW,MAAU,MAAM,0BAA0B,EAEzD,GAAI,EAAU,CACZ,IAAM,EAAO,OAAO,IAAU,SAAW,EAAQ,EAAY,OAAO,CAAK,EACnE,EAAc,EAAS,KAAK,CAAI,EACtC,GAAI,IAAgB,KAAM,OAAO,GAAY,EAAO,kBAAkB,CAAQ,GAC9E,EAAQ,EAGV,IADiB,OAAO,IAAU,SAAW,EAAM,OAAS,EAAM,cACjD,EAAG,OAAO,GAAY,EAAO,kBAAkB,CAAQ,GACxE,IAAQ,MAAK,OAAQ,GAAY,EAAO,GAAS,EAAG,IAAI,EAClD,EAAY,EAAO,YAAY,EAAU,EAAK,CAAG,EAEjD,EAAS,EAAO,sBAAsB,CAAQ,EACpD,GAAI,EAAS,EAAS,CACpB,IAAM,EAAU,EAAO,sBAAsB,CAAQ,IAAM,EAErD,EAAW,IAAc,GAAK,IAAc,EAC9C,KAAK,IAAI,EAAQ,EAAO,qBAAqB,CAAQ,CAAC,EACtD,EACJ,GAAI,EAAU,EAAS,CACrB,IAAM,EAAU,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAQ,CAAO,EACpE,GAAO,EAAS,EAAS,CAAO,EAElC,EAAU,EAEZ,OAAO,GAAY,IAAc,SAGnC,QAAQ,EAAwB,CAC9B,GAAI,EAAW,MAAU,MAAM,0BAA0B,EACzD,GAAI,IAAgB,GAAU,OAAO,EAErC,IAAM,EAAS,EAAO,kBAAkB,CAAQ,EAChD,GAAI,IAAW,EACb,MAAU,YAAY,mCAAmC,EAG3D,GAAI,IAAW,EAAG,CAIhB,IAAI,EAAiB,EAGrB,GAAI,GAAgB,EAAe,CAEjC,IAAM,EAAU,EACV,EAAY,EAAQ,WAAW,GAAG,EAAI,OACxC,EAAQ,WAAW,GAAG,EAAI,QAC1B,EAAQ,WAAW,GAAG,EAAI,OAC1B,EACJ,GAAI,CACF,IAAM,EAAS,KAAK,MAAM,CAAS,EACnC,GAAI,EAAQ,SAAW,EAAG,EAAQ,EAClC,KAAM,GACH,QAAI,GAAmB,EAAQ,SAAW,EAE/C,EAAQ,EAGV,GAAI,IAAU,OAAW,OAGzB,OAAO,EAIT,GAAI,GAAgB,EAAe,CACjC,GAAI,CAAE,EAAW,KAAK,MAAM,CAAa,CAAC,EAAK,KAAM,CAAE,EAAW,IAAI,EACtE,EAAgB,GAChB,EAAe,GAEjB,EAAgB,EAEhB,IAAI,EAAiB,EACrB,GAAI,EAAQ,CACV,IAAM,EAAS,EAAO,UAAU,CAAK,EACrC,GAAI,CAAC,EAAO,QAAS,OAAQ,EAAc,OAC3C,EAAQ,EAAO,KAEjB,OAAQ,EAAc,GAGxB,YAAY,EAAsB,CAChC,GAAI,EAAW,OAAO,KAEtB,OADA,EAAgB,EACT,GAGT,SAAS,EAAe,CACtB,GAAI,EAAW,MAAO,QACtB,IAAM,EAAS,EAAO,kBAAkB,CAAQ,EAChD,OAAO,GAAY,IAAW,SAGhC,YAAY,EAAuB,CACjC,GAAI,EAAW,OAAO,KACtB,IAAM,EAAS,EAAO,sBAAsB,CAAQ,IAAM,EACpD,EAAS,EAAO,sBAAsB,CAAQ,EACpD,GAAI,IAAW,EAAG,OAAO,KACzB,IAAM,EAAO,IAAI,YAAY,CAAM,EAEnC,OADA,IAAI,WAAW,CAAI,EAAE,IAAI,IAAI,WAAW,EAAO,OAAO,OAAQ,EAAQ,CAAM,CAAC,EACtE,GAGT,OAAO,EAAS,CACd,GAAI,CAAC,EACH,EAAO,eAAe,CAAQ,EAC9B,EAAY,GACZ,EAAc,KAIjB,OAAO,cAAc,EAA+C,CACnE,GAAI,CAAC,EAAQ,MAAU,MAAM,wDAAuD,EACpF,IAAM,EAAO,KACP,EAAS,GAAiB,CAAM,EAAI,EAAO,UAAU,EAAI,KACzD,EAAO,EAAS,KAAQ,EAA8B,OAAO,eAAe,EAC9E,EAAW,GAEf,MAAO,MACC,KAAI,EAAG,CACX,GAAI,EAEF,OADA,EAAK,QAAQ,EACN,CAAE,KAAM,GAAe,MAAO,MAAU,EAGjD,IAAM,EAAS,EACX,MAAM,EAAO,KAAK,EAClB,MAAM,EAAM,KAAK,EAErB,GAAI,EAAO,MAAQ,CAAC,EAAO,MAGzB,OAFA,EAAW,GACX,EAAK,QAAQ,EACN,CAAE,KAAM,GAAe,MAAO,MAAU,EAGjD,IAAM,EAAS,EAAK,KAAK,EAAO,KAAK,EAC/B,EAAU,EAAK,SAAS,EAE9B,GAAI,IAAW,YAAc,IAAW,YAEtC,OADA,EAAW,GACJ,CAAE,KAAM,GAAO,MAAO,CAAQ,EAEvC,GAAI,IAAW,QAGb,MAFA,EAAW,GACX,EAAK,QAAQ,EACH,YAAY,mCAAmC,EAG3D,MAAO,CAAE,KAAM,GAAO,MAAO,CAAQ,QAEjC,OAAM,EAAG,CAGb,GAFA,EAAW,GACX,EAAK,QAAQ,EACT,EAAQ,EAAO,OAAO,EAC1B,MAAO,CAAE,KAAM,GAAe,MAAO,MAAU,IAEhD,OAAO,cAAc,EAAG,CAAE,OAAO,KACpC,EAEJ,EAEJ,EAEO,GAIT,IAAM,GAAM,MAAM,GAAK,EAGV,GAAQ,GAAI,MAGZ,GAAmB,GAAI,iBAGvB,GAAc,GAAI,YAGlB,GAAe,GAAI,aAGnB,GAAoB,GAAI,kBAGxB,GAAc,GAAI",
9
- "debugId": "C729993CDCFDC05E64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "D1365E9331F53DA464756E2164756E21",
10
10
  "names": []
11
11
  }